Kernel include

Jakub Kocourek jakub.kocourek na volny.cz
Středa Duben 6 18:30:27 CEST 2005


Mám problém s jádrem 2.6.11.2 na Slackware 10.1. Jedná se o originální jádro
z www.kernel.org. Lze jej zkompilovat, běží OK, je stabilní. Jenže jsem
přecházel z řady 2.4.x a tak jsem si řekl, že aktualizuji i hlavičkové
soubory jádra (include). To jsem ale nikdy nedělal, protože jsem to do teď
nepotřeboval. Provedl jsem to prostým zkopírováním adresáře include
z /usr/src/linux-2.6.11.2 do /usr/include. Soubory se úspěšně přepsaly.
Když kompiluji nějaký program, hlavičkové soubory fungují OK a vše jde.
Horší je to s moduly jádra. Ať použiju jibovolné z 2 umístění include,
kompilace končí chybou. Tady je příklad:
------------------------------------------------------------------------------
root na KENNY:/usr/local/bin# ./vmware-config.pl
Making sure VMware Workstation's services are stopped.

Stopping VMware services:
   Virtual machine monitor                                             done

Trying to find a suitable vmmon module for your running kernel.

None of VMware Workstation's pre-built vmmon modules is suitable for your
running kernel.  Do you want this program to try to build the vmmon module
for
your system (you need to have a C compiler installed on your system)? [yes]

Using compiler "/usr/bin/gcc". Use environment variable CC to override.

What is the location of the directory of C header files that match your
running
kernel? [/usr/include]

The header files in /usr/include are generally for C libraries, not for the
running kernel. If you do not have kernel header files in your /usr/src
directory, you probably do not have the kernel-source package installed. Are
you
sure that /usr/include contains the header files associated with your
running
kernel? [no] yes

Extracting the sources of the vmmon module.

Building the vmmon module.

Using standalone build system.
make: Entering directory `/tmp/vmware-config5/vmmon-only'
make[1]: Entering directory `/tmp/vmware-config5/vmmon-only'
make[2]: Entering directory `/tmp/vmware-config5/vmmon-only/driver-2.6.11.2'
make[2]: Leaving directory `/tmp/vmware-config5/vmmon-only/driver-2.6.11.2'
make[2]: Entering directory `/tmp/vmware-config5/vmmon-only/driver-2.6.11.2'
In file included from ../linux/hostif.c:61:
../include/pgtbl.h: In function `PgtblVa2PTELocked':
../include/pgtbl.h:81: warning: passing arg 1 of `pmd_offset' from
incompatible pointer type
make[2]: Leaving directory `/tmp/vmware-config5/vmmon-only/driver-2.6.11.2'
make[1]: Leaving directory `/tmp/vmware-config5/vmmon-only'
make: Leaving directory `/tmp/vmware-config5/vmmon-only'
Unable to make a vmmon module that can be loaded in the running kernel:
insmod: error inserting '/tmp/vmware-config5/vmmon.o': -1 Invalid module
format
There is probably a slight difference in the kernel configuration between
the
set of C header files you specified and your running kernel.  You may want
to
rebuild a kernel based on that directory, or specify another directory.

For more information on how to troubleshoot module-related problems, please
visit our Web site at "http://www.vmware.com/download/modules/modules.html"
and
"http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html".

