加载时出现:
# insmod bus_basic.ko
bus_basic: Unknown symbol bus_create_file
bus_basic: Unknown symbol bus_unregister
bus_basic: Unknown symbol bus_register
insmod: cannot insert 'bus_basic.ko': Unknown symbol in module (-1): No such fil
e or directory
但是查看kallsyms里面有这些函数
# grep 'bus_create_file' kallsyms
c017adf0 T bus_create_file
c02f6a10 r __ksymtab_bus_create_file
c02fc848 r __kstrtab_bus_create_file
# grep 'bus_register' kallsyms
c017b6c8 T bus_register
c02f6a40 r __ksymtab_bus_register
c02fc898 r __kstrtab_bus_register
# grep 'bus_unregister' kallsyms
c017b810 T bus_unregister
c02f6a38 r __ksymtab_bus_unregister
c02fc888 r __kstrtab_bus_unregister说明所用内核符号存在于“ELF段”中后来重新启动系统,重新加载,由于是第一次,会多出现一句“Dual BSD/GPl”tains kernel ,注意不是“Dual BSD/GPL”之前有一个LED驱动程序没有加MODULE_LICENSE出现类似的情况,但还是可以正常运行,所以没有在意。我把那个改过来后,发现问题解决了总结:如果一个模块没有显式地标记为内核可识别的许可证,则会被认为是专有的,也就会出现“tains”但是没有搞清为什么那模块就不能正常运行了,难道要指定许可证才能搞用相关函数???
阅读(9052) | 评论(0) | 转发(0) |