#linux #c #драйвер
Не получается создать драйвер в Ubuntu (железный бобёр). Makefile # Makefile – makefile of our first driver # if KERNELRELEASE is defined, we've been invoked from the # kernel build system and can use its language. ifneq (${KERNELRELEASE},) obj-m := ofd.o # Otherwise we were called directly from the command line. # Invoke the kernel build system. else KERNEL_SOURCE := /lib/modules/4.15.0-47-generic/ PWD := $(shell pwd) default: ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules clean: ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean endif ofd.c /* ofd.c - Код нашего первого драйвера */ #include #include #include static int __init ofd_init(void) /* Конструктор */ { printk(KERN_INFO "dimon ^_^ : ofd registered"); return 0; } static void __exit ofd_exit(void) /* Деструктор*/ { printk(KERN_INFO "pumba ;_; : ofd unregistered"); } module_init(ofd_init); module_exit(ofd_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("kaban"); MODULE_DESCRIPTION("Moi perwii draiwer (Our First Driver)"); Получил такой результат Делал всё по статье написание простершего драйвера. не знаю почему несобралося :Р Поправил и добавил ТАБы. # Makefile – makefile of our first driver # if KERNELRELEASE is defined, we've been invoked from the # kernel build system and can use its language. ifneq (${KERNELRELEASE},) obj-m := ofd.o # Otherwise we were called directly from the command line. # Invoke the kernel build system. else KERNEL_SOURCE := /lib/modules/4.15.0-47-generic/ PWD := $(shell pwd) default: ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules clean: ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean endif Вот вывод что мне дал компьютер comp@comp0:~$ make make -C /lib/modules/4.15.0-47-generic/ SUBDIRS=/home/comp modules make[1]: вход в каталог «/lib/modules/4.15.0-47-generic» make[1]: *** Нет правила для сборки цели «modules». Останов. make[1]: выход из каталога «/lib/modules/4.15.0-47-generic» Makefile:13: recipe for target 'default' failed make: *** [default] Error 2 Странно,даёт ошибку, хотя ядро я указал верное. comp@comp0:~$ uname -r 4.15.0-47-generic
Ответы
Ответ 1
в начале строки с рецептом должен стоять символ табуляции. у вас в файле всего две такие строки (обе начинаются с ${MAKE}). проконтролируйте, что в их начале стоит именно символ табуляции, а не пробел. в дополнение: первая из строк, содержащая рецепт, может быть объединена с правилом (см. ссылку выше), через точку с запятой. т.е. вместо: цель: рецепт # здесь в начале строки — символ табуляции можно написать: цель: ; рецепт # здесь только пробелы, которые можно и убрать make -C /lib/modules/4.15.0-47-generic/ SUBDIRS=/home/comp modules make[1]: вход в каталог «/lib/modules/4.15.0-47-generic» make[1]: *** Нет правила для сборки цели «modules». Останов. ну, загляните в каталог, где вы пытаетесь выполнить цель modules: /lib/modules/4.15.0-47-generic/. видите там файл с именем [Mm]akefile или GNUmakefile? думаю, нет. возможно, в этом каталоге есть симлинк с именем build или source (или что-нибудь в этом духе), который указывает на нужный каталог (в котором есть какой-нибудь из перечисленных файлов). вот и попробуйте указать именно этот путь (/lib/modules/4.15.0-47-generic/build/) вместо /lib/modules/4.15.0-47-generic/Ответ 2
Удалите пробелы - используйте вместо них TAB'ы.
Комментариев нет:
Отправить комментарий