Модули в linux

Тема в разделе "WASM.BEGINNERS", создана пользователем featurelles, 7 июн 2009.

  1. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Пишу не в раздел WASM.UNIX , так как думаю , что получу наискорейший ответ тут.
    Попытался разобраться с модулями в Linux, взял пример с одного сайта в рунете.

    файл называется hello-1.c
    Код (Text):
    1. #include <linux/module.h>  
    2. #include <linux/kernel.h>
    3.  
    4. int init_module(void)
    5. {
    6.         printk("<1>Hello world 1.\n");
    7.         return 0;
    8. }
    9.  
    10. void cleanup_module(void)
    11. {
    12.         printk(KERN_ALERT "Goodbye world 1.\n");
    13. }
    Создал Makefile с таким вот содержимым
    Код (Text):
    1. obj-m += hello-1.o
    в консоли
    uname -r выводит 2.6.22.19-desktop-2mdv
    В /usr/src/linux-2.6.22.19-2mdv Находятся исходники ядра ОС.
    Начинаю компилировать "модуль"
    make -C /usr/src/linux-2.6.22.19-2mdv SUBDIRS=$PWD modules
    ( хотя если по системе компилить то верно сделать так make -C /usr/src/linux-`uname -r` SUBDIRS=$PWD modules ) Но так как у меня есть исходники ядра linux-2.6.22.19-2md и нету 2.6.22.19-desktop-2mdv . Я произвожу сбору первым способом.

    После запуск make в консоли видим следующее.
    после команды ls -l
    [root@localhost driver]# insmod hello-1.ko пробую прилинковать к ядру , а мне пишут...
    insmod: error inserting 'hello-1.ko': -1 Invalid module format
    тоже самое и на: hello-1.mod.o hello-1.ko hello-1.o

    В чём мои действия не верны???
     
  2. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    В каждой distro компилится чуть по-разному. Headers лежат по разным путям и т.д. Забей в google "build kernel module <distro>" или "kernel module tutorial <distro>" и получишь доку по шагам.

    P.S. тебе надо в Makefile сделать аналог #include <вся build система ядра>. Это делается через "make -C ..." т.е. взять Makefile из этого каталога. Ессно, что тебе надо иметь пакеты для своего distro в которых все headers, скрипты и makefiles...

    У меня на Debian 5 вот такой Makefile:

    Код (Text):
    1. obj-m = na0043.o
    2. KVERSION = $(shell uname -r)
    3. KVERSION=2.6.26-1-686
    4. all:
    5.         make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
    6. clean:
    7.         make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
     
  3. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    s0larian
    Огромное спасибо за объяснение!!
    Сейчас буду разбираться...
     
  4. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    s0larian
    Ещё раз спасибо, проблема решена ))

    надо в консоли, сделать вот эти две чудо команды
    urpmi kernel-header
    urpmi kernel-devel

    и всё работает без проблем!!
     
  5. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Угу, пакет devel и headers для ядра.