国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Linux driver編寫思考

系統(tǒng) Linux
如果是先有 device ,那么匹配就是通過遍歷 bus 上的 driver 來進(jìn)行的,反之就是通過遍歷 bus 上的設(shè)備進(jìn)行的,而匹配的前提就是設(shè)備已經(jīng)注冊(cè),并且符合這個(gè)家族的族規(guī),而族規(guī)通常是由 bus 的 match 函數(shù)來控制......

linux 下面對(duì) driver 的定義:

struct device_driver {

const char              * name;

struct bus_type              * bus;

struct completion    unloaded;

struct kobject         kobj;

struct klist             klist_devices;

struct klist_node     knode_bus;

struct module         * owner;

const char             * mod_name;  /* used for built-in modules */

struct module_kobject    * mkobj;

int   (*probe)  (struct device * dev);

int   (*remove)      (struct device * dev);

void (*shutdown)   (struct device * dev);

int   (*suspend)      (struct device * dev, pm_message_t state);

int   (*resume)       (struct device * dev);

unsigned int multithread_probe:1;

};

我們一個(gè)個(gè)來看,

Name :就是這個(gè) driver 的名字;

Bus :就是這個(gè) driver 是掛在上面 bus 上面的;

Unloaded :這個(gè)以后再討論;

Kobj :這個(gè)可以理解為 driver 結(jié)構(gòu)的父親,如果從面向?qū)ο蟮慕嵌葋砜吹脑挘?/P>

Klist_devices: 這個(gè)就是由此 driver 驅(qū)動(dòng)的設(shè)備列表;

Knode_bus: 這個(gè)就是用來掛在它說屬的 bus 鏈表上的節(jié)點(diǎn),順著這個(gè)鏈表就可以找到所有的掛在這個(gè) bus 上的所有的 driver ;

Owner :這個(gè) driver 所屬的模塊;

Mod_name: 模塊名字;

mkobj: 模塊的頂層描述;

probe :這個(gè)是很關(guān)鍵的函數(shù),用來初始化此 driver 驅(qū)動(dòng)的硬件,還有其它能夠正常為應(yīng)用層提供服務(wù)說需要提前做的事都需要在這里做;

remove :這個(gè)就是移除的時(shí)候做的事情;

suspend :這個(gè)應(yīng)該是睡眠的時(shí)候做的事情,也就是說上層通過這個(gè)函數(shù)實(shí)現(xiàn)對(duì)硬件的電源策略控制;

resume :這個(gè)就是從睡眠中醒來需要對(duì)硬件所做的事都需要在這里做;

multithread_probe :是否啟用多線程 probe ;

分析完了 driver 的結(jié)構(gòu),我們看看為什么需要這樣的設(shè)計(jì),也就是說,如果我們自己需要實(shí)現(xiàn)一套架構(gòu)用來實(shí)現(xiàn)同樣的功能,我們需要做什么呢?

Driver 應(yīng)該提供的功能

driver 應(yīng)該提供哪些功能呢?

1,  為應(yīng)用層使用 driver 提供接口;

這個(gè)應(yīng)該是很好理解的,不可能讓每個(gè)上層軟件的作者自己寫驅(qū)動(dòng)來訪問硬件;所以必須要抽象出一套接口,但是需要哪些接口呢?

Linux 的 driver 實(shí)現(xiàn)很有意思,把任何東西都抽象成文件,包括硬件,這樣對(duì)硬件的操作也就只需提供 vfs 所需的一套接口,當(dāng)然其實(shí)這些接口的類型在很大程度上劃分了 driver 的類型,而這些接口也可以提供其它的形式,比如網(wǎng)卡就不提供這些接口;

Open :打開,也就是打開這個(gè)設(shè)備,這只是抽象的概念,很多硬件設(shè)備不存在這樣的物理動(dòng)作,比如門,我們才說打開,當(dāng)然如果理解所謂“打開心扉”也就很好理解這里的 driver 所抽象出的打開了;先前所說硬件的初始化可以在 probe 函數(shù)里面做,當(dāng)然我想有些動(dòng)作放在 open 里面做也可以的,但是必須要考慮的是, open 是可能出現(xiàn)許多個(gè)進(jìn)程來訪問的,或者你自己要上鎖或者你就要考慮可重入性,也就是說如果一些動(dòng)作只能做一次,那么顯然放在 open 里面來做就不合適了。

Close :這個(gè)和 open 相反的動(dòng)作,但是這個(gè) close 是上層才有的一個(gè)概念,在驅(qū)動(dòng)里面用來一個(gè)叫 release 的接口實(shí)現(xiàn),至于 close 到 release 之間的轉(zhuǎn)換就需要去看看文件系統(tǒng)這層的實(shí)現(xiàn)了。

