2015-09-03 4 views
0

Я пытаюсь скомпилировать простой модуль ядра. У меня есть полностью скомпилированное ядро, и uname -r действительно подтверждает, что я запускаю ядро, которое я скомпилировал.Проблема с компиляцией простого модуля ядра

У меня есть небольшой Makefile, который делает работу следующим образом:

obj-m := exo1_simple_module.o 
all: 
     make -C /lib/modules/$(uname -r)/build M=$(PWD) modules 
clean: 
     make -C /lib/modules/$(uname -r)/build M=$(PWD) clean 

С файл называется exo1_simple_module.c и он находится в директории /home/tom/work/kernel_modules

Когда я бегу сделать я получаю ошибку :

No rule to make target '/home/tome/work/kernel_modules/ex01_simple_module.c needed by /home/tom/work/kernel_modules/exo1_simple_module.o

Как-то я думаю, что есть опция switch или command, которую я должен указывать gcc, что есть отсутствует.

+0

вы не составителя в любом месте в пределах Makefile (вы не ссылаетесь на то, как заставить '.c' превращаться в' .o'), и у вас нет раздела 'modules' в вашем файле makefile, чтобы он не сработал. – KevinDTimm

+0

PS Я бы отредактировал ваше сообщение, чтобы сделать его более разборчивым, но кто-то его отредактировал, и поэтому другие изменения не разрешены до тех пор, пока его изменения не будут одобрены/отклонены. – KevinDTimm

+0

Благодарим вас за ответ. Я видел другие Makefiles для модулей ядра, и не было ссылки на то, как получить .c, чтобы превратиться в .o. OBJ-M + = hello.o всего: делают -C/Библиотека/модули/$ (uname -r оболочки)/строить/М = $ (PWD) модули чистые: делают -C/Библиотека/модули/$ (shell uname -r)/build/M = $ (PWD) clean –

ответ

0

Почему вы

obj-m := exo1_simple_module.o 

когда примеры показывают

obj-m += exo1_simple_module.o 

я тоже заметил, что вы удалили shell до uname -r

+0

Привет, Ни одно из вышеизложенных не было. Я просто помещаю полные пути в Makefile (рендеринг «shell» не нужен), и я получил тот же результат. –

Смежные вопросы