<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

          作者: 時(shí)間:2014-01-22 來源:網(wǎng)絡(luò) 收藏

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

          圖2 程序?qū)哟螆D

          1.3 程序框架

            1.3.1 基本數(shù)據(jù)結(jié)構(gòu)

            usb-skel設(shè)備使用自定義結(jié)構(gòu)usb_skel記錄設(shè)備驅(qū)動(dòng)用到的所有描述符,該結(jié)構(gòu)定義如下:

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

            1.3.2 驅(qū)動(dòng)程序初始化和注銷

            同其他所有的設(shè)備驅(qū)動(dòng)程序一樣,usb-skel驅(qū)動(dòng)使用module_init()宏初始化函數(shù),使用module_exit()宏注銷函數(shù)。usb-skel驅(qū)動(dòng)的初始化函數(shù)usb_skel_init()函數(shù),定義如下:

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

            sb_skel_init()函數(shù)調(diào)用內(nèi)核提供的usb_register()函數(shù)注冊(cè)了一個(gè)usb_driver類型的結(jié)構(gòu)變量,該變量定義如下:

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

            其中usb_skel設(shè)備的USB ID映射表定義如下:

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

            在中調(diào)用usb_deregister()函數(shù)注銷usb-skel設(shè)備驅(qū)動(dòng),函數(shù)定義如下:

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

            1.3.3 初始化設(shè)備

            從skel_driver結(jié)構(gòu)可以知道usb-skel設(shè)備的初始化函數(shù)是skel_probe()函數(shù),設(shè)備初始化主要是探測(cè)設(shè)備類型,分配USB設(shè)備用到的urb資源,注冊(cè)USB設(shè)備操作函數(shù)等。

            skel_class結(jié)構(gòu)變量記錄了usb-skel設(shè)備信息,定義如下:

          詳解嵌入式Linux的USB驅(qū)動(dòng)設(shè)計(jì)

            name變量使用%d通配符表示一個(gè)整型變量,當(dāng)一個(gè)usb-skel類型的設(shè)備連接到USB總先后會(huì)2按照子設(shè)備編號(hào)自動(dòng)設(shè)置設(shè)備名稱。Fops設(shè)備操作函數(shù)結(jié)構(gòu)變量,定義如下:

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();