LINUX.ORG.RU

Модули ядра

 , , ,


0

1

Здравствуй ЛОР-чик. Решил попробовать себя в написании модулей ядра по книжке: https://tldp.org/LDP/lkmpg/2.4/lkmpg.pdf.
Первый же пример привёл к невозможности скомпилировать модуль выводящий «хеллоу ворлд». Гугл выдал, что нужны linux-headers, но не userspace, а находящиеся в /usr/src/linux-headers/'uname-r'/... У себя таких не обнаружил, хотя стоит и ядро, и пакет headers соответствующей версии.

Ответ на: комментарий от Binkledum

Makefile:

 obj-m := hw.o
 
 default:
   ${MAKE} -C /home/andrey/4TB-2/Kenrel/linux-5.10.8/ SUBDIRS=$(shell pwd) modules
 
 clean:
   ${MAKE} -C /home/andrey/4TB-2/Kenrel/linux-5.10.8/ SUBDIRS=$(shell pwd) clean

hw.c:

 /* hw.c − The simplest kernel module */
 
 /* Kernel Programming */
 #define MODULE
 #define LINUX
 #define __KERNEL__
 
 #include <linux/module.h> /* Needed by all modules       */
 #include <linux/kernel.h> /* Needed for KERN_ALERT       */
 
 int init_module( void )
 {
   printk("<1>Hello world 1.\n");
   // A non 0 return means init_module failed; module can't be loaded.
   return 0;
 }
 
 void cleanup_module( void )
 {
   printk(KERN_ALERT "Goodbye world 1.\n");
 }
 
 MODULE_LICENSE("GPL");
BLIN4IK97
() автор топика
Последнее исправление: BLIN4IK97 (всего исправлений: 1)
Ответ на: комментарий от BLIN4IK97

Мне лень проверять в полпервого ночи. Но сама идея вызова make из makefile выглядит по-идиотски. Судя по твоей картинке объектник он даже не пытается собрать. В ядре довольно специфичный синтаксис мейкфайлов и всякую чушь туда не стоит пихать вслепую.

Binkledum
()
Ответ на: комментарий от Binkledum

Я брал мейкфайл из стандартных примеров с таким же кодом модуля. У всех работает, а лично у меня - нет.

BLIN4IK97
() автор топика
Ответ на: комментарий от BLIN4IK97

Я утром возьму твой модуль и соберу его у себя, если у меня заработает с нормальным мейкфайлом, с тебя минет.

Binkledum
()
Ответ на: комментарий от BLIN4IK97

Тебе проще прописать свой модуль в каком нибудь makefile и Kconfig и собирать в составе ядра, потому что собирать off-tree иногда бывает немного сложновато

Начни с такого варианта, просто прикинься одним из множества драйверов ядра Linux, для этого поправь makefilfe и kconfig в подкаталоге drivers и далее

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от BLIN4IK97

IMHO в hw.c отсутствует пара строк без которых оно не будет модулем.

Если в той доке ничего не сказано про module_init()/module_exit(), то выкини ее.

vel ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Очень интересно, но ничего не понял.

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