網(wǎng)絡(luò)消費網(wǎng) >  5G > > 正文
        Linux內(nèi)核中的platform機制
        時間:2021-12-08 22:22:05

        Linux2.6起引入了一套新的驅(qū)動管理和注冊機制platform_device和platform_driver。Linux中大部分的設(shè)備驅(qū)動,都可以使用這套機制,設(shè)備用platform_device表示,驅(qū)動用platform_driver進行注冊。

        本文引用地址:http://www.eepw.com.cn/article/148691.htm

        Linuxplatform. driver機制和傳統(tǒng)的device driver 機制(通過driver_register函數(shù)進行注冊)相比,一個十分明顯的優(yōu)勢在于platform機制將設(shè)備本身的資源注冊進內(nèi)核,由內(nèi)核統(tǒng)一管理,在驅(qū)動程序中使用這些資源時通過platform. device提供的標(biāo)準(zhǔn)接口進行申請并使用。這樣提高了驅(qū)動和資源管理的獨立性,并且擁有較好的可移植性和安全性(這些標(biāo)準(zhǔn)接口是安全的)。platform機制的本身使用并不復(fù)雜,由兩部分組成:platform_device和platfrom_driver。通過platform機制開發(fā)底層設(shè)備驅(qū)動的大致流程如圖所示。

        圖 platform機制開發(fā)驅(qū)動流程

        platform_device結(jié)構(gòu)體用來描述設(shè)備的名稱、資源信息等。該結(jié)構(gòu)被定義在include/linux/platform_device.h中,定義原型如下:

        struct platform_device {

        const char * name; //定義平臺設(shè)備的名稱

        int id;

        struct device dev;

        u32 num_resources;

        struct resource * resource; //定義平臺設(shè)備的資源。

        };

        下面來看一下platform_device結(jié)構(gòu)體中最重要的一個成員struct resource * resource。struct resource被定義在include/linux/ioport.h中,定義原型如下:

        struct resource {

        resource_size_t start; //定義資源的起始地址

        resource_size_t end; //定義資源的結(jié)束地址

        const char *nAME; //定義資源的名稱

        unsigned long flags; //定義資源的類型,比如MEM,IO,IRQ,DMA類型

        struct resource *parent, *sibling, *child; //資源鏈表指針

        };

        通過調(diào)用函數(shù)platform_add_devices()向系統(tǒng)中添加該設(shè)備了,該函數(shù)內(nèi)部調(diào)用platform_device_register( )進行設(shè)備注冊。要注意的是,這里的platform_device設(shè)備的注冊過程必須在相應(yīng)設(shè)備驅(qū)動加載之前被調(diào)用,即執(zhí)行platform_driver_register()之前,原因是驅(qū)動注冊時需要匹配內(nèi)核中所有已注冊的設(shè)備名。

        接下來來看platform_driver結(jié)構(gòu)體的原型定義,在include/linux/platform_device.h中,代碼如下:

        struct platform_driver {

        int (*probe)(struct platform_device *);

        int (*remove)(struct platform_device *);

        void (*shutdown)(struct platform_device *);

        int (*suspend)(struct platform_device *, pm_message_t state);

        int (*suspend_late)(struct platform_device *, pm_message_t state);

        int (*resume_early)(struct platform_device *);

        int (*resume)(struct platform_device *);

        struct device_driver driver;

        };

        內(nèi)核提供的platform_driver結(jié)構(gòu)體的注冊函數(shù)為platform_driver_register(),其原型定義在driver/base/platform.c文件中,具體實現(xiàn)代碼如下:

        int platform_driver_register(struct platform_driver *drv)

        {

        drv->driver.bus = platform_bus_type;

        if (drv->probe)

        drv->driver.probe = platform_drv_probe;

        if (drv->remove)

        drv->driver.remove = platform_drv_remove;

        if (drv->shutdown)

        drv->driver.shutdown = platform_drv_shutdown;

        if (drv->suspend)

        drv->driver.suspend = platform_drv_suspend;

        if (drv->resume)

        drv->driver.resume = platform_drv_resume;

        return driver_register(drv->driver);

        }

        總結(jié),通常情況下只要和內(nèi)核本身運行依賴性不大的外圍設(shè)備,相對獨立的,擁有各自獨自的資源(地址總線和IRQs),都可以用platform_driver實現(xiàn)。如:LCD,網(wǎng)卡、USB、UART等,都可以用platfrom_driver寫,而timer,irq等小系統(tǒng)之內(nèi)的設(shè)備則最好不用platfrom_driver機制。

        關(guān)鍵詞: 機制 platform 內(nèi)核 Linux

        版權(quán)聲明:
            凡注明來網(wǎng)絡(luò)消費網(wǎng)的作品,版權(quán)均屬網(wǎng)絡(luò)消費網(wǎng)所有,未經(jīng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用上述作品。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明"來源:網(wǎng)絡(luò)消費網(wǎng)"。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。
            除來源署名為網(wǎng)絡(luò)消費網(wǎng)稿件外,其他所轉(zhuǎn)載內(nèi)容之原創(chuàng)性、真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考并自行核實。
        熱文

        網(wǎng)站首頁 |網(wǎng)站簡介 | 關(guān)于我們 | 廣告業(yè)務(wù) | 投稿信箱
         

        Copyright © 2000-2020 www.fnsyft.com All Rights Reserved.
         

        中國網(wǎng)絡(luò)消費網(wǎng) 版權(quán)所有 未經(jīng)書面授權(quán) 不得復(fù)制或建立鏡像
         

        聯(lián)系郵箱:920 891 263@qq.com

        備案號:京ICP備2022016840號-15

        營業(yè)執(zhí)照公示信息

        亚洲精品人成无码中文毛片| 亚洲一区电影在线观看| 精品亚洲aⅴ在线观看| 国产成人亚洲综合无码精品| 亚洲无码黄色网址| 亚洲日韩涩涩成人午夜私人影院| 久久亚洲精品高潮综合色a片| 亚洲AV成人一区二区三区观看| 亚洲AV综合色区无码一二三区 | 亚洲最大中文字幕无码网站 | 中文字幕亚洲激情| 国产亚洲精aa成人网站| 伊伊人成亚洲综合人网7777| 亚洲人成在线播放网站| 亚洲国产精品无码久久久秋霞2 | 亚洲国产综合AV在线观看| 亚洲成a人无码亚洲成av无码| 自拍偷自拍亚洲精品偷一| 亚洲国产精品一区二区九九 | 亚洲成年人免费网站| 亚洲一区精品视频在线| 亚洲欧美日韩中文二区 | 亚洲国产日韩一区高清在线| 亚洲日本va午夜中文字幕一区| 久久久久久久亚洲Av无码| 亚洲欧洲高清有无| 亚洲国产精品免费观看| 亚洲日韩国产AV无码无码精品| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲一卡2卡三卡4卡无卡下载| 亚洲av午夜国产精品无码中文字| 亚洲AV无码一区二区三区在线观看| 亚洲日韩在线观看| 国产亚洲精品一品区99热| 久久精品国产亚洲AV电影 | 亚洲国产系列一区二区三区| 久久亚洲中文字幕无码| 国产成人亚洲精品影院| 亚洲不卡中文字幕无码| 亚洲国产成a人v在线| 亚洲av无码片vr一区二区三区|