我尝试用一个简单的 makefile 来编译一个简单的内核模块。
KDIR ?= /lib/modules/$(shell uname -r)/build
obj-m := my_module.o
all: modules
modules modules_install clean help:
$(MAKE) -C $(KDIR) M=$(PWD) $@
这是我尝试编译时得到的结果:
root@vm:/home/my_modules# make
make -C /lib/modules/4.10.0+/build M=/home/my_modules modules
make[1]: *** /lib/modules/4.10.0+/build: No such file or directory. Stop.
Makefile:9: recipe for target 'modules' failed
make: *** [modules] Error 2
我在另一篇文章中看到我应该获取 linux 头文件和系统链接。所以我尝试了一下,但没有成功。
root@vm:/home/my_modules# apt install linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-headers-4.10.0
E: Couldn't find any package by regex 'linux-headers-4.10.0'
我正在虚拟机中运行这些。我应该如何获取 Linux 标头才能编译我的模块?
从我的虚拟机外部(我使用的是 nfsroot),我可以看到构建文件夹不为空。从虚拟机的角度来看,它是空的。
johndoe@anywhere:~/workspace/linux$ ls /home/johndoe/rootfs/lib/modules/4.10.0+/build/
arch certs drivers fs init kernel Makefile modules.builtin Module.symvers scripts sound System.map virt vmlinux.o
block crypto firmware include ipc lib mm modules.order net security source usr vmlinux
VM 视角:
root@vm:/home/my_modules# ls /lib/modules/4.10.0+/build
/lib/modules/4.10.0+/build
root@vm:/home/my_modules# du /lib/modules/4.10.0+/build
0 /lib/modules/4.10.0+/build
为什么 ?