building external modules

Gary Peck gbpeck at sbcglobal.net
Fri Mar 5 04:10:57 UTC 2004


On Thu, Mar 04, 2004 at 09:48:58PM +0100, Dumas Patrice wrote:
> Since the kernel is 2.6, I have trouble compiling and installing an external 
> module. I could only compile the driver as root.

Yeah, I've noticed the same problem. I keep meaning to bugzilla it, but
haven't gotten around to it yet. In the meantime, here's my notes on how
to compile modules as a normal user:

> And before I compile it I had to do the following as root:
> 
> * edit the Makefile in /usr/src/kernel-2.6.... and remove 'custom' from the
>   EXTRAVERSION. Otherwise it isn't installed at the right place.
> * run 
>   make oldconfig
>   make prepare

As of the 2.6 kernel, you don't need kernel-source installed to compile
kernel modules (which is what it looks like you're doing). The kernel
package now contains all necessary files.

> If I try to compile as a user, I get
> [pat at localhost driver]$ make
> make  -C /usr/src/linux SUBDIRS=/home/pat/src/eagleusb/driver modules
> make[1]: Entering directory `/opt/fc2t/usr/src/linux-2.6.3-1.118'
>   HOSTCC  scripts/modpost.o
> cc1 : Permission non accordée : ouverture du fichier de dépendances
> scripts/.modpost.o.d
> make[2]: *** [scripts/modpost.o] Erreur 1
> make[1]: *** [scripts] Erreur 2
> make[1]: Leaving directory `/opt/fc2t/usr/src/linux-2.6.3-1.118'
> make: *** [eagle-usb.ko] Erreur 2

Even though you should only need the kernel package, the current Fedora
one is missing some files. Specifically, all the actual executables are
there, but some of the intermediate files are missing. This triggers
make to try and rebuild them. Do this as a workaround (assuming kernel
version 2.6.3-1.118) while logged in as root:

sed -ie 's/^always/#always/' \
    /lib/modules/2.6.3-1.118/build/scripts/Makefile \
    /lib/modules/2.6.3-1.118/build/scripts/genksyms/Makefile

Some timestamps are also messed up:

touch -r `ls -t /lib/modules/2.6.3-1.118/build/scripts/split-include \
    /lib/modules/2.6.3-1.118/build/include/linux/autoconf.h \
    /lib/modules/2.6.3-1.118/build/include/config/MARKER | head -1` \
    /lib/modules/2.6.3-1.118/build/include/config/MARKER
touch -r /lib/modules/2.6.3-1.118/build/arch/i386/kernel/asm-offsets.s \
    /lib/modules/2.6.3-1.118/build/include/asm-i386/asm_offsets.h

And last but not least, I had to do the following, though I'm not sure
if this is necessary for all external modules, or just the one I was
building:

ln -s /dev/null /lib/modules/2.6.3-1.118/build/.__modpost.cmd

After the above commands, you should be able to build modules as a
normal user.

gary





More information about the test mailing list