Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: kernel-module version mismatch  (Прочитано 11537 раз)
0 Пользователей и 1 Гость смотрят эту тему.
[CrashMaker]
Гость
« : 24-11-2003 12:24 » 

при insmod появляется сообщение

kernel-module version mismatch
  was compled for kernel version 2.4.0.26
  while this kernel is version 2.2.16.22

как скомпилить драйвер под мое ядро? (linux 7.0)

пробовал пример из книги - hello.c - make hello.o тот же результат.

на соседней тачке (linux 6.2) все работает
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 24-11-2003 13:04 » 

[CrashMaker], во-первых не путай ядро (сам Linux) и дистрибутив: "linux 7.0", как я понимаю, это, быстрее всего, Red Hat Linux, как и "linux 6.2".

А теперь по сути: insmod тебе говорит, что модуль собирался для иной версии ядра, чем та что загружена у тебя. Нужно взять исходники и пересобрать модуль под свое ядро.
Частая ошибка: Red Hat, ставит заголовки в /usr/include/linux и /usr/include/asm и, при компиляции, они берутся оттуда. При установке исходников нового ядра, при компиляции, заголовки опять беруться из /usr/include/(asm|linux), а не из нового ядра.
Более правильный подход - использовать набор симлинков (ln -s):
/usr/src/linux -> /usr/src/linux-2.x.xx (нужно следить чтобы линк всегда указывал на нужную версию ядра)
/usr/src/linux/include/asm -> /usr/src/linux/include/asm-xxx (обычно asm-i386)
/usr/include/linux -> /usr/src/linux/include/linux
/usr/include/asm -> /usr/src/linux/include/asm
А то что Red Hat сваливает в каталоги /usr/include/asm и /usr/include/linux нужно предварительно удалить вместе с каталогом.

Только не торопись вносить изменения в систему - проверь что это описаная мной ситуация!

Еще к списку проблемных заголовков (зависящих от ядра) можно добавить /usr/include/net
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
maaaaaad
Гость
« Ответ #2 : 24-11-2003 21:28 » 

пожалуйста, мона поконкретней? что делать то?

Накаких новых ядер я не устанавливал.
файлы kernel.h & module.h валяются в единичном экземпляре в
/usr/src/linux/include/
соответственно вопрос симлинков не стоит...

/usr/src/linux-2.x.xx  у меня нет такого...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 25-11-2003 14:10 » 

Ты тот проблемный драйвер сам собирал, или в скомпеленом виде взял? Возьми исходник и собери. Инструкция по сборке обычно прилогается в файле INSTALL или README.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
maaaaaad
Гость
« Ответ #4 : 27-11-2003 12:58 » 

сам писал. README пока не написал=)
куда смотреть?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 27-11-2003 14:43 » 

:? С этого надо было начинать...

Если ядро ты после установки системы не менял и заголовки от исходников ядра не правил и другие при компиляции не подставлял, то все должно было пройти нормально.
Приведи - какие заголовки подключал, какие специально для ядра макро определял, как компилировал.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
maaaaaad
Гость
« Ответ #6 : 27-11-2003 18:57 » 

воть я недавно переставлял лин, загрузил, глядь, gcc нет (пожадничал места и не поставил, как так вышло - не знаю=))) Отдельно доставил gcc libc и др. лабуду.....все зависимости разрешились (хотя несколько варнинов было)

и началось =)))

у меня тоже впечатление, что хэдеры не те.
я попробую переставить теперь абсолютно все поставлю.....и lynx=)
если это повторится сообщу..

тут месный "гуру" (хехе) тоже долго фишки пялил типа "дай ка я попробую"
нифига

спасибо за помощь.
Записан
maaaaaad
Гость
« Ответ #7 : 29-11-2003 09:00 » 

короче переставил все - результата нет.
поставил mandrake linux 8.2. Аналогичная проблема. Драйверы почему то компилируются не для того ядра, что загруженно.

#define MODULE
#include </usr/include/linux/module.h>
#include <linux/config.h>
int init_module(void) {printk("<1>init\n");return 0;}
void cleanup_module(void) {printk("<1>cleanup\n");}

пробовал
gcc test.c -c
и так
gcc -Wall -I/usr/linux/include -o2 -I.. -c

и из книжки Linux Device Drivers ни один из примеров не вставляется в ядро (пользовался мейком) по тем же причинам
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 29-11-2003 10:57 » 

Я использовал такие заголовки для модуля:
#include <linux/version.h>
#include <linux/module.h>
#include <linux/config.h>
#include <linux/kernel.h>

Сборка:
gcc -Wall -DLINUX -D__KERNEL__ -DMODULE -с test.c

Все это подсмотрел в исходниках ядра и отдельных драйверов.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Anonymous
Гость
« Ответ #9 : 09-12-2003 16:16 » 

У меня то же с начало не выходило.
Здесь эта проблема уже обсуждалась
http://www.opennet.ru/openforum/vsluhforumID9/2164.html
Тут на соседней ветке форума у когото проблема с printk.
Лечится так же.
Вот работающий пример.
Обрати внимание на Makefile.
В файле version.h прописывается версия ядра для которой компилиркется модуль.
 
В результате у меня для моего ASPLinux 7.3 получился следующий рабочий вариант. hello.c:
#include <asm/atomic.h>
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("(C) by  ... Inc, 2003");
MODULE_DESCRIPTION("Hello module.");
int init_module()    { printk("Hello modele instaled.\n");   return (0); }
void cleanup_module(){ printk("Hello module uninstalled.\n"); return;    }
Makefile:
CC=gcc
MODFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux-2.4/include/
hello.o : hello.c /usr/src/linux-2.4/include/linux/version.h
$(CC) $(MODFLAGS) -c hello.c
Записан
maaaaaad
Гость
« Ответ #10 : 10-12-2003 15:09 » new

спасибо ужо все работает =)
спасибо за линку
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines