Проблема с созданием драйвера

Взгляд изнутри

Модератор: Модераторы разделов

Ответить
necrotigr
Сообщения: 37
ОС: ArchLinux - i686

Проблема с созданием драйвера

Сообщение necrotigr »

Люди добрые, помогите, пожалуйста, решить проблему.
Возникла задача написать драйвер под Линукс. Т.к. раньше этого не делал, решил написать сначала простейший тестовый драйвер.

Код: Выделить всё

#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
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Проблема с созданием драйвера

Сообщение serzh-z »

Стоит ознакомиться с системой сборки ядра - Kbuild. Всё намного проще. :)
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Проблема с созданием драйвера

Сообщение Uncle_Theodore »

Читать тут.
http://lwn.net/Kernel/LDD3/
Велосипед не изобретать. :)
Спасибо сказали:
necrotigr
Сообщения: 37
ОС: ArchLinux - i686

Re: Проблема с созданием драйвера

Сообщение necrotigr »

Спасибо, попробую. Однако всё равно странно: в примерах по созданию драйверов, которые я нашёл, привлекать сторонние продукты не требовалось...
И мне всегда казалось, что для разработки в Линукс достаточно текстового редактора + компилятора :)
Спасибо сказали:
Аватара пользователя
entry
Сообщения: 108
ОС: открытая и свободная

Re: Проблема с созданием драйвера

Сообщение entry »

Uncle_Theodore писал(а):
25.02.2008 16:24
Читать тут.
http://lwn.net/Kernel/LDD3/
Велосипед не изобретать. :)

А на русском такой вкуснятинки нету?
FreaxNet «Shut up and hack!»
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Проблема с созданием драйвера

Сообщение Voice »

entry писал(а):
25.02.2008 16:44
Uncle_Theodore писал(а):
25.02.2008 16:24
Читать тут.
http://lwn.net/Kernel/LDD3/
Велосипед не изобретать. :)

А на русском такой вкуснятинки нету?

В сети есть перевод 2-й редакции. Поищите, а то у меня на винте лежит, а откуда брал не помню.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
entry
Сообщения: 108
ОС: открытая и свободная

Re: Проблема с созданием драйвера

Сообщение entry »

Voice писал(а):
25.02.2008 16:50
В сети есть перевод 2-й редакции. Поищите, а то у меня на винте лежит, а откуда брал не помню.

Когда я искал, было только 2 главы на русском (писал переводчику и спрашивал). Может сейчас уже и вся книга переведина. Будем искать... :)
FreaxNet «Shut up and hack!»
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Проблема с созданием драйвера

Сообщение serzh-z »

entry писал(а):
25.02.2008 16:56
Может сейчас уже и вся книга переведина
Видимо это был LDD2: http://rus-linux.net/MyLDP/BOOKS/ldd2/index.html, LDD3 на русском нет.

Кстати, образы LDDK здесь - http://www.kernel.org/pub/linux/kernel/people/gregkh/ddk/
Спасибо сказали:
Аватара пользователя
wzrd
Сообщения: 323
ОС: Debian Lenny

Re: Проблема с созданием драйвера

Сообщение wzrd »

serzh-z писал(а):
25.02.2008 17:04
LDD3 на русском нет.

да и LDD2 тоже полного нет...
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Проблема с созданием драйвера

Сообщение Voice »

Да, тут не все, но почти :)
Linux_Device_Driver_2_nd_edition_RU.tar.gz
(1.07 МБ) 155 скачиваний
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
necrotigr
Сообщения: 37
ОС: ArchLinux - i686

Re: Проблема с созданием драйвера

Сообщение necrotigr »

Круто, получилось!!!
Спасибо за наводку по kbuild! Полезная ссылка: http://www.linuxcenter.ru/lib/books/lkmpg.phtml
Спасибо сказали:
Ответить