Execution aborted.
----------------------------------------------------------------------------------
V tomto případě je mi divné, že program kompiluje modul s příponou .o, což
je modul pro řadu 2.4.x. Zkoušel jsem modul kompilovat ručně jako .ko a
zavést a on fungoval. Jenže zrovna ten vmware-config je potřeba úspěšně
dokončit, i když mu ten modul sám zkompiluju :(
----------------------------------------------------------------------------------
root na KENNY:/etc# /usr/local/share/lufs/prepmod
+ /sbin/modprobe lufs 2>/dev/null
Preparing LUFS kernel module... Run /usr/local/share/lufs/prepmod if
problems occur.
Running kernel version: 2.6.11.2 (base version 2.6.11.2)
Destination module directory: /lib/modules/2.6.11.2/kernel/fs/lufs
Using kernel sources: /lib/modules/2.6.11.2/build
+ set -e; /bin/mkdir -p `dirname /usr/local/var/lib/lufs/lufs.ko`; /bin/rm
-f /usr/local/var/lib/lufs/lufs.ko; make -C /lib/modules/2.6.11.2/build
SUBDIRS="/usr/local/share/lufs/2.6" modules EXTRA_CFLAGS=""; /bin/mv
-f /usr/local/share/lufs/2.6/lufs.ko /usr/local/var/lib/lufs/lufs.ko; /bin/rm
-f /usr/local/share/lufs/2.6/proc.o /usr/local/share/lufs/2.6/.proc.o.flags /usr/local/share/lufs/2.6/.proc.o.cmd /usr/local/share/lufs/2.6/inode.o /usr/local/share/lufs/2.6/.inode.o.flags /usr/local/share/lufs/2.6/.inode.o.cmd /usr/local/share/lufs/2.6/dir.o /usr/local/share/lufs/2.6/.dir.o.flags /usr/local/share/lufs/2.6/.dir.o.cmd /usr/local/share/lufs/2.6/file.o /usr/local/share/lufs/2.6/.file.o.flags /usr/local/share/lufs/2.6/.file.o.cmd /usr/local/share/lufs/2.6/symlink.o /usr/local/share/lufs/2.6/.s
make: Entering directory `/usr/src/linux-2.6.11.2'
  CC [M]  /usr/local/share/lufs/2.6/dir.o
  CC [M]  /usr/local/share/lufs/2.6/file.o
  CC [M]  /usr/local/share/lufs/2.6/inode.o
  CC [M]  /usr/local/share/lufs/2.6/proc.o
  CC [M]  /usr/local/share/lufs/2.6/symlink.o
  LD [M]  /usr/local/share/lufs/2.6/lufs.o
  Building modules, stage 2.
  MODPOST
*** Warning: "kill_proc_info" [/usr/local/share/lufs/2.6/lufs.ko] undefined!
  CC      /usr/local/share/lufs/2.6/lufs.mod.o
  LD [M]  /usr/local/share/lufs/2.6/lufs.ko
make: Leaving directory `/usr/src/linux-2.6.11.2'
+ /bin/rm -rf /lib/modules/2.6.11.2/kernel/fs/lufs; /bin/mkdir
-p /lib/modules/2.6.11.2/kernel/fs/lufs; /bin/ln
-s /usr/local/var/lib/lufs/lufs.ko /lib/modules/2.6.11.2/kernel/fs/lufs/lufs.ko
+ /sbin/rmmod lufs
2>/dev/null; /sbin/insmod /lib/modules/2.6.11.2/kernel/fs/lufs/lufs.ko
2>/dev/null
Failed to prepare lufs.ko module for your Linux kernel 2.6.11.2.
Detected Linux kernel sources "/lib/modules/2.6.11.2/build" do not appear to
be valid.
Please install kernel-source-x.y.z.i386.rpm or
kernel-headers_x.y.z_i386.deb.
The following directory paths were search (first existing directory used):
                /lib/modules/2.6.11.2/build
                /usr/src/kernel-headers-2.6.11.2
                /usr/src/linux-2.6.11.2
                /usr/src/linux-2.6.11.2
                /usr/src/linux
                /usr/src/kernel-source-2.6.11.2
 at /usr/local/share/lufs/prepmod line 181
---------------------------------------------------------------------------------------
A o tomto už vůbec nevim, co si mám myslet. Možná jsou to jen náhody, ale
silně podezírám include.

Díky za jakýkoliv nápad.

Jakub Kocourek


Další informace o konferenci Linux