8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

加载内核模块时出现未知符号

BenjiBoy 2月前

45 0

我尝试重做此主题中找到的内核模块代码如何在 Linux 内核模块中获取电池电量?。但是当我尝试使用 power_supply.h 中包含的函数时...

如何在 Linux 内核模块中获取电池电量?中 找到的内核模块代码 。但是,当我尝试使用 power_supply.h 头文件中包含的函数时,模块加载失败,因为它无法识别 power_supply_get_by_name 函数。

这是我在内核版本为 4.15.0-101-generic 的 Ubuntu 18.04 上使用的代码:

#include <linux/module.h>
#include <linux/power_supply.h>

static int __init test_init (void)
{
        struct power_supply *psy;
        char name[] = "BAT1";

        psy = power_supply_get_by_name(name);

        printk(KERN_DEBUG "Test module inserted");

        return 0;
}

static void __exit test_exit (void)
{
        printk(KERN_DEBUG "Test module removed");
}

module_init (test_init);
module_exit (test_exit);

除了有关模块许可证的警告外,我在编译时没有遇到任何错误,我认为这与我的问题无关,但我收到以下错误:

  1. 在终端运行 insmod 时:\'insmod:错误:无法插入模块 test.ko:模块中未知符号\'
  2. 在 /var/log/kern.log 文件中:\'test: 未知符号 power_supply_get_by_name (err 0)\'

我检查了 kallsyms proc 文件,如果我理解了这个主题,该函数被指示可在其他内核模块中使用 /proc/kallsyms 中的 T 和 t 有什么区别 。以下是读取 kallsyms 文件的输出:

ffffffff8e9bd270 T power_supply_get_by_name

有谁知道为什么这不起作用,而我可以毫无问题地使用其他 Linux 标头函数,如果可以,我该如何解决我的问题?

提前致谢

帖子版权声明 1、本帖标题:加载内核模块时出现未知符号
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由BenjiBoy在本站《linux》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我今天早上尝试了您的解决方案,效果非常好!我以前从来没想过这一点……感谢您快速而准确的回答!

返回
作者最近主题: