LINUX.ORG.RU

Не компилится модуль


0

0

Пишу модуль для 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'

Ответ на: комментарий от Pavval

Для чистоты эксперимента пробую пока скомпилить родным toolchain-ом (gcc). hello.c :

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static int __init hello(void)
{
      printk(KERN_ALERT "Hello World!\n");

        return 0;
}

static void __exit goodbye(void)
{
      printk(KERN_ALERT "Goodbye!\n");
}


module_init(hello);
module_exit(goodbye)

Makefile: obj-m += hello.o

markevichus ★★★
() автор топика

YEAH! В .config у 2.6.25 не был отмечен Enable loadable module support.

markevichus ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.