色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從硬件軟件角度理解Gadget框架

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:嵌入式Linux系統開 ? 2023-07-13 11:32 ? 次閱讀

2. 從硬件軟件角度理解 Gadget 框架

USB 傳輸的核心是 endpoint,使用 endpoint 可以收發數據。在 endpoint 之上,就可以模擬 USB 串口、USB 觸碰屏、USB 攝像頭。基于這個角度,Gadget 框架可以分為兩層:

  • 底層 endpoint 操作
  • 上層模擬各類 USB 設備

圖片

2.1 底層硬件操作_UDC 驅動

不同平臺采用的 USB 控制器型號不同,確認型號方法是從 dtb 反編譯,找到包含 otg 字符的節點,在 Linux code 中搜索 dts 節點的 compatible,可以找到對應的 usb 從機控制器驅動。

對于底層 endpoint 的代碼,需要從 UDC 驅動開始分析:

  • IMX6ULL 的代碼:Linux-4.9.88driversusbchipideaci_hdrc_imx.c
ci_hdrc_imx_probe
      ci_hdrc_add_device
       pdev = platform_device_alloc("ci_hdrc", id);
  
  
  // Linux-4.9.88driversusbchipideacore.c
  static struct platform_driver ci_hdrc_driver = {
   .probe = ci_hdrc_probe,
   .remove = ci_hdrc_remove,
   .driver = {
    .name = "ci_hdrc",
    .pm = &ci_pm_ops,
   },
  };
  
  ci_hdrc_probe
       ret = ci_hdrc_gadget_init(ci);
         udc_start

圖片

  • STM32MP157 的代碼:Linux-5.4driversusbdwc2platform.c
dwc2_driver_probe
      retval = dwc2_gadget_init(hsotg);

圖片

2.2 上層軟件操作

模擬各類 USB 設備時,軟件怎么分層?以訪問設備、獲取描述符為例:

  • Host 要分配地址、把地址發送給設備:不管要模擬什么設備,Gadget 都必須接收地址,這部分由 usb_gadget (硬件相關的驅動程序)實現
  • Host 要讀取各類描述符,這些描述符是由上層的驅動程序提供的
  • 怎么把上層的描述符通過底層的 usb_gadget 傳回給 Host?還需要一個中間層。Host 獲取描述符時,方法是固定、通用的,這些方法可以由內核統一提供,這就是:usb_gadget_driver。

所以,從獲取描述符的角度看看,上層軟件至少分為 2 層:

  • usb_gadget_driver:實現一些通用的 USB 訪問方法,比如 Host 訪問描述符時,由 usb_gadget_driver 提供
  • 在這上面提供各類描述符,實際上,描述符的提供還可以分為兩層:
    • 設備描述符、配置描述符:由程序員決定,由 usb_composite_driver 提供
    • 接口描述符、endpoint 描述符:由內核事先實現的、常用的 function driver 提供

軟件層次可以進一步細化,如下圖:

圖片

這涉及 2 個結構體:

  • usb_composite_dev:它里面匯集有各類描述符、有一個 usb_funciton 鏈表(實現數據傳輸)
struct usb_composite_dev {
   struct usb_gadget  *gadget;
   struct usb_request  *req;
   struct usb_request  *os_desc_req;
  
   struct usb_configuration *config;
  
   /* OS String is a custom (yet popular) extension to the USB standard. */
   u8    qw_sign[OS_STRING_QW_SIGN_LEN];
   u8    b_vendor_code;
   struct usb_configuration *os_desc_config;
   unsigned int   use_os_string:1;
  
   /* private: */
   /* internals */
   unsigned int   suspended:1;
   struct usb_device_descriptor desc;
   struct list_head  configs;
   struct list_head  gstrings;
   struct usb_composite_driver *driver;
   u8    next_string_id;
   char    *def_manufacturer;
  
   /* the gadget driver won't enable the data pullup
    * while the deactivation count is nonzero.
    */
   unsigned   deactivations;
  
   /* the composite driver won't complete the control transfer's
    * data/status stages till delayed_status is zero.
    */
   int    delayed_status;
  
