我目前正在编写一个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源代码,这个错误就可以解决。
那么,获取驱动程序头文件并在内核模块中使用它们的最佳方法是什么呢?任何帮助都将不胜感激。
发布于 2020-06-23 02:15:22
https://stackoverflow.com/questions/62520386
复制相似问题