#p#

Read :這就是讀取數(shù)據(jù)了,沒什么好說,比如串口,比如 touch panel ;

Write :這就是寫了,也就是往設(shè)備里面寫數(shù)據(jù);

其它的一些對(duì)上的接口 …. 就不討論了;

而 driver 還必須要提供其它的接口:那就是做為 linux driver 本身說必須要提供的接口,這些接口通常是內(nèi)核自身所調(diào)用的;

那就是

Probe :這個(gè)函數(shù)很關(guān)鍵,它作為一個(gè)橋梁連接設(shè)備和 driver ,并且必須要對(duì)硬件進(jìn)行初始化,以便在以后的用戶接口調(diào)用的時(shí)候設(shè)備能正常工作;從軟件的角度說,許多空間的分配等都在這里做,通過 dev_set_drvdata 和 dev_get_drvdata 設(shè)置和獲取相應(yīng)的數(shù)據(jù);

Remove :這個(gè)函數(shù)和上面這個(gè)函數(shù)是相反的,也就是負(fù)責(zé)清理掃尾的工作,負(fù)責(zé)釋放數(shù)據(jù)結(jié)構(gòu),停止硬件等;

Suspend :這個(gè)是在睡眠的時(shí)候調(diào)用的,在這里就必須要進(jìn)行功耗控制;

Resume :這個(gè)就是喚醒的時(shí)候調(diào)用的,它需要執(zhí)行相應(yīng)的恢復(fù)動(dòng)作,以便硬件能正常工作;

2,  實(shí)現(xiàn)對(duì)硬件設(shè)備的訪問控制;

只提供接口不負(fù)責(zé)實(shí)現(xiàn),就是所謂的“銀樣蠟槍頭 ” ,所以驅(qū)動(dòng)最復(fù)雜的地方在于如何控制硬件實(shí)現(xiàn)我們想實(shí)現(xiàn)的功能;而這些具體的實(shí)現(xiàn)通常就包含在給上層提供的接口中;而另外一方面一個(gè)驅(qū)動(dòng)要實(shí)現(xiàn)某項(xiàng)功能很多時(shí)候不是自己獨(dú)立實(shí)現(xiàn)的,而是依賴于其它的模塊,比如 WIFI 驅(qū)動(dòng),在我們的平臺(tái)上,是通過 sdio 口連接的,而 sdio 口是 mmc controller 提供的,而 mmc 本身又是通過 gpio 口實(shí)現(xiàn)的,換句話說,如果要 wifi 能正常工作,就必須要 mmc 這一套能正常工作;那么就需要先配置 gpio 口,再移植 mmc 驅(qū)動(dòng),***才是 wifi 驅(qū)動(dòng),而 wifi 芯片本身說不定還需要其它的動(dòng)作才能正常,比如上電等等;

Driver 和設(shè)備之間的連接

如果說 driver 就是由 struct device_driver 來描述,而設(shè)備也是有 struct device 來描述的話,那么如何描述 driver 和 driver 所驅(qū)動(dòng)的設(shè)備這種關(guān)系呢?也就是說如果是父子,或夫妻關(guān)系的話,他們是如何相認(rèn)的,又是如何維持這種紐帶的?一個(gè)設(shè)備通常由一個(gè) driver 驅(qū)動(dòng),而一個(gè) driver 有時(shí)候可以驅(qū)動(dòng)多個(gè)設(shè)備(這也許是在美好的一夫多妻制時(shí)代)

1,  家族的概念

每個(gè)人都誕生于一個(gè)家庭,而由一系列有血緣關(guān)系的家庭又組成家族,我想 bus 的概念有點(diǎn)類似家族;

2,  設(shè)備的誕生

當(dāng)一個(gè)設(shè)備通過 device_add 的方式調(diào)用的話,對(duì)它所屬的家族來說意味著一個(gè)新的小孩誕生了;如果這時(shí)候它的配偶已經(jīng)由上帝指定的話,意味著它的配偶已經(jīng)住進(jìn)了它們的家族(掛在了 bus 上),那么上帝就會(huì)把它的配偶 driver 指向這個(gè) device 完成婚姻,通常這時(shí)候就會(huì)調(diào)用 driver 提供的 probe 函數(shù)進(jìn)行一系列的初始化操作,這就像丈夫?qū)ζ拮舆M(jìn)行思想教育一樣;

3,  driver 的誕生

