Пишу модуль для arm-железки. На ней самой крутится 2.6.25. Скачал исходники кернела соответствующей версии, никаких патчей не накладывал. Проделал make menuconfig; make bzImage, прервал процесс компиляции.
Для примера взят самый простой модуль, типа, Hello World. Makefile для модуля: obj-m += hello.o
KDIR=/home/kiselev/pxa270/linux/linux-2.6.25
make -C $KDIR SUBDIRS=`pwd` modules
make: Entering directory `/home/kiselev/pxa270/linux/linux-2.6.25'
WARNING: Symbol version dump /home/kiselev/pxa270/linux/linux-2.6.25/Module.symvers
is missing; modules will have no dependencies and modversions.
Building modules, stage 2.
MODPOST 1 modules
CC /home/kiselev/dev/gpio/module/hello.mod.o
/home/kiselev/dev/gpio/module/hello.mod.c:8: error: variable '__this_module' has initializer but incomplete type
/home/kiselev/dev/gpio/module/hello.mod.c:9: error: unknown field 'name' specified in initializer
/home/kiselev/dev/gpio/module/hello.mod.c:9: warning: excess elements in struct initializer
/home/kiselev/dev/gpio/module/hello.mod.c:9: warning: (near initialization for '__this_module')
/home/kiselev/dev/gpio/module/hello.mod.c:10: error: unknown field 'init' specified in initializer
/home/kiselev/dev/gpio/module/hello.mod.c:10: warning: excess elements in struct initializer
/home/kiselev/dev/gpio/module/hello.mod.c:10: warning: (near initialization for '__this_module')
/home/kiselev/dev/gpio/module/hello.mod.c:14: error: unknown field 'arch' specified in initializer
/home/kiselev/dev/gpio/module/hello.mod.c:14: error: 'MODULE_ARCH_INIT' undeclared here (not in a function)
/home/kiselev/dev/gpio/module/hello.mod.c:14: warning: excess elements in struct initializer
/home/kiselev/dev/gpio/module/hello.mod.c:14: warning: (near initialization for '__this_module')
make[1]: *** [/home/kiselev/dev/gpio/module/hello.mod.o] Error 1
make: *** [modules] Error 2
make: Leaving directory `/home/kiselev/pxa270/linux/linux-2.6.25'
Сам сижу на 2.6.32 (ARCH). Если проделываю тоже самое, используя ванильное 2.6.32, то всё нормально собирается (и подгружается):
make: Entering directory `/home/kiselev/linux/linux-2.6.32'
WARNING: Symbol version dump /home/kiselev/linux/linux-2.6.32/Module.symvers
is missing; modules will have no dependencies and modversions.
CC [M] /home/kiselev/dev/gpio/module/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/kiselev/dev/gpio/module/hello.mod.o
LD [M] /home/kiselev/dev/gpio/module/hello.ko
make: Leaving directory `/home/kiselev/linux/linux-2.6.32'