从内核模块使用sysfs时出现未知的符号错误【JAVA教程】

!
也想出现在这里? 联系我们
信息

从内核模块使用sysfs时出现未知的符号错误,第1张

概述从内核模块使用sysfs时出现未知的符号错误

嘿,我试图用sysfs稍微玩一下,从用户空间获取一些数据到我的内核模块。 这里是代码:

#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/elf.h> #include <linux/fs.h> #include <linux/slab.h> #include <linux/kobject.h> #include <linux/sysfs.h> #define PRINT(x) printk(KERN_INFO x \”n\”) #define ERROR(fmt,arg…) printk(KERN_ALERT \”Error – \” fmt,##arg) ssize_t mystore (struct kobject *obj,struct attribute *attr,const char *buff,size_t count) { /* doing a little bit */ return count; } ssize_t myshow (struct kobject *obj,char *buff) { return 0; } char file_name[] = \”myfile\”; static struct attribute myattribute = { .name = file_name,.mode = S_IRUSR | S_IWUSR }; static struct sysfs_ops mysysfs_ops = { .show = myshow,.store = mystore }; static struct kobj_type mykobj_type = { .sysfs_ops = &mysysfs_ops,}; static struct kobject mykobject = { .name = \”mykobject\”,.ktype = &mykobj_type }; static int __init start(voID) { int tmp; PRINT(\”Initializing modulen\”); if (kobject_init_and_add(&mykobject,&mykobj_type,NulL,\”mykobj\”) != 0) { ERROR (\”Digsig key Failed to register properlyn\”); return -1; } if ((tmp = sysfs_create_file(&mykobject,&myattribute)) != 0) { ERROR (\”Create file Failedn\”); return -1; } PRINT(\”INIT CORRECT\”); return 0; } static voID __exit close(voID) { PRINT(\”Deinitializing modulen\”); sysfs_remove_file(&mykobject,&myattribute); kobject_del(&mykobject); } module_init(start); module_exit(close);

当我编译我的模块,一切正常,但是当我尝试运行它时,我得到一个insmod:错误插入\’mytester.ko\’:-1模块中的未知符号

使用dmesg我得到更多的细节:

[18335.892462] mytester: UnkNown symbol sysfs_remove_file (err 0) [18335.892462] mytester: UnkNown symbol sysfs_create_file (err 0) [18335.892646] mytester: UnkNown symbol kobject_init_and_add (err 0)

这就是要点。 我不明白这个消息,因为包括kobject.h和sysfs.h。 所以我不能真正理解这里发生了什么。 即使我把我的整个函数mystore注释为一个简单的返回(如图所示),错误也是一样的。 所以错误不在别处….

写入linux设备驱动程序导致无限循环

windows如何保护转换到内核模式?

linux内核编程:列出所有打开的套接字文件描述符,并检索相关信息

windows内核ReadProcessMemory()/ WriteProcessMemory()?

glibc或内核中的/usr/include/unistd.h和limit.h位于何处

加载我自己的内核模块时出现未知符号

linux内核 – 通过模块dynamic添加系统调用

linux / windows内核模块中的无限循环

模拟USB设备的自动化

linux如何知道要调用哪个ioctl函数?

您示例中的sysfs_remove_file和其他函数仅导出GPL,并且只能从标有MODulE_liCENSE(\”GPL\”);的模块访问MODulE_liCENSE(\”GPL\”); 。 有关更多信息,请参阅linux内核常见问题解答 。 如果您的模块是内部使用的,或者您计划以开源方式进行分发,则这不应该是一个问题。 否则,您可能需要重新考虑如何连接到内核。

总结

以上是内存溢出为你收集整理的从内核模块使用sysfs时出现未知的符号错误全部内容,希望文章能够帮你解决从内核模块使用sysfs时出现未知的符号错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞86 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容