Пишу драйвер под 2.6 (-1 Invalid module format)

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

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

Ответить
Аватара пользователя
Zeus
Сообщения: 694

Пишу драйвер под 2.6

Сообщение Zeus »

Делаю как рассказано здесь: http://www.linuxshare.ru/docs/linux/driver...2_ch2.html#t2_3

Компилируется всё, генерятся какие-то "посторонние" файлы, ну и сам модуль iso.ko
Скармливаю его modprob'у - он говорит, что модуль не найден :unsure:
insmod говорит Invalid module format

В чём может быть дело?
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Пишу драйвер под 2.6

Сообщение elide »

в логах посмотри. скорее всего vermagic кривой.
слава роботам!
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Пишу драйвер под 2.6

Сообщение Uncle_Theodore »

Zeus писал(а):
26.04.2007 20:15
Делаю как рассказано здесь: http://www.linuxshare.ru/docs/linux/driver...2_ch2.html#t2_3

Компилируется всё, генерятся какие-то "посторонние" файлы, ну и сам модуль iso.ko
Скармливаю его modprob'у - он говорит, что модуль не найден :unsure:
insmod говорит Invalid module format

В чём может быть дело?

А ядро какое? 2.6?
Я делал по вот этой книге
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html
пару лет назад со студнями. Сейчас проверил, вот этот пример оттуда (слегка видоизмененный)

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

/*
 *  hello-1.c - The simplest kernel module.
 */
#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_ALERT */

int init_module(void)
{
        printk("<1>Hello world 1.\n");

        /*
         * A non 0 return means init_module failed; module can't be loaded.
         */
        return 0;
}

void cleanup_module(void)
{
        printk(KERN_ALERT "Goodbye world 1.\n");
}


компилится и прекрасно вставляется командой insmod (modprobe тебе не подойдет, она ищет модули только в определенных директориях) в ядро

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

 uname -a
Linux laptop 2.6.20.3-mine #2 PREEMPT Fri Mar 23 19:02:22 EDT 2007 i686 pentium4 i386 GNU/Linux


И еще, ссылки на исходники ядра (/usr/src/linux) правильно указаны?
Спасибо сказали:
Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux
Контактная информация:

Re: Пишу драйвер под 2.6

Сообщение polachok »

Я делал по вот этой книге
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

ням-ням! спасибо дядя Фёдор, надеюсь теперь разработка моего драйвера факториала пойдет быстрее (:
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Пишу драйвер под 2.6

Сообщение Zeus »

Добрался опять до своего драйвера.

Итак, /var/log/messages:
Apr 27 11:09:59 zeus kernel: iso813: disagrees about version of symbol struct_module

Далее, у меня чехарда с ядрами:
uname -r показывает: 2.6.15-1.2054_FC5
(это Fedora Core 5).

А /lib/modules/2.6.15-1.2054_FC5/build (символическая ссылка в /usr/src/kernels/2.6.15-1.2054_FC5-i686) указывает "в пустоту".
У меня нет исходников именно моего ядра, под которым я работаю.

Производители дров (уже с несколькими сталкивался) пишут, что они не делают дрова для Red Hat'овских ядер, т.к. Red Hat'овцы их сильно перелопачивают по сравнению с оригинальными. Качайте, мол, ядра с kernel.org.
У меня есть ядро оттуда и его исходники лежат в /usr/src/kernels, но непосредственно при компиляции я сижу под Fedor'ским ядром.

Мне, получается, нужно скомпилировать ядро с kernel.org загрузиться под ним и под ним же компилировать драйвер?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Пишу драйвер под 2.6

Сообщение Uncle_Theodore »

Zeus писал(а):
27.04.2007 11:19
Мне, получается, нужно скомпилировать ядро с kernel.org загрузиться под ним и под ним же компилировать драйвер?

Ну, так, конечно, тоже можно, но лучше, наверное, все-таки найти исходники того ядра, которое у Вас бегает и установить их. Мало ли для чего это еще может понадобиться...
Спасибо сказали:
Flagman
Сообщения: 9

Re: Пишу драйвер под 2.6

Сообщение Flagman »

Я сижу на ядре 2.6.хх и пишу модуль для ядра 2.4.хх и ничего в этом плохого нет. Должны быть исходники того ядра под которое ты пишешь модуль и этого достаточно т.к. ядро не имеет права использовать другие библиотеки (функции) кроме своих встроенных.
Если хочешь использовать исходники от РедХата то поставь их, они там одни, просто надо положить к исходника файл конфигурирования ядра (может лежать в папке /boot и иметь название как у твоего ядра).
Главное чтобы была ссылка на исходники ядра (или чтобы они там лежали) с которыми ты работаешь в /usr/src/linux

Zeus писал(а):
27.04.2007 11:19
Добрался опять до своего драйвера.

Итак, /var/log/messages:
Apr 27 11:09:59 zeus kernel: iso813: disagrees about version of symbol struct_module

Далее, у меня чехарда с ядрами:
uname -r показывает: 2.6.15-1.2054_FC5
(это Fedora Core 5).

А /lib/modules/2.6.15-1.2054_FC5/build (символическая ссылка в /usr/src/kernels/2.6.15-1.2054_FC5-i686) указывает "в пустоту".
У меня нет исходников именно моего ядра, под которым я работаю.

Производители дров (уже с несколькими сталкивался) пишут, что они не делают дрова для Red Hat'овских ядер, т.к. Red Hat'овцы их сильно перелопачивают по сравнению с оригинальными. Качайте, мол, ядра с kernel.org.
У меня есть ядро оттуда и его исходники лежат в /usr/src/kernels, но непосредственно при компиляции я сижу под Fedor'ским ядром.

Мне, получается, нужно скомпилировать ядро с kernel.org загрузиться под ним и под ним же компилировать драйвер?
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Пишу драйвер под 2.6

Сообщение Zeus »

Всем спасибо: заработало.

Нашёл в дистрибутиве на DVD devel-пакет для моего ядра.
А на 5хCD - не было.

Теперь разбираюсь, почему printk выводит всё в /var/log/messages
Поиграл с уровнями протоколирования, позадавал всякие значения в /proc/sys/kernel/printk - не помогает.
Ладно, завтра продолжу.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Пишу драйвер под 2.6

Сообщение elide »

printk выводит всё в /var/log/messages
а куда должен?
слава роботам!
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Пишу драйвер под 2.6

Сообщение Zeus »

elide писал(а):
27.04.2007 23:42
а куда должен?

Вот тут:
http://www.linuxshare.ru/docs/linux/driver...2_ch4.html#t1_1
написано, что можно "поиграть" уровнями "логгирования" и тогда возможен вывод и в консоль.
Я только начал играть и поэтому ещё не победил.
Спасибо сказали:
Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux
Контактная информация:

Re: Пишу драйвер под 2.6

Сообщение polachok »

пообщайся с syslog'ом.
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Пишу драйвер под 2.6

Сообщение Zeus »

printk ("<0>...") выводит в консоль.
Пока забил - некогда возиться, надо дальше разбираться:
таймер в 3-5кГц реально получить?
Спасибо сказали:
Ответить