我有一个 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/