All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

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.