USB驱动移植的一个问题
我把编译好的ko模块insmod,但是返回如下:
/tmp $ insmod zd1211b.ko
zd1211b: Unknown symbol usb_alloc_urb
zd1211b: Unknown symbol usb_free_urb
zd1211b: Unknown symbol usb_register
zd1211b: Unknown symbol usb_put_dev
zd1211b: Unknown symbol usb_get_dev
zd1211b: Unknown symbol usb_submit_urb
zd1211b: Unknown symbol usb_control_msg
zd1211b: Unknown symbol usb_deregister
zd1211b: Unknown symbol usb_kill_urb
我查看内核中的USB内核相关代码,这些函数都有定义啊,为什么还说是Unknown symbol???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
请高手多多指教啊!!!
虽然有这些定义,但是相应模块没有导出符号(export symbol),就不能在运行时引用这些函数,除非你把源文件拿过来静态编译。
我查看了一下linux-2.6.14/driver/usb/core/urb.c,其中最后几行如下:
EXPORT_SYMBOL(usb_init_urb);
EXPORT_SYMBOL(usb_alloc_urb);
EXPORT_SYMBOL(usb_free_urb);
EXPORT_SYMBOL(usb_get_urb);
EXPORT_SYMBOL(usb_submit_urb);
EXPORT_SYMBOL(usb_unlink_urb);
EXPORT_SYMBOL(usb_kill_urb);
就是说kernel已经导出了这些函数符号,当我加载使用这些符号的模块时,kernel却还是说unknow symbol
为什么?太奇怪了!
找到原因了,应该是kernel没有加载usb core。
有没有方法查询usb core是否加载?另外,怎样加载?是不是到menuconfig里配置?
问题可能比较菜鸟,大家多包涵:)
你用modprobe试一下没有?