linux - 如何在用 C 编写的内核模块中包含 linux 驱动程序源文件?
问题描述
我目前正在编写一个需要包含来自 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 源代码,这个错误可以得到解决。
那么,获取驱动程序头文件并在内核模块中使用它们的最佳方法是什么。任何帮助,将不胜感激。
解决方案
推荐阅读
- pyspark - 带有列表列表的数据框如何将每一行作为列展开 - pyspark
- spring-boot - 无法将服务部署到无路由的 PCF
- java - Java 流在列表中查找匹配项
- javascript - 如何使用chart.js在水平条中设置标签左对齐?
- bash - 循环从文件中查找应用程序并使用 adb shell 将其拉取
- javascript - React Native + AWS AppSync - 最大数据存储
- node.js - squalize 模型的实例是否有更新方法?
- r - lubridate 中日期间隔的平均值
- r - 用 R 中的分组均值替换 NA?
- javascript - Angular 6:作为参数的子路由在进入参数链接时不会更新