Hello,
After having worked with Debian testing for about 2 years, I'm getting fed up with the seemingly unnecessarily complicated way of building kernel modules for the stock kernels.
I'm talking about packages like lm-sensors-source, the nvidia kernel modules (haven't done that in a year though, I switched video cards), and the experimental Debian packages that provide CVS versions of the DRM module by Michel Daenzer (for my ATI card).
Currently, I'm having the following stock kernel installed:
kernel-image-2.4.21-4-k7, meaning my kernel modules are in /lib/modules/2.4.21-4-k7.
The procedure I'm going through is as follows (being root all the time)
1) install the kernel source for the kernel, e.g. kernel-source-2.4.21
2) go to /usr/src and tar xjvf kernel-source-2.4.21.tar.bz2
3) do the usual ln -s kernel-source-2.4.21 linux
4) to avoid having to configure the kernel again, copy the configuration: cp /boot/config-2.4.21-4-k7 /usr/src/linux/.config
5) apt-get install [modulename-source] (sometimes -src), e.g. lm-sensors-source.
6) this should give [modulename].tar.gz in /usr/src; extract it: tar xzvf [modulename].tar.gz
now, the source is in /usr/src/modules/[modulename]
7) and now, I always do the following (in bash): export APPEND_TO_VERSION -4-k7
if this is omitted, the kernel modules will be installed in the wrong directory, in this case in /lib/modules/2.4.21/, which doesn't even exist (it is created though).
8) go to /usr/src/linux and type: make-kpkg modules_image
this will build the sources and should result in a Debian package in /usr/src, named something like this:
[module-name]-2.4.21-4-k7_[version_of_module_source_package]+10.00.Custom_i386.deb
If you didn't use the export in step 7, you'll see that the name is like this:
[module-name]-2.4.21_[version_of_module_source_package]+10.00.Custom_i386.deb
Probably you can also get this version number correctly by using a --append-to-version command line option in the make-kpkg command line
9) install the just built package(s) with dpkg -i [package_name]
now the kernel modules should be in the right dir in /lib/modules and modprobe (or modconf) can find them.
That's it.
Notes:
- If you have just installed a new kernel-image package (i.e. a new stock kernel), you need to do everything from the start *after* booting this new kernel
- In my experience, if you forget the export of step 7, you have to wipe your whole kernel source tree and start at step 2. I know I'm supposed to do a make-kpgk modules clean, but that didn't do the trick; I still got errors like "The changelog says we are creating 2.4.21-4-k7, but I thought the version is 2.4.21" or something similar (I didn't actually copy paste this from a real situation, it might have been the other way round).
- If you have more modules to build, repeat steps 5, 6, 8 and 9 for all the source packages.
- all of the above really works, so I must be doing something right.
QUESTIONS:
A) Why isn't this procedure documented properly somewhere? Especially the APPEND_TO_VERSION was something that took me very long to figure out. It also wasn't mentioned in the installation instructions in the NVIDIA packages at the time I installed them. This caused a lot of mental suffering for me. (Which brings us to another thing: WHY oh WHY, isn't the procedure to get and install the NVIDIA drivers more automated!?)
B) Is there a faster or easier way to this?
If not, why not? There's a lot of trivial stuff there that could easily be automated, I think.
If so, (again:) why isn't it properly documented somewhere!??
See also this: http://lists.debian.org/debian-devel/2002/debian-devel-200203/msg01794.html and http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=189513
People, stock kernels are very comfortable, but building modules for them is not! Please tell me what I did wrong, or make the procedure a lot easier! (The latter especially applies to the maintainers of that NVIDIA package...)
Luckily, David Z. Maze has the lm-sensors as binary package in unstable nowadays... :) (Although not yet for 2.4.21...)
THANKS in advance.
Best regards,
A quite frustrated Manuel Bilderbeek :-)