2

我有一個嵌入式Linux項目,需要通過USB端口讀取視頻,對視頻進行一些修改(例如壓縮),然後將其發回通過優選相同的USB端口連接到主機。如果我們可以發送命令來改變諸如從主機到設備的視頻壓縮等級,這也是一個首選功能。嵌入式Linux從USB端口讀取和寫入視頻

可以將主機假定爲運行某個版本的Linux的桌面,實際進行此視頻處理的設備是運行嵌入式Linux的Gumstix。

對於如何開始這個項目或者在Linux中輸入/輸出的劃分方面進行研究,我基本上已經迷失了方向。首先,是否有可能通過相同的USB端口讀取視頻,寫入視頻和發送命令?視頻相對較小,尤其是在設備壓縮後,因此帶寬不成問題。主要問題是要知道從哪裏開始研究這個項目。是否有類似USB的TCP/IP,您可以在主機和設備之間打開多個連接來傳輸數據?

我們必須編寫我們自己的USB設備驅動程序嗎?開發我們自己的協議還是USB支持相對容易地在同一端口上做多件事?

我應該開始研究Linux驅動程序,用戶級編程和API或USB協議嗎?或者完全不同的東西?我是一名高級計算機工程專業的學生,​​所以我的經驗水平是C,C++,Java,Verilog,TCL等編程的混合體。幾乎所有與套接字相關的編程都在Java(獨立於操作系統)中,所以我真的不知道從哪裏開始編寫Linux應用程序來執行這樣的任務。在微處理器編程(AVR,coldfire)方面我有過相當多的經驗,但是儘管接近我的需求,但它並不能真正幫助我找出開始的地方。

回答

3

USB端口有兩種口味;主機是公共汽車的控制器,可以在個人電腦和設備上找到,也可以在Linux中找到一個小工具(在靜止圖像攝像機中有一個通用的版本,其中的端口可以在移動時稱爲USB連接切換類型)。主機端口可以連接到多個小工具端口(通過集線器)。主機非常擅長控制作爲從屬設備的小工具。 兩種端口類型的硬件有很大不同,許多嵌入式核心都包含每種類型控制器的示例。 Linux內核包含OHCI EHCI和UHCI主機控制器硬件以及各種協議驅動程序(打印機,鍵盤等)的主機驅動程序。對於某些設備類型,USB組織實施了標準協議,因此您不需要USB磁盤驅動器的製造商驅動程序,因爲它們應該都符合免費的公開可用標準。

如果您希望您的設備與PC主機通話,您將需要實現設備/小工具接口,但電纜另一端的硬件設計種類繁多,但您應該發現Linux內核支持一些更常見的選擇。

小工具目錄還包含一系列協議驅動程序。一個可以節省大量工作的技巧是將設備配置爲USB網絡接口,這樣可以避免編寫大量低級別內容,並且可以利用網絡診斷工具並將USB層抽象出來你的應用程序的兩端。這甚至可以與Windows主機一起工作,而無需編寫自定義Windows驅動程序(XP僅支持Microsoft RNDIS USB協議,Windows驅動程序有問題,可掛在斷開連接上,但內核包含RNDIS包裝程序,此解決方案可以很好地工作)。

我不確定你的問題是視頻源是一個獨立的USB設備,在這種情況下,它將需要一個單獨的USB主機端口在您的設備上,或者如果它是由主機提供。

獲取您自己的內核源代碼集並學習USB gadget目錄,同時從USB.org下載USB規範您將需要了解第8章9 10 11章節,因爲它們解釋了主機檢測到小工具後會發生什麼端點的概念。作爲USB的快速介紹,Mindshare做了一本USB書。

+0

請問在上面的分析中libusb'sit'在哪裏?我的意思是它實現了設備IO的'協議'嗎?也就是說,它是否與協議驅動程序位於同一級別?謝謝 – nass 2013-07-02 16:35:48