當(dāng)一個(gè) driver 調(diào)用 driver_register 的時(shí)候,也就宣布著新的孩子誕生了,如果它的配偶已經(jīng)住進(jìn)他們的家族,也就是說如果驅(qū)動(dòng)的設(shè)備已經(jīng)掛在了總線上,那么就可以結(jié)婚了(估計(jì)他們是屬于一出生就比較成熟的類型),同樣這時(shí)候就要調(diào)用 driver 的 probe 函數(shù)進(jìn)行初始化工作了;

4,  人口登記

不管是男孩還是女孩,對(duì)政府來說都是 kobject ,所以一旦有孩子誕生不管是男是女都會(huì)調(diào)用 kobject_add 登記在案,這樣政府就可以完全掌控所有的信息;

5,  配偶的尋找

如果是先有 device ,那么匹配就是通過遍歷 bus 上的 driver 來進(jìn)行的,反之就是通過遍歷 bus 上的設(shè)備進(jìn)行的,而匹配的前提就是設(shè)備已經(jīng)注冊(cè),并且符合這個(gè)家族的族規(guī),而族規(guī)通常是由 bus 的 match 函數(shù)來控制,而很多時(shí)候都是比較設(shè)備的名字和 driver 的名字是否相同(這個(gè)比結(jié)婚要比的東西簡(jiǎn)樸許多啊,現(xiàn)在結(jié)婚比的是 money )當(dāng)然還有其它許多的匹配方式,如果通過這個(gè)測(cè)試就可以調(diào)用 driver 提供的 probe 函數(shù)進(jìn)行初始化了;

這樣的話,設(shè)備和 driver 就可以連接起來了,有了這樣的人口登記和家族聯(lián)系,就可以實(shí)現(xiàn)諸如睡眠喚醒這樣的功能了。

【編輯推薦】

  1. linux程序開發(fā)入門
  2. 寫給Linux初學(xué)者的話
  3. 新手看招:在Linux操作系統(tǒng)下創(chuàng)建鎖文件
責(zé)任編輯:趙寧寧 來源: 百度博客
相關(guān)推薦

2009-11-30 18:00:33

Suse Linux

2023-05-20 17:45:25

LinuxShell

2009-10-26 12:17:03

linux腳本編寫

2011-03-01 09:30:27

LinuxScreenletPython

2023-06-01 17:23:26

AI模型

2010-02-25 10:10:31

2009-11-24 14:21:17

2011-01-10 18:21:38

linux編寫程序

2017-08-11 17:20:07

LinuxShell

2013-11-11 09:26:50

編程思考

2022-01-23 22:36:39

Linux

2009-11-09 09:56:46

Driver Stud

2017-06-27 14:49:20

深度學(xué)習(xí)機(jī)器學(xué)習(xí)

2022-03-25 10:16:40

CentOSLinux開源

2022-05-15 22:34:32

SPI 控制器SPI 子系統(tǒng)

2018-02-23 10:50:34

Linuxudev規(guī)則

2019-08-14 08:03:49

LinuxShell腳本web服務(wù)

2012-11-08 11:19:38

2020-09-17 09:37:36

云計(jì)算公共云

2013-09-12 15:51:04

