首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在用C编写的内核模块中包含linux驱动程序源文件?

问如何在用C编写的内核模块中包含linux驱动程序源文件?
EN

Stack Overflow用户
提问于 2020-06-23 01:41:26
回答 1查看 513关注 0票数 0

我目前正在编写一个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看起来像这样:

代码语言:javascript
复制
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源代码,这个错误就可以解决。

那么,获取驱动程序头文件并在内核模块中使用它们的最佳方法是什么呢?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-06-23 02:15:22

我看到你在用apt。在这种情况下,您可以为您的内核获取正确的源代码,只需启用源代码库(请参阅here或here了解如何操作),然后获取包的源代码:

代码语言:javascript
复制
$ sudo apt-get update
$ sudo apt-get source linux-image-$(uname -r)

在此之后,您将在当前目录中拥有以下文件:

代码语言:javascript
复制
linux-XXX/
linux_XXX.tar.xz
linux_XXX.dsc
linux_XXX.orig.tar.xz

第一个是一个文件夹,其中包含您安装的内核的正确源代码。然后,您将能够#include模块所需的标头。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62520386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档