2014-09-02 26 views
0

我试图恢复一个名为Wind River v6(wndrvr6)的旧版linux USB模块,最初是为2.6.18或更早版本的内核编写的,可能是RedHat 5.最老的内核我已经设法在Fedora 9下的Virtualbox下充分运行2.6.27,并且除了这一个模块外,一切正常。我做了约10更改源代码,让它使用2.6.27编译,但是当我尝试加载它,我得到用于linux内核2.6.27的古董模块中未知的USB符号

windrvr6:未知符号usb_alloc_urb
windrvr6:未知符号usb_free_urb
windrvr6:未知符号usb_ifnum_to_if
windrvr6:未知符号usb_register_driver
windrvr6:未知符号usb_clear_halt
windrvr6:未知符号usb_submit_urb
windrvr6:未知符号usb_set_interface
windrvr6:未知符号usb_deregister
windrvr6:未知的符号usb_kill_urb

我已经运行“depmod -a”,并且“depmod -e”没有输出,所以所有的符号都应该被考虑。上面的符号出现在许多模块中(使用strings命令)。的/ proc/kallsyms具有线

ffffffff811efc29Ťusb_kill_urb

所以提供这些符号。为什么没有找到这些符号?

+0

usb_kill_urb使用EXPORT_SYMBOL_GPL()导出。什么是windrvr6驱动程序的许可证?这可能是链路故障的原因。请参阅此处的USB核心代码:http://lxr.free-electrons.com/source/drivers/usb/core/urb.c?v=3.3#L615 – 2014-09-02 23:59:06

+0

该代码表示​​查看“\ windriver \ docs \ license”。 txt“,但Xilinx没有在源文件中包含docs目录。上次我写了一个设备驱动程序,许可没有被检查。该驱动程序只调用EXPORT_SYMBOL()和EXPORT_SYMBOL_NOVERS()。在源代码中有一些关于许可的代码,但它是一个曲折的小宏的迷宫,都是一样的。 – skewray 2014-09-04 01:11:11

+0

我不认为EXPORT_SYMBOL_NOVERS()与2.6.x以上的大多数内核一起工作。在过去的6个月中,我遇到了一个类似的问题,那就是使用modversion。无论如何,这并不重要,因为模块许可策略不考虑版本控制,而是使用MODULE_LICENSE()宏广告的许可证。设计意图是防止封闭源驱动程序使用GPL授权代码。您也可以选择将驱动程序构建为内核的一部分。请参阅http://lxr.free-electrons.com/source/include/linux/export.h#L89了解它如何在内核中实现。 – 2014-09-04 03:58:58

回答

0

我从Jungo下载了最新版本的驱动程序,该驱动程序构建得很好。当我换出源代码文件但使用旧配置生成文件脚本时,则返回问题。然后,无论是什么问题,都是由于编译或安装模块时出现问题。无论如何,我现在有一个安装的驱动程序。