android - 如何使用 LKM 的导出符号编译内核?

标签 android c compiler-construction linux-kernel kernel-module

我是内核新手,在使用内核模块的导出符号编译 Linux 内核时需要一些帮助。

我尝试了以下 - LKM 源代码中的 EXPORT_SYMBOL(func_name),LKM 编译并在其 Module.symvers 中生成符号。但是,当我尝试使用调用导出符号的内核编译内核时,它说未定义对“func_name”的引用。

我应该如何让内核编译看到导出的符号?我在谷歌上看到的大多数例子都是模块到模块的导出。

我错过了什么?感谢您的帮助!

编辑:我基本上想从内核调用 LKM 中的函数。

最佳答案

导出内核符号时,你必须考虑依赖的顺序。听起来您正在尝试从模块中导出一个符号,并期望内核单体能够使用该导出的符号。但请记住,内核是静态链接的,因此在构建时必须能够解析其所有符号。如果您向单体添加一些代码,试图引用模块导出的符号,那么它根本不会构建——链接器不知道模块符号,因为模块总是在单体之后加载。

简而言之,单体可以导出模块可以引用的符号。模块也可以导出被其他相关 模块引用的符号。但相反的方向是不可能的。

听起来您需要稍微重构一下您的代码,这样您就不必从您的模块中导出了。您是否可以改为让单体导出一个函数指针,您的模块将在加载时填充该函数指针?您必须对其进行设置,以便如果模块实际上已加载,则单体只会调用函数指针指向的函数。

关于android - 如何使用 LKM 的导出符号编译内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238528/

相关文章:

c - 动态内存分配结构

javascript - JS编译器同时编写前端和后端代码

java - 为什么 java 编译器不显示明显除以零的警告?

java - onOptionsItemSelected(MenuItem item) 奇怪的行为

java - VFY : unable to resolve static method 10876: Android

java - 如何实现基于不同条件的集合过滤

python - 如果我不知道如何运行 python 脚本,我是否必须在 python 脚本的顶部添加任何内容

java - 将 HashMap 的 ArrayList 转换为 JSON String

将 int 转换为 char[]

c - 访问链表中的链表变量