我目前正在编写一个需要包含来自 linux 驱动程序源代码的文件的 linux 内核模块。我要包含的特定文件是:https ://elixir.bootlin.com/linux/latest/source/drivers/nvme/host/nvme.h
但该/lib/modules/$(shell uname -r)/build
目录不包含该drivers
文件夹。我试过这样做sudo apt-get install linux-headers-$(shell uname -r)
,但这也不包括驱动程序头文件。我的 Makefile 看起来像这样:
obj-m += hello_world.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
然后,我尝试对最接近我的内核版本的内核版本进行完整的内核检查(我找不到我的内核版本的确切源代码。)我指出我的 Makefile 使用该版本,但是当我尝试插入内核模块,它会抛出Invalid module format
错误并dmesg
显示no symbol version for module layout
. 我的源目录确实包含该Module.symvers
文件,但它仍然会引发此错误。我相信如果我以某种方式使用我当前的 linux 源代码,这个错误可以得到解决。
那么,获取驱动程序头文件并在内核模块中使用它们的最佳方法是什么。任何帮助,将不胜感激。