分类: LINUX
2005-05-10 19:52:28
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
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.
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