2013-10-13 3 views
2

я написал простой модуль Линукса & его делает файлмарки: неты правил, чтобы сделать целевую

это мой модуль

#include <linux/init.h> 
    #include <linux/module.h> 
    #include <linux/kernel.h> 

MODULE_LICENSE("Dual BSD/GPL"); 

static int hello_init(void) { 
    printk("<1> Hello world!\n"); 
    return 0; 
} 

static void hello_exit(void) { 
    printk("<1> Bye, cruel world\n"); 
} 

module_init(hello_init); 
module_exit(hello_exit); 

это мой макияж файл

obj-m :=Hello.o 


KDIR = /usr/src/linux-headers-3.5.0-17 

all: 
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 

clean: 
    rm -rf *.o *.ko *.mod.* *.symvers *.order 

, когда я выполнить make -f MakeFile дает следующие o/p

make -C /usr/src/linux-headers-3.5.0-17 SUBDIRS=/home/linux/Desktop modules 
make[1]: Entering directory `/usr/src/linux-headers-3.5.0-17' 

    WARNING: Symbol version dump /usr/src/linux-headers-3.5.0-17/Module.symvers 
      is missing; modules will have no dependencies and modversions. 

scripts/Makefile.build:44: /home/linux/Desktop/Makefile: No such file or directory 
make[2]: *** No rule to make target `/home/linux/Desktop/Makefile'. Stop. 
make[1]: *** [_module_/home/linux/Desktop] Error 2 
make[1]: Leaving directory `/usr/src/linux-headers-3.5.0-17' 
make: *** [all] Error 2 

Может ли кто-нибудь сказать мне, как избавиться от этих ошибок. Заранее спасибо

+0

Почему это необходимо установить 'SUBDIR' в' $ pwd'? У вас есть файл '/ home/linux/Desktop/Makefile'? По моему опыту нет необходимости устанавливать 'SUBDIR'. Вы можете попробовать удалить 'SUBDIR' в' all: 'и переделать его. – starrify

+0

спасибо за повтор после удаления subdir this error apper make [1]: *** Никаких заданных целей и никакого файла makefile не найдено. Стоп. –

+0

Извините за мой неосторожный ответ. Я полагаю, что вам нужно будет восстановить 'SUBDIR' и переименовать ваш MakeFile в' Makefile' и повторить попытку, так как в нем отсутствует файл 'Makefile' и' * nix' чувствителен к регистру. – starrify

ответ

2

сделать ниже изменения в вашем Makefile

Первый чек, который ядро ​​работает, набрав uname -a

Затем перейдите на CD/USR/SRC/

затем проверить ваши Linux исходный код имя

для например

uname -a Linux Вини-VirtualBox 3.2.0-50-родовой-пае # 76-Ubuntu SMP Вт июл 9 19:24:55 UTC 2013 i686 i686 i386 GNU/Linux

здесь его исходное имя - linux-headers-3.2.0-50-generic-pae То же самое в вашем случае например

Linux-Headers-3.2.0-23 Linux-Headers-3.2.0-23-родовой-PAE поэтому используйте linux-headers-3.2.0-23-generic-pae вместо Linux-Headers-3.2.0-23 т.е. заменить же в вашем Makefile

т.е. KDIR =/USR/SRC/Linux-Headers-3.5.0-17-родовой-PAE

или в Orde г, чтобы избежать выше проблемы использования
KDIR == /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd) 
KDIR == /lib/modules/$(shell uname -r)/build 

$(MAKE) -C $(KDIR) M=$(PWD) modules 
+0

Nope dude, '$ PWD' - это переменная среды в оболочке, содержимое которой точно совпадает с результатом' pwd'. – starrify

+0

также убедитесь, что ваше имя Makefile верное, поскольку starrify говорит, что –

+1

также ссылается на то же здесь http://stackoverflow.com/questions/19223653/linux-makefile-example/19224677#19224677 –

0
obj-m += xyz.o 

KDIR:=/usr/src/linux-headers-3.5.0-46-generic 

all: 

     make -C $(KDIR) M=$(PWD) modules 

clean: 

     make -C $(KDIR) M=$(PWD) clean 

Вы уверены, что /usr/src/ содержит Linux-Headers-3.5.0-46-общие файлы? , если это не так, то загрузка:

sudo apt-get install linux-headers-3.5.0-46 

sudo apt-get install linux-headers-3.5.0-46-generic 
Смежные вопросы