編程文化垃圾代碼移動(dòng)開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久悠悠精品综合网| 欧美特黄aaaaaaaa大片| 国产成人av自拍| 国产精品女视频| 日韩欧乱色一区二区三区在线 | 不卡中文一二三区| 欧美黄色成人网| 国产激情欧美| 亚洲视频在线看| 牛牛精品视频在线| 91麻豆精品国产91久久久| 天堂成人在线| 同产精品九九九| 亚洲永久精品免费| 伊人夜夜躁av伊人久久| 久久这里只精品| 中文字幕av不卡| 欧美日韩亚洲一二三| aaa欧美日韩| 久久99中文字幕| www.亚洲国产| 日韩网址在线观看| 久久综合色一综合色88| 不卡影院一区二区| 欧美韩国日本一区| 国产免费网址| 亚洲成精国产精品女| 有色激情视频免费在线| 一个色在线综合| 天堂аⅴ在线最新版在线 | 日韩av免费在线| 欧美jizz19性欧美| 欧洲亚洲免费视频| 91精品国产成人观看| 丁香五月网久久综合| 1024日韩| 日本视频一区二区在线观看| 美腿丝袜在线亚洲一区| 日韩video| 久久美女艺术照精彩视频福利播放| 欧美大尺度做爰床戏| 亚洲欧美一区二区久久| 日本福利在线观看| 欧美一级久久久| 欧美日韩视频免费观看| 美女999久久久精品视频| 成人另类视频| 国产精品久久久久久久久粉嫩av | 久久久久久久久久久免费| youjizzjizz亚洲| 亚洲曰本av电影| 美国三级日本三级久久99| 欧美成人免费在线| 成人网男人的天堂| 黑巨人与欧美精品一区| 亚洲欧美日韩久久| 国产高清在线看| 日韩精品在线播放| 在线日韩成人| 婷婷六月综合网| 你懂的在线视频| jlzzjlzz亚洲日本少妇| 欧美少妇一区| 成人自拍在线| 不卡av在线播放| 男捅女免费视频| 欧美性xxxxx极品| 天堂电影在线| va亚洲va日韩不卡在线观看| 国产精品视频yy9099| 国产区在线看| 99麻豆久久久国产精品免费| 久久久久资源| 综合激情视频| 正在播放亚洲| 久久综合五月婷婷| 91在线看网站| av在线不卡网| sese一区| 亚洲美女久久久| 欧美日韩久久精品| 中文字幕日韩一区二区三区不卡| 中文字幕人成不卡一区| 伦理av在线| 国产欧美一区二区三区久久人妖| 国产精品一区二区免费不卡 | 在线观看一区二区视频| 色8久久久久| 狠狠色噜噜狠狠狠狠色吗综合| www久久精品| 欧美人动性xxxxz0oz| 国产精品精品久久久| 成人在线视频一区二区| 91高清在线视频| 日韩免费观看视频| www.99精品| 福利写真视频网站在线| 91精品在线一区| 国产午夜精品久久久久久免费视| 色网在线观看| 亚洲影院污污.| 国产精品护士白丝一区av| 中文日产幕无线码一区二区| 国产精品嫩草在线观看| 亚洲男同性视频| 欧美久久久网站| 伊人狠狠色丁香综合尤物| 欧美日韩免费视频| 亚洲人metart人体| 久久久亚洲精华液精华液精华液| 韩剧1988在线观看免费完整版| 国产精品91一区二区| 成人影院在线视频| 欧美在线视频二区| 亚洲成人久久影院| 99re91这里只有精品| 久色视频在线播放| 亚洲性夜色噜噜噜7777| 韩日成人在线| 欧美jizzhd欧美| 成人黄在线观看| 亚洲色图在线播放| 亚洲最新无码中文字幕久久| 亚洲在线欧美| 欧美日韩aaaaa| 久久一区二区三区喷水| 日本成人黄色网| 亚洲欧美日本另类| 九色综合狠狠综合久久| 免费在线观看黄| 91亚洲国产精品| 午夜精品久久久久久久| 天天做天天爱天天综合网2021| 色琪琪免费视频网站| 亚洲3p在线观看| 亚洲精品乱码久久久久久| 日韩视频一区二区三区四区| 免费网站在线观看视频| 日韩成人在线视频| 日韩三级中文字幕| 国产小视频免费在线观看| 韩国一区二区电影| 91视频一区二区| 国产原创一区| 50度灰在线观看| 亚洲成人精品久久| 日韩成人精品在线| 日本美女在线中文版| 丁香婷婷久久久综合精品国产| 在线看一区二区| 综合亚洲视频| 三级在线播放| 成人免费91在线看| 成人免费视频久久| 欧美韩国日本不卡| 99久久99九九99九九九| 亚洲国产精品三区| 久久久久久久久久婷婷| 国产日韩欧美高清在线| 亚洲性视频在线| 天天色综合4| 福利精品视频| 3d成人h动漫网站入口| 亚洲精品美女91| 亚洲妇熟xxxx妇色黄| 亚洲第一av网| 色先锋资源久久综合| 欧美性感美女一区二区| 少妇高潮露脸国语对白| 久久精品人人做人人爽| 亚洲欧美日韩久久| 成人嘿咻视频免费看| 日韩一级黄色大片| 久久久精品综合| 国产一区二区免费看| 99视频精品在线| 亚洲欧美日韩在线播放| 亚洲一本大道在线| 日韩欧美在线观看一区二区三区| 亚洲成人久久电影| 欧美黄色免费网站| 91久久久久久| caoporn国产精品免费公开| 精品国产一区二区三区久久久蜜月 | 亚洲成年人影院| 最新成人av网站| 国产一区二区三区综合| 99视频有精品| 色av综合在线| 国产一区二区三区日韩欧美| 2019精品视频| 国产欧美一区二区三区视频| 午夜精品亚洲一区二区三区嫩草| 亚洲综合在线播放| 精品av久久707| 亚洲午夜激情av| 国产激情91久久精品导航| 今天的高清视频免费播放成人| 日韩欧美国产精品综合嫩v| 精品福利在线|