USB,是英文Universal Serial Bus(通用串行總線)的縮寫,是一個外部總線標準,用於規範電腦與外部設備的鏈接和通信。是應用在PC領域的接口技術。USB接口支持設備的即插即用和熱插拔功能。USB是在1994年末由英特爾、康柏、IBM、Microsoft等多家公司聯合提出的。網絡
如圖 1‑1所示,普通網卡驅動與USB網卡驅動相比最大的區別是,USB網卡把普通的物理硬件換成了USB的物理硬件。框架
圖 1‑1 USB網卡與普通網卡對比圖函數
如圖 1‑2所示,在SylixOS中,USB網卡框架中網卡驅動可大體分爲4層分別爲USB網卡驅動層、USB協議層、Gadget層和UDC層。spa
圖 1‑2 SylixOS USB虛擬網卡框架orm
USB網卡驅動層:服務對象是網絡協議棧(TCP/IP或者LWIP)用來接收或發送網絡報文。對象
USB協議層:從USB網卡驅動層接收網絡報文加工生成對應的USB報文或者,從UDC層接收USB報文轉換成網絡報文。接口
Gadget層:完成的工做是綁定UDC層和USB協議層,註冊綁定相關的回調函數,此層功能相似於Linux下的Platform功能。是爲了去除耦合便於移植和代碼複用。get
UDC層:配置USB寄存器來實現硬件傳輸功能。回調函數
USB數據在傳輸的過程當中會通過如圖 2‑1所示中的相關代碼層。數據每通過一個代碼層,代碼層會對數據進行加工處理。it
圖 2‑1 USB虛擬網卡數據分層
如圖 2‑2所示,舉一個數據傳輸的實例。上層應用要傳輸數據「123」(數據「123」稱爲原始數據),首先須要通過協議棧層。協議棧會把原始數據封裝成網絡報文繼續向下傳輸。須要注意若是是普通網卡驅動最終傳輸的就是網絡報文,但USB仍然須要對網絡報文再次封裝。網絡報文通過USB協議層時,會根據安裝好的驅動選擇對應的USB驅動協議進行報文封裝,把網絡報文轉換成USB報文。最終在USB上傳輸的是USB報文。發送的過程是對原始數據封裝組包的過程,同理接收數據是對接收到的數據拆包解析的過程。有了這套機制,就能夠保證數據能夠正確傳輸。
圖 2‑2 數據流實例