设备驱动程序Hello world的make文件出错

Ayu*_*shi 1 c linux makefile linux-device-driver linux-kernel

我有简单的代码与设备驱动程序hello world with make file.it在12.04 LTS的情况下执行得很好但最近我将我的ubuntu升级到14.04之后,相同的程序无法编译.有错误消息

make

make -C /lib/modules/3.13.0-45-generic/build M= modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-45-generic'
make[2]: *** No rule to make target `/usr/src/linux-headers-3.13.0-45-generic/arch/x86/syscalls/syscall_32.tbl', needed by `arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h'.  Stop.
make[1]: *** [archheaders] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-45-generic'
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

提前致谢......

Dil*_*mar 5

你的make文件不适用于其他版本的内核,因为内核库模块将在/ lib/modules/kernelversion/build中.

所以你应该使用make -C/lib/modules /"应该是当前运行的内核"/ build

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)

这将使用"shell uname -r"自动加载当前运行的内核版本.

示例makefile

KERNELDIR := /lib/modules/$(shell uname -r)/build
CLEANFILE := *.dis *.o *.ko *.mod.* *.symvers *.*.old
obj-m := hello.o

    default:
            make -C $(KERNELDIR)  M=$(CURDIR) modules

    clean:
            rm -f $(CLEANFILE) 
Run Code Online (Sandbox Code Playgroud)

  • [请参阅我的评论,反对使用`PWD`和使用`CURDIR`](http://stackoverflow.com/questions/28353795/error-in-make-file-for-device-driver-hello-world#comment45069708_28354020) . (2认同)