Yorik
написал 1 июня 2005 года в 17:06 (885 просмотров)
Ведет себя
как мужчина; открыл 13 тем в форуме, оставил 25 комментариев на сайте.
Привет всем
Недавно увлекся «ядреным» программированием, посему вопрос:
Есть 2 компа под Slackware 10, ядро 2.4.29.
#define MODULE #define __KERNEL__ #include #include int init_module(void) { printk("example.o: loaded\n"); return 0; } void cleanup_module(void) { printk("example.o: unloaded...\n"); } ======================= Makefile: CC=gcc module=example MODFLAGS:= -O3 -Wall -DLINUX $(module).o: $(module).c $(CC) $(MODFLAGS) -c $^ -o $@
На одной машине все работает отлично. Дома на 2-й машине с виду тоже все нормально: компилируется, линкуется, но модуль не загружается:
#insmod example.o
couldn’t find the kernel version the module was compiled for
В принципе можно попробовать, как советовали на linuxquestions:
#define MODULE #define __KERNEL__ #include #if defined(CONFIG_MODVERSIONS) #define MODVERSIONS #include #endif #include int init_module(void) { printk("example.o: loaded\n"); return 0; } void cleanup_module(void) { printk("example.o: unloaded...\n"); }
,но ведь на одной машине все работает…
Почему? Ядра на «нерабочей» машине пробовал менять — без результата.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
http://gazette.linux.ru.net/rus/articles/lkmpg.html
Очень хорошее пособие по ядерному программингу…
Там Хорошо объяснено про несовпадение версий.
разница в том, как скомпилировано само ядро. если посмотреть внимательно опции конфигурирования ядра, то там есть «Module versioning support» (это касательно 2.6.*, в 2.4.* должно быть что-то аналогичное)
в принципе, скорее всего, это не совсем то, что требуется тебе, но — направление где-то в эту сторону.
…Значится попробовал я компилить без поддержки версий (см. 2-й пример). Облом-с. Та же ошибка:
couldn’t find the kernel version the module was compiled for
Полагаю, что-то криво работает в системе. Ядро на обеих машинах одинаковое (см. начало поста), если на одной машине все работает, то и на другой должно. Думал, может проблема в компиляторе(у меня gcc-3.3.4 и gss-3.4.3) — нифига. Тыкал носом в сурсы:
- не помогло. Переустанавливать систему не хочу — хочу разобраться.
Какие будут предположения, господа?
ЗЫ.
Насчет http://gazette.linux.ru.net/rus/articles/lkmpg.html знаю, но интереснее здесь: http://www.kernelnewbies.org/
…один момент: заметил, что такая же ошибка появляется, если пытаться компилировать модуль без первых 2-х строк (#define MODULE и
#define _KERNEL_) на «нормальной» машине
-I — обычно include, может надо тыкнуть носом не в сорцы, а в include в сорцах?
Предлагаю сделать nm для обоих модулей и сравнить