Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6966246
  • 博文数量: 637
  • 博客积分: 10265
  • 博客等级: 上将
  • 技术积分: 6165
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-12 22:00
文章分类

全部博文(637)

文章存档

2011年(1)

2010年(1)

2009年(3)

2008年(12)

2007年(44)

2006年(156)

2005年(419)

2004年(1)

分类: LINUX

2005-05-10 19:52:28

Building External Linux Kernel Modules Under Fedora Core 3

Kernel Preparation

First you need to fetch the proper kernel source rpm. Obtain your kernel version using the command:

# uname -r

My computer gives:

2.6.9-1.667

Fetch the kernel source rpm from a rpmfind web site. I obtained kernel-2.6.9-1.667.FC3.src.rpm. Next, install the kernel source rpm using rpm as root. I used the following command. Your kernel version may vary.

# rpm -ivh kernel-2.6.9-1.667.FC3.src.rpm

Now change your working directory to the SPECS directory and extract the kernel source using rpmbuild:

# cd /usr/src/redhat/SPECS
# rpmbuild -bp kernel-2.6.spec

rpmbuild only prepared the kernel for compilation. We do not need to actually compile kernel. Next, change your current working directory to the kernel source. The path will vary depending on your kernel version. Copy the appropriate architecture either i586, i686, i586-smp, or i686-smp config file from the configs directory to the root of the kernel tree and call the copy .config. Use uname to obtain your architecture. My computer has an architecture of i686.

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9
# uname -m
i686
# cp configs/kernel-2.6.9-i686.config .config

The final step to prepare the kernel is to build the make target modules_prepare.

# make modules_prepare

Building External Modules

After creating a Makefile and writing module code in a different directory, using make to build your module. Refer to The Linux Kernel Module Programming Guide for information about writing module Makefiles and code. make requires the path to the kernel source, the variable M set to the current working directory and the target modules. It will vary depending on your kernel version. For my computer:

# cd ~/mydriver
# vi Makefile
# vi mydevice.c
# make -C /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 M=$PWD modules

You can use the target clean as well.

Building Specific Internal Modules

To build all configured modules within a particular subdirectory in the Linux kernel tree, issue the same make command as for external modules. Only modules that have been configured in the .config file will be built. This means the make variable related to a particular modules must exist and have a value of a lower case m. For example, for the kernel module blkmtd to be built, the associated make variable called CONFIG_MTD_BLKMTD must appears in the .config file as follows:

CONFIG_MTD_BLKMTD=m

The associated make variable name can be found in the local Makefile, for this case in drivers/mtd/devices/Makefile. To compile the module, including several others in the directory, give the following command

# cd /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/drivers/mtd/devices 
# make -C /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 M=$PWD modules

Alternatively, you can copy the desired files out of the kernel source tree, edit the Makefile, and treat the result like an external module. Again, see The Linux Kernel Module Programming Guide to help you edit the Makefile.

# cp blkmtd.c Makefile /tmp
# vi Makefile
# make -C /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 M=$PWD modules
阅读(934) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~