linux 内核源代码可以使用驱动程序中的函数吗?

标签 c linux linux-kernel driver

我有一个 linux 内核源代码需要使用的可加载模块(驱动程序)函数。

函数已经被 EXPORT_SYMBOL_GPL() 打开。

linux内核源码是linux-3.16.1/mm中的c文件之一。

但是,我在c 文件中添加了extern 函数 并重新编译了整个Linux 内核源代码。

错误消息打印undefined reference to fun

我认为错误发生在链接时

它无法从驱动程序中找到函数引用。

我该如何解决这个问题?

最佳答案

I have a loadable module(driver) function that linux kernel source need to use.

是的。这个有可能。但不是您正在寻找的直截了当的方式。 大多数驱动程序的工作方式与可加载内核模块 (LKM) 相同。

考虑一个示例 GPIO 驱动程序 (CONFIG_ATH79)。

在下面的链接中,我们可以看到函数被分配给一个函数指针结构。
http://lxr.free-electrons.com/source/drivers/gpio/gpio-ath79.c#L124

结构在这里定义
http://lxr.free-electrons.com/source/include/linux/gpio/driver.h#L90

类似的方法,可以做到。在相应的头文件中声明一个应该包含在LKM中的结构。

从 LKM 填充该结构并在 linux-3.16.1/mm/fileX.c 上使用它

关于linux 内核源代码可以使用驱动程序中的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316920/

相关文章:

c - 为什么我的阵列没有被正确清空?

php - curl 命令返回 http/1.1 406 Not Acceptable 错误

linux - 一些内核ARM代码

c - 同时执行 2 个不同的函数,pthread 是我的答案吗?

C 段错误

linux - 如何在不重启 Linux 服务器的情况下在 shell 脚本中重新加载环境变量

linux - Buildroot Linux 的内核 panic

基于 Linux 构建的 Android 内核

linux - 实时Linux - 主线CPU屏蔽或PREEMPT_RT补丁集?

c - C语言中lseek系统调用成功