Пишу не в раздел WASM.UNIX , так как думаю , что получу наискорейший ответ тут. Попытался разобраться с модулями в Linux, взял пример с одного сайта в рунете. файл называется hello-1.c Код (Text): #include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk("<1>Hello world 1.\n"); return 0; } void cleanup_module(void) { printk(KERN_ALERT "Goodbye world 1.\n"); } Создал Makefile с таким вот содержимым Код (Text): 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 В чём мои действия не верны???
В каждой 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): obj-m = na0043.o KVERSION = $(shell uname -r) KVERSION=2.6.26-1-686 all: make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules clean: make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
s0larian Ещё раз спасибо, проблема решена )) надо в консоли, сделать вот эти две чудо команды urpmi kernel-header urpmi kernel-devel и всё работает без проблем!!