Возникла задача написать драйвер под Линукс. Т.к. раньше этого не делал, решил написать сначала простейший тестовый драйвер.
Код: Выделить всё
#define MODULE
#define __KERNEL__
#include <linux/module.h>
int init_module()
{
return 0;
}
void cleanup_module()
{
return;
}
Создал Makefile:
Код: Выделить всё
CC=gcc
MODFLAGS:= -O3 -Wall -DLINUX
module.o: module.c
$(CC) $(MODFLAGS) -c module.c
Компилятор не смог найти заголовочный файл, тогда добавил дополнительный путь для обхода:
Код: Выделить всё
CC=gcc
MODFLAGS:= -O3 -Wall -DLINUX -I/lib/modules/2.6.22.18-desktop-1mdv/build/include/
module.o: module.c
$(CC) $(MODFLAGS) -c module.c
Но после этих манипуляций компилятор всё равно выдаёт ошибки:
Код: Выделить всё
[sergey@localhost test_module]$ make
gcc -O3 -Wall -DLINUX -I/lib/modules/2.6.22.18-desktop-1mdv/build/include/ -c module.c
In file included from /lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/thread_info.h:16,
from /lib/modules/2.6.22.18-desktop-1mdv/build/include/linux/thread_info.h:34,
from /lib/modules/2.6.22.18-desktop-1mdv/build/include/linux/preempt.h:9,
from /lib/modules/2.6.22.18-desktop-1mdv/build/include/linux/spinlock.h:49,
from /lib/modules/2.6.22.18-desktop-1mdv/build/include/linux/module.h:9,
from module.c:18:
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/processor.h:83: [b]ошибка: ‘CONFIG_X86_L1_CACHE_SHIFT’ undeclared here (not in a function)[/b]
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/processor.h:83: [b]ошибка: выравнивание не является константой[/b]
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/processor.h: В функции ‘cpuid_count’
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/processor.h:618: предупреждение: pointer targets in passing argument 1 of ‘native_cpuid’ differ in signedness
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/processor.h:618: предупреждение: pointer targets in passing argument 2 of ‘native_cpuid’ differ in signedness
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/processor.h:618: предупреждение: pointer targets in passing argument 3 of ‘native_cpuid’ differ in signedness
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/processor.h:618: предупреждение: pointer targets in passing argument 4 of ‘native_cpuid’ differ in signedness
In file included from /lib/modules/2.6.22.18-desktop-1mdv/build/include/linux/module.h:21,
from module.c:18:
/lib/modules/2.6.22.18-desktop-1mdv/build/include/asm/module.h:64:2: [b]error: #error unknown processor family[/b]
module.c:28:3: warning: no newline at end of file
make: *** [module.o] Ошибка 1
Пробовал через define объявлять в своём Си-шном файле константу CONFIG_X86_L1_CACHE_SHIFT, после этого объектный файл-модуль я получаю, но вставить его через insmod не удаётся:
Код: Выделить всё
[root@localhost test_module]# insmod module.o
insmod: error inserting 'module.o': -1 Invalid module format
Подскажите, пожалуйста, как решить эту проблему. Компилятор gcc 4.2.2, дистр Mandriva 2008.0, ядро 2.6.22.18-desktop-1mdv, проц i686 Intel® Celeron® CPU 2.00GHz