   /* protects deactivations and delayed_status counts*/
   spinlock_t   lock;
  
   /* public: */
   unsigned int   setup_pending:1;
   unsigned int   os_desc_pending:1;
  };
  • usb_udc:UDC 的本意是"usb device controller",usb_udc 結構體里面有 usb_gadget (表示 UDC 本身)、usb_gadget_driver()
struct usb_udc {
   struct usb_gadget_driver *driver;
   struct usb_gadget  *gadget;
   struct device   dev;
   struct list_head  list;
   bool    vbus;
  };
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5087

    文章

    19145

    瀏覽量

    306121
  • Linux
    +關注

    關注

    87

    文章

    11320

    瀏覽量

    209845
  • 框架
    +關注

    關注

    0

    文章

    403

    瀏覽量

    17510
收藏 人收藏

    評論

    相關推薦

    硬件角度解析下這個USB Type-C

    我來硬件角度解析下這個USB Type-C,順便解惑。尺寸小,支持正反插,速度快(10Gb)。這個小是針對以前電腦上的USB接口說的,實際相對android機上的microUSB還大了點。
    的頭像 發表于 01-23 08:53 ?1.5w次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>硬件</b><b class='flag-5'>角度</b>解析下這個USB Type-C

    [分享]Java的角度理解設計模式(連載)

     Java的角度理解設計模式1:什么是重構 MF在《重構》一書中是這樣定義重構的:重構是這樣一個過程,在不改變代碼外在行為的前提下,對代碼作出修改,以改進程序的內部結構。重構
    發表于 06-19 16:40

    需求的角度理解Linux系列:總線、設備和驅動

    總線設備驅動框架的前提!面向對象的角度,我們要弄清楚,物理意義上的硬件是什么,而對應的軟件對象是如何表述的。以下闡述會重點講述
    發表于 03-11 14:45

    需求的角度理解嵌入式Linux:總線、設備和驅動

    和原理。事實上,對于一個代碼量有幾萬甚至幾十萬行代碼量的軟件框架,一開始接觸就學習原理和代碼并不是好事。這種做法很像是試圖軟件框架的學習
    發表于 12-11 16:34

    字符設備驅動、設備驅動模型、sysfs、平臺設備驅動的關系 -----需求的角度理解Linux之三

    ,能夠熟悉某一點并分享出來已很難得,但對于專注傳授技術和經驗給學習者而言,橫向比較關聯各個驅動相關的知識點和縱向剖析Linux整個驅動軟件層次是非常有必要的,也非常有意義。本文依然是需求的角度
    發表于 12-17 16:16

    數字化實現的角度理解PI環節

    本文數字化實現的角度理解PI(proportional integral, PI)環節,為數字化實現PI打下基礎。...
    發表于 08-30 07:41

    應用于嵌入式系統軟件硬件接口問題的設計

    最理想的解決方案是軟件小組參與硬件設計,但是在時間安排、資金和人員方面往往又是不實際的。一種變通的方法是創建一套硬件接口規范來加速軟件開發流程。
    的頭像 發表于 11-01 08:58 ?2719次閱讀
    應用于嵌入式系統<b class='flag-5'>軟件</b>和<b class='flag-5'>硬件</b>接口問題的設計

    如何理解現場總線?工業通信的角度看看資料下載

    電子發燒友網為你提供如何理解現場總線?工業通信的角度看看資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-15 08:45 ?12次下載
    如何<b class='flag-5'>理解</b>現場總線?<b class='flag-5'>從</b>工業通信的<b class='flag-5'>角度</b>看看資料下載

    仿真器的角度理解Verilog語言1

    只作為語法設定來介紹,忽略了Verilog語言的軟件特性和仿真特性。使得初學者無法理解Verilog語言在行為級語法(過程塊、賦值和延遲)背后隱藏的設計思想。本文嘗試仿真器的角度對V
    的頭像 發表于 05-25 15:10 ?934次閱讀
    <b class='flag-5'>從</b>仿真器的<b class='flag-5'>角度</b><b class='flag-5'>理解</b>Verilog語言1

    仿真器的角度理解Verilog語言2

    只作為語法設定來介紹,忽略了Verilog語言的軟件特性和仿真特性。使得初學者無法理解Verilog語言在行為級語法(過程塊、賦值和延遲)背后隱藏的設計思想。本文嘗試仿真器的角度對V
    的頭像 發表于 05-25 15:10 ?856次閱讀
    <b class='flag-5'>從</b>仿真器的<b class='flag-5'>角度</b><b class='flag-5'>理解</b>Verilog語言2

    AMD Xilinx Linux 2022.1 USB Gadget使用

    有客戶使用Linux中的USB Gadget功能,把MPSoC器件做USB設備
    的頭像 發表于 07-07 14:15 ?717次閱讀

    USB Gadget serial應用實例(上)

    1. 硬件體驗 使用 Linux 自帶的 USB Gadget 驅動 /drivers/usb/gadget/legacy/serial.c 使用 USB 線,連接板子的 OTG 口和 PC
    的頭像 發表于 07-13 11:06 ?2906次閱讀
    USB <b class='flag-5'>Gadget</b> serial應用實例(上)

    怎樣理解Gadget框架

    。 意思是說,一個開發板,可以當 USB 主機,接鼠標、鍵盤等機;一個開發板也可以當 U 盤,接入 PC 電腦,此時開發板是機。因此,我們要掌握兩套驅動框架。這是 Linux 下 USB 相對于 I2C
    的頭像 發表于 07-13 11:18 ?671次閱讀
    怎樣<b class='flag-5'>理解</b><b class='flag-5'>Gadget</b><b class='flag-5'>框架</b>

    獲取描述符的角度理解Gadget框架

    安裝好 gadget 驅動程序后(比如 modprobe g_zero), 它只是構造好了各類描述符。在設備的枚舉過程會讀取描述符。 使用 OTG 線連接電腦和開發板時,電腦軟件會執行如下
    的頭像 發表于 07-13 11:38 ?961次閱讀
    <b class='flag-5'>從</b>獲取描述符的<b class='flag-5'>角度</b><b class='flag-5'>理解</b><b class='flag-5'>Gadget</b><b class='flag-5'>框架</b>

    數據傳輸的角度理解Gadge框架

    5.1 使用流程 在 USB 協議中,永遠是 Host 主動發起傳輸。作為一個 Gadget 驅動程序,它永遠都是這樣: 想接收數據: 先構造好 usb_request:分配 buffer、設置回調
    的頭像 發表于 07-13 11:41 ?1189次閱讀
    <b class='flag-5'>從</b>數據傳輸的<b class='flag-5'>角度</b><b class='flag-5'>理解</b>Gadge<b class='flag-5'>框架</b>
    主站蜘蛛池模板: 玖玖爱在线播放| 强姧伦久久久久久久久| 窝窝影院午夜看片毛片| 国产精品一区二区欧美视频| 亚洲高清国产拍精品动图| 精品无码久久久久久久动漫| 538久久视频在线| 日日干夜夜爱| 娇妻在床上迎合男人| 99无码熟妇丰满人妻啪啪| 色小说在线| 久青草国产在线视频| 成人欧美尽粗二区三区AV| 亚洲高清中文字幕| 免费看黄软件| 国产精品无码AV天天爽人妻蜜桃| 伊人久久电影院| 日韩欧美三区| 久久AV无码AV高潮AV不卡| yy8090韩国理伦片在线| 亚洲精品伊人久久久久| 女性爽爽影院免费观看| 国产一区91| 差差差差差差差差免费观看| 亚洲日韩视频免费观看| 欧美三级aaa| 禁漫H天堂免费A漫| 爱看吧孕妇网| 在线广播收听| 外女思春台湾三级| 嫩草影院未满十八岁禁止入内| 国产在线播放不卡| 扒开校花粉嫩小泬喷潮漫画| 亚洲色综合狠狠综合区| 日韩少妇爆乳无码专区| 老司机无码精品A| 国产婷婷色综合AV蜜臀AV| ass女人下部欣赏| 伊人久在线观看视频| 我把寡妇日出水好爽| 欧美一区二区视频在线观看|