亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Platform總線、設備與驅動淺析

2019-11-11 07:16:32
字體:
來源:轉載
供稿:網友

什么是platform總線

linux2.6以后的內核驅動模型中,關心總線、設備、驅動這三塊。 總線是連接設備和驅動的,一個設備注冊后會通過總線去找驅動,而驅動注冊后也會通過總線去找對應的設備。 這種設備模型就需要設備和驅動掛接在一個總線上面,對有實際總線的設備和驅動那是沒問題的,但有一些掛接在soc內存空間的外設,則沒有對應的總線來掛接,由此引入了platform總線的概念, 即虛擬總線。

platform總線上面的設備和驅動分別是platform_device 和platform_dirver。設備和驅動通過一些特殊的方式進行匹配,下面進行具體代碼分析。

platform總線的設備信息

描述設備信息的通常有三種方法:平臺文件、模塊和設備樹,這里以模塊方式加載設備信息。 關于設備信息結構體描述在platform_device.h文件中

struct platform_device { /*一般都是通過名字來匹配的*/ const char *name; /*ID是-1的話,則通過過名字來匹配*/ int id; bool id_auto; /*設備信息*/ struct device dev; /*資源信息的大小*/ u32 num_resources; /*這個結構體里面填充相應的設備資源信息,是一個結構體數組*/ struct resource *resource; const struct platform_device_id *id_entry; char *driver_override; /* Driver name to force a match */ /* MFD cell pointer */ struct mfd_cell *mfd_cell; /* arch specific additions */ struct pdev_archdata archdata;};

resource結構體填充—>下面只是舉的一個例子

struct resource res[]={ [0]={ .start = 0x11, .end = 0x22, .flags = IORESOURCE_MEM, /*寄存器信息*/ }, [1]={ .start = 0x33, .end = 0x44, .flags = IORESOURCE_MEM, }, [2]={ .start = 25, .end = 25, .flags = IORESOURCE_IRQ, /*中斷信息*/ },};

一般驅動幾個步驟,定義,初始化,注冊和釋放。上面將設備信息模塊的定義與初始化講完了。 下面說說設備信息模塊的注冊與釋放,同樣他們也在platform_device.h文件中。 注冊

extern int platform_device_register(struct platform_device *);

釋放

extern void platform_device_unregister(struct platform_device *);

platform總線的驅動方法

無論設備信息用何種方式描述,驅動方法都是使用同樣的一種套路。驅動方法一般都是以模塊的方式加載進內核當中的。 同樣驅動方法的編寫離不開四大步:定義,初始化,注冊和釋放。 驅動方法所使用的函數和結構體都在platform_device.h當中。

定義結構體

struct platform_driver { /*設備的注冊和相應的操作在PRobe中完成*/ int (*probe)(struct platform_device *); /*設備的注銷在remove中完成*/ int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *); int (*suspend)(struct platform_device *, pm_message_t state); int (*resume)(struct platform_device *); /*這個結構體重描述設備信息,如名字什么的,總線通過driver結構體的內容進行匹配*/ struct device_driver driver; const struct platform_device_id *id_table; bool prevent_deferred_probe;};

當驅動信息對應字符設備時,字符設備的獲取設備號及注冊的工作在probe里面完成,字符設備的注銷在remove里面完成。而相應的模塊的注冊和模塊的注銷則還是在init和exit函數中完成。

獲取資源 一旦匹配成功,程序就會進入probe當中,在probe中通過獲取資源的一些函數操作可以得到相應的設備信息中的內容。

extern struct resource *platform_get_resource(struct platform_device *, unsigned int, unsigned int);

舉一個實例,對應上面的device中的設備信息

struct resource * res =NULL; res = platform_get_resource(dev,IORESOURCE_MEM, 0); printk("res->start = %#x/n",res->start); printk("res->end = %#x/n",res->end); printk("res->flags = %#x/n",res->flags); /*這里是得到reg信息,然后打印出來*/

注冊及注銷模塊

platform_driver_register(drv)extern void platform_driver_unregister(struct platform_driver *);

以上也只是platform總線的最基礎模塊的編寫,如果在實際工作中還需要編寫對下硬件的操作,對上層提供函數接口的工作。


上一篇:Linux echo命令的使用

