2014-09-02 49 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下載了最新版本的驅動程序,該驅動程序構建得很好。當我換出源代碼文件但使用舊配置生成文件腳本時,則返回問題。然後,無論是什麼問題,都是由於編譯或安裝模塊時出現問題。無論如何,我現在有一個安裝的驅動程序。