我是一个内核新手,需要一些帮助编译的Linux内核与一个内核模块的输出符号。
我在LKM源代码中尝试了以下- EXPORT_SYMBOL(func_name),LKM编译并在其Module.symvers中生成了符号。但是,当我试图使用内核调用导出的符号来编译内核时,它显示未定义的引用'func_name‘。
我应该如何获得内核编译来查看导出的符号?我在谷歌上看到的MOst示例是模块到模块的导出。
我遗漏了什么?如有任何帮助,我们不胜感激!
编辑:我基本上是想从内核调用一个LKM中的函数。
发布于 2013-10-08 12:09:22
在导出内核符号时,您必须考虑依赖项的顺序。这听起来像是你试图从你的模块中导出一个符号,并期望内核整体能够使用这个导出的符号。但请记住,内核是静态链接的,因此在构建时必须能够解析其所有符号。如果您正在向monolith添加一些代码,该代码试图引用由模块导出的符号,那么它根本不会构建-链接器不知道模块符号,因为模块总是在monolith之后加载。
简而言之,整体可以输出可以由模块引用的符号。此外,模块还可以导出被其他依赖于的模块引用的符号。但相反的方向是不可能的。
听起来您需要在某种程度上重构您的代码,这样您就不必从模块中导出。您是否可以让单体导出一个函数指针,您的模块将在加载时填充该指针?您必须对其进行设置,以便如果模块实际上已加载,则单块将只调用函数指针所指向的函数。
https://stackoverflow.com/questions/19238528
复制相似问题