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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

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

USB 傳輸?shù)暮诵氖?endpoint,使用 endpoint 可以收發(fā)數(shù)據(jù)。在 endpoint 之上,就可以模擬 USB 串口、USB 觸碰屏、USB 攝像頭。基于這個角度,Gadget 框架可以分為兩層:

  • 底層 endpoint 操作
  • 上層模擬各類 USB 設(shè)備

圖片

2.1 底層硬件操作_UDC 驅(qū)動

不同平臺采用的 USB 控制器型號不同,確認(rèn)型號方法是從 dtb 反編譯,找到包含 otg 字符的節(jié)點,在 Linux code 中搜索 dts 節(jié)點的 compatible,可以找到對應(yīng)的 usb 從機(jī)控制器驅(qū)動。

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

  • 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 設(shè)備時,軟件怎么分層?以訪問設(shè)備、獲取描述符為例:

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

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

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

軟件層次可以進(jìn)一步細(xì)化,如下圖:

圖片

這涉及 2 個結(jié)構(gòu)體:

  • usb_composite_dev:它里面匯集有各類描述符、有一個 usb_funciton 鏈表(實現(xiàn)數(shù)據(jù)傳輸)
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 結(jié)構(gòu)體里面有 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;
  };
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5103

    文章

    19268

    瀏覽量

    310026
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11373

    瀏覽量

    211298
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17614
收藏 人收藏

    評論

    相關(guān)推薦

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

    我來硬件角度解析下這個USB Type-C,順便解惑。尺寸小,支持正反插,速度快(10Gb)。這個小是針對以前電腦上的USB接口說的,實際相對android機(jī)上的microUSB還大了點。
    的頭像 發(fā)表于 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的角度理解設(shè)計模式(連載)

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

    需求的角度理解Linux系列:總線、設(shè)備和驅(qū)動

    總線設(shè)備驅(qū)動框架的前提!面向?qū)ο蟮?b class='flag-5'>角度,我們要弄清楚,物理意義上的硬件是什么,而對應(yīng)的軟件對象是如何表述的。以下闡述會重點講述
    發(fā)表于 03-11 14:45

    需求的角度理解嵌入式Linux:總線、設(shè)備和驅(qū)動

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

    字符設(shè)備驅(qū)動、設(shè)備驅(qū)動模型、sysfs、平臺設(shè)備驅(qū)動的關(guān)系 -----需求的角度理解Linux之三

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

    數(shù)字化實現(xiàn)的角度理解PI環(huán)節(jié)

    本文數(shù)字化實現(xiàn)的角度理解PI(proportional integral, PI)環(huán)節(jié),為數(shù)字化實現(xiàn)PI打下基礎(chǔ)。...
    發(fā)表于 08-30 07:41

    應(yīng)用于嵌入式系統(tǒng)軟件硬件接口問題的設(shè)計

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

    如何理解現(xiàn)場總線?工業(yè)通信的角度看看資料下載

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

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

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

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

    只作為語法設(shè)定來介紹,忽略了Verilog語言的軟件特性和仿真特性。使得初學(xué)者無法理解Verilog語言在行為級語法(過程塊、賦值和延遲)背后隱藏的設(shè)計思想。本文嘗試仿真器的角度對V
    的頭像 發(fā)表于 05-25 15:10 ?928次閱讀
    <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設(shè)備
    的頭像 發(fā)表于 07-07 14:15 ?792次閱讀

    USB Gadget serial應(yīng)用實例(上)

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

    怎樣理解Gadget框架

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

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

    安裝好 gadget 驅(qū)動程序后(比如 modprobe g_zero), 它只是構(gòu)造好了各類描述符。在設(shè)備的枚舉過程會讀取描述符。 使用 OTG 線連接電腦和開發(fā)板時,電腦軟件會執(zhí)行如下
    的頭像 發(fā)表于 07-13 11:38 ?1045次閱讀
    <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>

    數(shù)據(jù)傳輸?shù)?b class='flag-5'>角度理解Gadge框架

    5.1 使用流程 在 USB 協(xié)議中,永遠(yuǎn)是 Host 主動發(fā)起傳輸。作為一個 Gadget 驅(qū)動程序,它永遠(yuǎn)都是這樣: 想接收數(shù)據(jù): 先構(gòu)造好 usb_request:分配 buffer、設(shè)置回調(diào)
    的頭像 發(fā)表于 07-13 11:41 ?1326次閱讀
    <b class='flag-5'>從</b>數(shù)據(jù)傳輸?shù)?b class='flag-5'>角度</b><b class='flag-5'>理解</b>Gadge<b class='flag-5'>框架</b>
    主站蜘蛛池模板: 影音先锋av男人资源 | 极品少妇伦理一区二区 | 久久极品视频 | 公粗挺进了我的密道在线播放贝壳 | 亚洲黄色高清 | 亚洲高清有码中文字 | 久久黄色网址 | 色琪琪久久热在线 | ai换脸在线全集观看 | 国产探花在线精品一区二区 | 亚洲成年人影院 | 免费观看美女的网站 | 黄色精品视频 | 亚洲综合日韩在线2019 | 亚洲狠狠网站色噜噜 | 欧美一区二区三区久久综 | 99热久久久无码国产精品性麻豆 | 一本道久在线综合道 | 亚洲中文字幕永久在线全国 | 曰批国产精品视频免费观看 | 区产品乱码芒果精品P站在线 | 拔萝卜在线高清观看视频 | 韩国无遮羞禁动漫在线观看 | 午夜片无码区在线观看 | 午夜福利不卡片在线播放免费 | 日本一本2017国产 | 伊人国产在线视频 | 最近更新2019中文字幕免费 | 亚洲成A人片在线观看中文不卡 | 成人精品综合免费视频 | 亚洲免费视频观看 | 国产精品综合AV一区二区国产馆 | 黄色三级网络 | 成年人在线视频免费观看 | 国产精品久久久久久亚洲毛片 | 亚洲麻豆精品成人A在线观看 | 国产WW高清大片免费看 | 亚洲AV永久无码精品老司机蜜桃 | 一本道高清码v京东热 | 伦理片2499电影伦理片 | 亚洲精品白色在线发布 |