LINUX.ORG.RU

«kernel modules» help !!!!!


0

0

Доброе время суток,у меня вот какая проблема : сейчас читаю книгу "Linux device drivers" авторы Алессандро Рубини и Джонатан Корбет. И на первом же примере - "приплыл". Ниже код первого примера модуля ядра:

//hello.c

#define MODULE #include < linux/module.h >

int init_module(void) { printk("<1>Hello, world\n"); return 0; } void cleanup_module(vpid) { printk("<1>Gudbye world\n"); } //end

компилирую: # gcc -c hello.c

и получаю следующие ошибки: /usr/include/linux/module.h :60:parse error before'atomic_t' /usr/include/linux/module.h :62:parse error before '}' /usr/include/linux/module.h :91:parse error before '}'

и еще три "warning".

Пожалуйста ,посоветуйте ,как это правильно скомпилить, если я допускаю где-то ошибку. Или может быть в module.h или в книге есть опечатка ? Какие у вас будут соображения ?

ps. Может быть найдется продвинутый человек ,с которым можно будет посоветываться , то пишите evganyb@bezeqint.net спасибо за помощь Evgeny.

anonymous

Вообще-то компилировать надо так: gcc -D__KERNEL__ -c hello.c
На 23 cтранице этой книги это хорошо видно.

anonymous
()

Спасибо за помощь, но повторяются все те же ошибки :-(( Я уже окончателно запутался и расстроился. Если у кого то это получилось, пожалуйста, объясните от "А" до "Я" тогда я пойму где я ошибаюсь или что то не доделываю. А то я уже думаю, что я совсем криворукий .

anonymous
()

Ну не тот он у тебя хедер цепляет. Чтобы цеплял правильный gcc -I/usr/src/linux/include -c hello.c

anonymous
()

-O2 обязательно

idle ★★★★★
()

Спасибо всем за помощь ,все получилось, только я не знаю на сколько "insmod ./hello" сработало правильно ? Так как после "insmod ./hello" в терминале вместо "Hello world" появилось :

# insmod ./hello

Warning: loading ./hello will taint the kernel: no licese

потом я делаю "rmmod hello" . Что то я не заметил что выводится в терминале текст из модуля,может текст выводится в какой то файл ? У кого какие соображения ? Еще раз всем спасибо?

anonymous
()

К предыдущему licese = license :-)

Evgeny.

anonymous
()

дык выводится в syslog... /var/log/messages или куда там у тебя.

anonymous
()

Все разобрался, ВСЕХ благадарю ,могу теперь идти далше. ps: По команде "ksyms" можно увидеть ,что модуль в ядре. А сообщение появляется если в printk("<*>....."); вместо "*" поставить ноль.

Evgeny.

anonymous
()

Я тебе посоветую сначала почитать статью Ори Померанца "Linux kernel modules" из LDP, там всё понятно именно про модули...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.