站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        linux中platform是什么意思

        在linux中,platform是一個虛擬總線,與真實的“spi/sdio/usb/pcie”等總線對應(yīng);platform能夠把硬件和軟件分離出來,platform所描述的資源有一個共同點是在CPU的總線上直接取址,平臺設(shè)備會分到一個名稱以及一系列諸如地址和中斷請求號之類的資源。

        linux中platform是什么意思

        本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

        linux中platform是什么意思

        platform為虛擬總線,與真實的spi/sdio/usb/pcie等總線對應(yīng)

        邏輯總線的的一個重要功能是發(fā)現(xiàn)設(shè)備并且找到合適的驅(qū)動以操作這個設(shè)備。

        platform總線是一種虛擬的邏輯總線,滿足邏輯互聯(lián)功能。為了統(tǒng)一管理設(shè)備,platform可以把物理上不存在總線的一類設(shè)備,用平臺總線統(tǒng)一把它們管理起來。

        常見的總線如USB,SPI,UART,PCI,I2S等總線,是在物理上實實在在存在的總線。Linux系統(tǒng)為這類總線設(shè)計了一種統(tǒng)一管理它們的方法,即bus。同時也為在物理上沒有總線的設(shè)備也統(tǒng)一設(shè)計了platform總線,所以Linux內(nèi)核設(shè)計者就設(shè)計了platform總線,也就是說,plarform 總線就是為了SoC內(nèi)部設(shè)備在物理上沒有總線的設(shè)備設(shè)計的,它統(tǒng)一歸屬bus總線一類。

        這樣做的好處是,設(shè)備(device)端代碼的編寫者只關(guān)心具體的硬件部分,設(shè)備共性的部分(穩(wěn)定不變的部分)被內(nèi)核設(shè)計者完成了,這樣降低了驅(qū)動編寫的難度。

        通過platform總線,可以將設(shè)備屬性(也叫數(shù)據(jù))和驅(qū)動分離,這樣可以使用相同的驅(qū)動支持同一功能核心硬件的不同設(shè)備。這樣避免了一個設(shè)備就需要一個驅(qū)動的現(xiàn)象,降低了重復(fù)性勞動。

        擴展知識

        platform平臺總線相關(guān)定義

        platform平臺總線相關(guān)的對象定義在文件 drivers/base/platform.c中。這個文件中實現(xiàn)了平臺總線對象和對象操作方法方面的內(nèi)容。

        兩個重要的數(shù)據(jù)結(jié)構(gòu)體

        1、platform_driver

        這是內(nèi)嵌一個device_driver 的結(jié)構(gòu)體對象,其中定義了操作對象的方法。

        2、platform_device

        它是一個內(nèi)嵌了device結(jié)構(gòu)體對象,其中定義了設(shè)備描述資源的屬性。

        具體對象定義如下:

        1、platform_driver 對象定義

        struct platform_driver  { int (*probe)(struct platform_device *);     //探測函數(shù),安裝設(shè)備,初始化設(shè)備,并且判斷是否能成功(初始化成功,通訊成功等等) int (*remove)(struct platform_device *);    //從內(nèi)核中刪除這個設(shè)備 void (*shutdown)(struct platform_device *); // 關(guān)閉設(shè)備 int (*suspend)(struct platform_device *, pm_message_t state);  //掛起 int (*resume)(struct platform_device *);    //喚醒 struct device_driver driver;          //驅(qū)動的通用屬性 const struct platform_device_id *id_table; //設(shè)備ID表 };

        platform_device對象對定義:

        struct platform_device  { const char* name;      //平臺總線中設(shè)備的名字,在平臺總線下有多個設(shè)備,每個設(shè)備都有自己的名稱 intid;              //設(shè)備的排序 struct devicedev;     //所有設(shè)備通用的屬性 u32num_resources;    //設(shè)備資源,如IO等一些外設(shè)等的個數(shù) struct resource* resource; //設(shè)備資源的首地址,和上面的個數(shù)num_resources一起構(gòu)成一個數(shù)組來表示這個資源 const struct platform_device_id*id_entry;  //設(shè)備ID表,表示同一種類型的幾個設(shè)備的ID號,數(shù)組表示。 struct pdev_archdataarchdata; /* arch specific additions *///用戶自定義數(shù)據(jù),擴展數(shù)據(jù) };

        注冊平臺總線驅(qū)動的函數(shù):

        int platform_driver_register(struct platform_driver *drv)

        注冊平臺總線設(shè)備的函數(shù):

        int platform_device_register(struct platform_device *pdev)

        推薦學(xué)習(xí):Linux視頻教程

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产日韩精品欧美一区喷水| 国产精品无码久久久久久| 人人妻人人澡人人爽欧美精品 | 四虎国产精品永久地址99| 久久精品亚洲精品国产色婷| 亚洲国产精品尤物YW在线观看| 国产一区麻豆剧传媒果冻精品| 国产精品专区第二| 国产成人精品日本亚洲11| 无码久久精品国产亚洲Av影片| 日韩美女18网站久久精品| 久久久WWW成人免费精品| 国产精品内射婷婷一级二| 亚洲精品私拍国产福利在线| 国产成人精品亚洲日本在线| 国产精品精品自在线拍| 精品无人码麻豆乱码1区2区| 久久精品一本到99热免费| 久久精品无码一区二区无码| 亚洲Av永久无码精品三区在线| 一级做a爰黑人又硬又粗免费看51社区国产精品视| 亚洲高清国产拍精品青青草原| 国产精品 综合 第五页| 99久久婷婷国产综合精品草原| 亚洲精品高清在线| 欧美日韩精品久久久免费观看| 久久久精品日本一区二区三区| 国产精品V亚洲精品V日韩精品| 国产成人精品日本亚洲专区| 国产观看精品一区二区三区| 最新国产の精品合集| 欧美高清在线精品一区| 777国产盗摄偷窥精品0OOO| 国产成人久久精品麻豆一区| 国产区精品高清在线观看| 九九久久精品无码专区| 欧美精品一区二区久久| 在线观看国产精品日韩av| 亚洲国产精品久久久久久| 亚洲国产精品久久久久| 国产精品免费一区二区三区 |