在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

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

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

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

圖片

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

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

對(duì)于底層 endpoint 的代碼,需要從 UDC 驅(qū)動(dòng)開(kāi)始分析:

  • 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 上層軟件操作

模擬各類(lèi) USB 設(shè)備時(shí),軟件怎么分層?以訪問(wèn)設(shè)備、獲取描述符為例:

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

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

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

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

圖片

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

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

    關(guān)注

    5126

    文章

    19446

    瀏覽量

    313335
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11425

    瀏覽量

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

    關(guān)注

    0

    文章

    404

    瀏覽量

    17749
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    硬件角度解析下這個(gè)USB Type-C

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    仿真器的角度理解Verilog語(yǔ)言1

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

    仿真器的角度理解Verilog語(yǔ)言2

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

    AMD Xilinx Linux 2022.1 USB Gadget使用

    有客戶(hù)使用Linux中的USB Gadget功能,把MPSoC器件做USB設(shè)備
    的頭像 發(fā)表于 07-07 14:15 ?837次閱讀

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

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

    怎樣理解Gadget框架

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

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

    安裝好 gadget 驅(qū)動(dòng)程序后(比如 modprobe g_zero), 它只是構(gòu)造好了各類(lèi)描述符。在設(shè)備的枚舉過(guò)程會(huì)讀取描述符。 使用 OTG 線連接電腦和開(kāi)發(fā)板時(shí),電腦軟件會(huì)執(zhí)行如下
    的頭像 發(fā)表于 07-13 11:38 ?1161次閱讀
    <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 主動(dòng)發(fā)起傳輸。作為一個(gè) Gadget 驅(qū)動(dòng)程序,它永遠(yuǎn)都是這樣: 想接收數(shù)據(jù): 先構(gòu)造好 usb_request:分配 buffer、設(shè)置回調(diào)
    的頭像 發(fā)表于 07-13 11:41 ?1484次閱讀
    <b class='flag-5'>從</b>數(shù)據(jù)傳輸?shù)?b class='flag-5'>角度</b><b class='flag-5'>理解</b>Gadge<b class='flag-5'>框架</b>
    主站蜘蛛池模板: 午夜福利毛片 | 黄网站播放 | 亚洲日本视频在线观看 | 日本三级香港三级三级人!妇久 | 日本成人一级片 | 日本成人一级片 | 性做久久久久 | 国产黄色三级网站 | 色视频免费看 | 韩日中文字幕 | 午夜福免费福利在线观看 | 免费在线黄网站 | 又粗又长又爽又长黄免费视频 | 日本在线免费 | 日韩午夜r电影在线观看 | 欧美在线你懂的 | 99久久精品久久久久久婷婷 | 伊人不卡久久大香线蕉综合影院 | 免费人成激情视频在线观看冫 | 狼人 成人 综合 亚洲 | 免费一级毛片在线播放不收费 | 色五夜婷婷| 天天操天 | 91久久天天躁狠狠躁夜夜 | 男人不识本网站上遍色站也枉然 | 69日本xxxxhd| 一级毛片真人免费播放视频 | 永久免费在线看 | 欧美三级一级 | 午夜免费的国产片在线观看 | 在线观看视频你懂的 | 在线视频网址免费播放 | 丁香狠狠色婷婷久久综合 | 久久夜色精品国产亚洲噜噜 | 欧美性xxxx交 | 久久手机看片你懂的日韩1024 | 亚洲欧美视频 | 中国又粗又大又爽的毛片 | 亚洲黄色录像 | 免费高清一级欧美片在线观看 | 最近2018年中文字幕在线 |