下一篇:13.2.2

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美人与性动交a欧美精品| 97国产精品人人爽人人做| 上原亚衣av一区二区三区| 国产精品稀缺呦系列在线| 国产精品亚洲аv天堂网| 精品国产拍在线观看| 精品久久久久久中文字幕一区奶水| 国产精品美女久久久免费| 国产精品在线看| 国产一区二区在线免费视频| 精品国产依人香蕉在线精品| 亚洲精品mp4| 性欧美亚洲xxxx乳在线观看| 国产精品99久久99久久久二8| 亚洲精品少妇网址| 国产成人短视频| 亚洲精品wwww| 热久久视久久精品18亚洲精品| 狠狠躁夜夜躁人人爽超碰91| 97在线视频国产| 国产精品户外野外| 91在线观看免费网站| 欧美日韩国产综合视频在线观看中文| 国产精品一区二区三区免费视频| 欧美黑人一区二区三区| www.99久久热国产日韩欧美.com| 国产亚洲成精品久久| 欧美高跟鞋交xxxxxhd| 亚洲r级在线观看| 欧美色图在线视频| 啪一啪鲁一鲁2019在线视频| 国产精品成人一区二区三区吃奶| 国产精品91免费在线| 国产欧美最新羞羞视频在线观看| 中文字幕亚洲天堂| 亚洲欧美日韩天堂| 日韩在线高清视频| 亚洲精品wwwww| 欧美精品中文字幕一区| 一区二区三区精品99久久| 亚洲欧美日韩国产中文| 日韩精品中文字幕在线| 欧美精品激情blacked18| 久久久国产一区二区| www.日韩免费| 久久久久久久久久久免费精品| 中国日韩欧美久久久久久久久| 在线观看欧美www| 亚洲精品98久久久久久中文字幕| 久久久久久国产精品美女| 国产福利精品在线| 性欧美办公室18xxxxhd| 日韩中文字幕精品| 1769国内精品视频在线播放| 亚洲精品福利在线观看| 国产精品狠色婷| 亚洲理论在线a中文字幕| 久久久久久有精品国产| 亚洲精品视频播放| 91成人福利在线| 国产日韩在线观看av| 国产精品高精视频免费| 精品福利视频导航| 亚洲精品在线不卡| 亚洲综合成人婷婷小说| 国产一区二区视频在线观看| 91国内在线视频| 最近2019中文字幕mv免费看| 色综合色综合网色综合| 精品久久久久久中文字幕大豆网| 91色视频在线导航| 亚洲日韩欧美视频| 久久成人免费视频| 欧美成人精品在线视频| 91高清视频免费观看| 91av在线免费观看视频| 日本在线精品视频| 欧美精品在线免费| 国产福利精品av综合导导航| 欧美做爰性生交视频| 狠狠久久亚洲欧美专区| 欧美精品一区在线播放| 日韩一区二区精品视频| 麻豆一区二区在线观看| 国产精品亚洲美女av网站| 久久久久久久久电影| 懂色av一区二区三区| 96精品久久久久中文字幕| 国产成人一区二区在线| 最近中文字幕mv在线一区二区三区四区| 91精品久久久久久久久中文字幕| 久久久欧美一区二区| 欧美精品videosex性欧美| 国产精品成人免费电影| 国产精品国语对白| 国产精品va在线| 久久久久久有精品国产| 欧美亚洲成人精品| 国产美女精品免费电影| 97在线看免费观看视频在线观看| 亚洲精品国产精品国自产在线| 亚洲精品黄网在线观看| 亚洲性生活视频在线观看| 亚洲最新av网址| 成人欧美在线观看| 欧美一级大片视频| 欧美二区在线播放| 日韩在线视频线视频免费网站| 国内偷自视频区视频综合| 日韩欧美在线免费观看| 久久精品人人做人人爽| 日韩中文视频免费在线观看| 久久久久久久香蕉网| 91精品国产91久久久久久| 欧美国产乱视频| 久久久精品影院| 欧美一级在线播放| 亚洲国产97在线精品一区| 亚洲综合视频1区| 欧美精品电影在线| 国产精品免费视频xxxx| 97成人精品视频在线观看| 亚洲欧美第一页| 亚洲高清色综合| 国产成人自拍视频在线观看| 丰满岳妇乱一区二区三区| 欧美一级高清免费| 国产女人18毛片水18精品| 亚洲在线www| 日韩成人中文电影| 国产精品美女久久久免费| 亚洲性线免费观看视频成熟| 亚洲视频欧洲视频| 日韩精品在线视频| 久久久国产一区| 国产主播在线一区| 91香蕉嫩草神马影院在线观看| 国产精品久久久久999| 日本免费一区二区三区视频观看| 日韩av色在线| 色天天综合狠狠色| 国产精品直播网红| 亚洲国产97在线精品一区| 狠狠色狠狠色综合日日五| 一区二区三区视频免费| 在线播放国产精品| 欧美日韩国产成人在线| 欧美美最猛性xxxxxx| 国产精品高潮呻吟久久av黑人| 欧美中文字幕在线视频| 亚洲国产精品久久久久秋霞蜜臀| 亚洲aⅴ日韩av电影在线观看| 亚洲欧美日韩天堂| 精品国产欧美一区二区五十路| 亚洲精品国产拍免费91在线| 久久精品中文字幕免费mv| 国产精品69精品一区二区三区| 欧美精品午夜视频| 国产91精品最新在线播放| 成人黄色午夜影院| 91社区国产高清| 国产精品尤物福利片在线观看| 国产成+人+综合+亚洲欧美丁香花| 欧美一级bbbbb性bbbb喷潮片|