* [Bridge] Re: i need some help with compiling bridge module
@ 2004-03-01 19:53 Abhijit Kumbhare
2004-03-01 23:16 ` Przemysław Kabaciński
0 siblings, 1 reply; 2+ messages in thread
From: Abhijit Kumbhare @ 2004-03-01 19:53 UTC (permalink / raw)
To: bridge, software-team; +Cc: rubini
[-- Attachment #1.1: Type: text/plain, Size: 2327 bytes --]
I ran into the same problem as you did - and am also a linux newbee. I modified the make
files from the book "Linux Device Drivers" by Alessandro Rubini to compile the bridge module
separately in different directory from the linux source (it worked for me on linux 2.4 on a
normal Pentium 450 MHz - I think he has taken care of most of the version dependent stuff).
You need to do the following to use that way:
1) Create a directory somewhere - say <your_dir>
2) Create a sub-directory in <your_dir> called bridge (say) - so you have <your_dir>/bridge
3) Copy over the bridge code into <your_dir>/bridge
4) Copy the file Rules.make (attached) to <your_dir>
5) Copy the Makefile to <your_dir>/bridge
6) Change the variable KERNELDIR in Rules.make to your linux source path - I am using Red Hat
Linux so my variable was /usr/src/linux-2.4
7) Don't remember whether this is required for bridge module or it complained when I was compiling
some other module - but I had to copy my machine config to $KERNELDIR/.config (for me it was
the file /usr/src/linux-2.4/configs/kernel-2.4.20-i686.config).
8) Compile in the <your_dir>/bridge directory using make (all, clean, etc.)
You can avoid using a different directory and put Rules.make in the same directory by changing the
Makefile - but you can use the same infrastructure to compile different types of modules (I started
off trying to reuse the bridge module code but later on switched to writing a totally different
module).
Alessandro Rubini has used this generic infra-structure approach - and its very nice and
borrowable approach - the code samples are at:
http://examples.oreilly.com/linuxdrive2/
>> I am trying to improve bridge module towards 802.1w (RSTP) but I am new to kernel and modules
>> programming. I dont want to compile the whole modules every time I make some changes. Could
>> you give me some clues how to set up environment to compile only selected module (bridge 802.1d)
>> for a given kernel version, written in Makefile like:
>> VERSION = 2
>> PATCHLEVEL = 4
>> SUBLEVEL = 20
>> EXTRAVERSION =-8 etc.
>> How to make a Makefile so the bridge module could be compiled separately for that kernel (or another)?
>> Thanks for any specyfic help.
>> Software Team
------------------------------------------------------------------------
[-- Attachment #1.2: Type: text/html, Size: 2698 bytes --]
[-- Attachment #2: Rules.make --]
[-- Type: text/plain, Size: 2455 bytes --]
# -*-makefile-*-
#
# This file is part of the sample code for the book "Linux Device Drivers",
# second edition. It is meant to be generic and is designed to be recycled
# by other drivers. The comments should be clear enough.
# It partly comes from Linux Makefile, and needs GNU make. <rubini@linux.it>
# TOPDIR is declared by the Makefile including this file.
ifndef TOPDIR
TOPDIR = .
endif
# KERNELDIR can be speficied on the command line or environment
ifndef KERNELDIR
KERNELDIR = /usr/src/linux-2.4
endif
# The headers are taken from the kernel
INCLUDEDIR = $(KERNELDIR)/include
# We need the configuration file, for CONFIG_SMP and possibly other stuff
# (especiall for RISC platforms, where CFLAGS depends on the exact
# processor being used).
ifeq ($(KERNELDIR)/.config,$(wildcard $(KERNELDIR))/.config)
include $(KERNELDIR)/.config
else
MESSAGE := $(shell echo "WARNING: no .config file in $(KERNELDIR)")
endif
# ARCH can be speficed on the comdline or env. too, and defaults to this arch
# Unfortunately, we can't easily extract if from kernel configuration
# (well, we could look athe asm- symlink... don't know if worth the effort)
ifndef ARCH
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/)
endif
# This is useful if cross-compiling. Taken from kernel Makefile (CC changed)
AS =$(CROSS_COMPILE)as
LD =$(CROSS_COMPILE)ld
CC =$(CROSS_COMPILE)gcc
CPP =$(CC) -E
AR =$(CROSS_COMPILE)ar
NM =$(CROSS_COMPILE)nm
STRIP =$(CROSS_COMPILE)strip
OBJCOPY =$(CROSS_COMPILE)objcopy
OBJDUMP =$(CROSS_COMPILE)objdump
# The platform-specific Makefiles include portability nightmares.
# Some platforms, though, don't have one, so check for existence first
ARCHMAKEFILE = $(TOPDIR)/Makefile.$(ARCH)
ifeq ($(ARCHMAKEFILE),$(wildcard $(ARCHMAKEFILE)))
include $(ARCHMAKEFILE)
endif
# CFLAGS: all assignments to CFLAGS are inclremental, so you can specify
# the initial flags on the command line or environment, if needed.
CFLAGS += -Wall -D__KERNEL__ -DMODULE -I$(INCLUDEDIR)
ifdef CONFIG_SMP
CFLAGS += -D__SMP__ -DSMP
endif
# Prepend modversions.h if we're running with versioning.
ifdef CONFIG_MODVERSIONS
CFLAGS += -DMODVERSIONS -include $(KERNELDIR)/include/linux/modversions.h
endif
#Install dir
VERSIONFILE = $(INCLUDEDIR)/linux/version.h
VERSION = $(shell awk -F\" '/REL/ {print $$2}' $(VERSIONFILE))
INSTALLDIR = /lib/modules/$(VERSION)/misc
[-- Attachment #3: Makefile --]
[-- Type: application/x-java-applet, Size: 592 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread* [Bridge] Re: i need some help with compiling bridge module
2004-03-01 19:53 [Bridge] Re: i need some help with compiling bridge module Abhijit Kumbhare
@ 2004-03-01 23:16 ` Przemysław Kabaciński
0 siblings, 0 replies; 2+ messages in thread
From: Przemysław Kabaciński @ 2004-03-01 23:16 UTC (permalink / raw)
To: Abhijit Kumbhare; +Cc: rubini, bridge
I really appreciate your help. It is working and now I can make changes only to that particular kernel module. I was looking for that information for a couple of days.
Once again "thank you". This information is useful for anyone with desire to write ones own kernel module. I should only mention that:
7) there is some mistake; copy your kernel config (usualy /boot/config-2.X.Y-Z) to /us/src/linux-2.X.Y-Z/.config
9) remove any dependencies to other modules (which means remove any declared - in your ".config" file compiler directives (I'm not sure whether its correct in English) like in "my" bridge module:
#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
br_fdb_get_hook = NULL;
br_fdb_put_hook = NULL;
#endif
otherwise you will have to compile other modules;
On Mon, 01 Mar 2004 11:53:18 -0800
Abhijit Kumbhare <abhijitk@nortelnetworks.com> wrote:
> I ran into the same problem as you did - and am also a linux newbee. I modified the make
> files from the book "Linux Device Drivers" by Alessandro Rubini to compile the bridge module
> separately in different directory from the linux source (it worked for me on linux 2.4 on a
> normal Pentium 450 MHz - I think he has taken care of most of the version dependent stuff).
>
> You need to do the following to use that way:
>
> 1) Create a directory somewhere - say <your_dir>
> 2) Create a sub-directory in <your_dir> called bridge (say) - so you have <your_dir>/bridge
> 3) Copy over the bridge code into <your_dir>/bridge
> 4) Copy the file Rules.make (attached) to <your_dir>
> 5) Copy the Makefile to <your_dir>/bridge
> 6) Change the variable KERNELDIR in Rules.make to your linux source path - I am using Red Hat
> Linux so my variable was /usr/src/linux-2.4
> 7) Don't remember whether this is required for bridge module or it complained when I was compiling
> some other module - but I had to copy my machine config to $KERNELDIR/.config (for me it was
> the file /usr/src/linux-2.4/configs/kernel-2.4.20-i686.config).
> 8) Compile in the <your_dir>/bridge directory using make (all, clean, etc.)
....
....
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-03-01 23:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-01 19:53 [Bridge] Re: i need some help with compiling bridge module Abhijit Kumbhare
2004-03-01 23:16 ` Przemysław Kabaciński
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.