URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4611
[ Назад ]

Исходное сообщение
"модуль ядра"

Отправлено гриша , 01-Сен-05 16:12 
решил написать модуль по статье
http://gazette.linux.ru.net/rus/articles/lkmpg.html#HELLOWOR...
взял пример

#include <linux/module.h>      
#include <linux/kernel.h>
#include <linux/init.h>  

static int __init hello_2_init(void)
{
  printk(KERN_ALERT "Hello, world 2\n");
  return 0;
}

static void __exit hello_2_exit(void)
{
printk(KERN_ALERT "Goodbye, world 2\n");
}

module_init(hello_2_init);
module_exit(hello_2_exit);

makefile :
obj-m += src.o

и попробовал собрать
make -C /lib/modules/2.6.9-1.667asp/source  SUBDIRS=$PWD modules

собралось даже без варнингов

make: Entering directory `/lib/modules/2.6.9-1.667asp/build'
  CC [M]  /home/tsolre/work/modules/1/src.o
  Building modules, stage 2.
  MODPOST
  CC      /home/tsolre/work/modules/1/src.mod.o
  LD [M]  /home/tsolre/work/modules/1/src.ko
make: Leaving directory `/lib/modules/2.6.9-1.667asp/build'

так же как и в примере  но вот при вставке модуля
insmod ./src.ko
выдает вот такое
insmod: error inserting './src.ko': -1 Invalid module format
в чем может быть проблема ?


Содержание

Сообщения в этом обсуждении
"модуль ядра"
Отправлено Alex_Borman , 01-Сен-05 18:45 
Вообщета надо указать, при компиляции, что этот код будет выполнятся в ядре и модулем!


Посмотри лучше другую ссылочку
http://www.opennet.me/docs/RUS/lkmpg/

И примерчик от туда:
----------------------hello.c------------------------------
#include <linux/kernel.h>   /* We're doing kernel work */
#include <linux/module.h>   /* Specifically, a module */

#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include <linux/modversions.h>
#endif

int init_module()
{
  printk("Hello, world - this is the kernel speaking\n");
  return 0;
}

void cleanup_module()
{
  printk("Short is the life of a kernel module\n");
}
-----------------------------------------------------------

----------------MakeFile-----------------------------------
CC=gcc
MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX

hello.o:        hello.c /usr/include/linux/version.h
                $(CC) $(MODCFLAGS) -c hello.c
-----------------------------------------------------------


"модуль ядра"
Отправлено Alex , 01-Сен-05 22:58 
Скорее всего проблема в несовпадении версий.
Выполни modinfo. Параметром укажи собраный модуль. Увидишь версию ядра под которую оно собрано.
Теперь смотри версию своего ядра в /proc/version.
Обе версии должны быть идентичны.
Если не совпадает только extraversion (2.6.12.xxx и 2.6.12.yyy), то можно поравить extraversion в Makefile, который лежит в корне исходников ядра.
Потом собери заново. Должно работать.

Есть 2-й способ, не правильный:
выполнить modprobe c параметром --force-vermagic.

Удачи.