Итак, я попытался следовать простым примерам для загрузки драйвера устройства «Hello World», описанного в руководстве по драйверам устройств O'Rielly Linux. Проблема в том, что по какой-то причине он не будет работать, если я не укажу явно путь к моим заголовочным файлам в операторах включения; то есть я должен набрать #include </usr/src/kernels/3.19.8-100.fc20.i686+PAE/include/linux/init.h>
вместо #include </linux/init.h>
вот мой make-файл
obj-m := hello.o
KDIR =/usr/src/kernels/3.19.8-100.fc20.i686+PAE/include
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
и возвращает ошибку «не удается найти» во всех заголовочных файлах, если явно не определено как #include </usr/src/kernels/3.19.8-100.fc20.i686+PAE/include/linux/init.h>
, что я бы предпочел не делать.
Спасибо за вашу помощь.
В случае, если это кому-нибудь поможет, если я оставлю в явном выражении include и затем скомпилирую, файл hello.mod.c, который будет получен, выглядит следующим образом.
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
MODULE_INFO(vermagic, VERMAGIC_STRING);
__visible struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";
Это нормально загружается с помощью insmod.