久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團(tuán)論壇Linux專(zhuān)區(qū)Linux驅(qū)動(dòng)開(kāi)發(fā) → Linux內(nèi)核修煉之道》 之 高效學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)


  共有9494人關(guān)注過(guò)本帖樹(shù)形打印

主題:Linux內(nèi)核修煉之道》 之 高效學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個(gè)性首頁(yè) | 博客 | 信息 | 搜索 | 郵箱 | 主頁(yè) | UC


加好友 發(fā)短信
等級(jí):青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊(cè):2010-11-12 11:08:23
Linux內(nèi)核修煉之道》 之 高效學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)  發(fā)帖心情 Post By:2010-11-24 11:45:48

 前一篇我們談到了如何高效學(xué)習(xí)Linux內(nèi)核,現(xiàn)在我們開(kāi)始另外一個(gè)話(huà)題,就是如何高效學(xué)習(xí) linux 驅(qū)動(dòng)開(kāi)發(fā)。至于為什么會(huì)選擇這樣一個(gè) topic ,主要是基于這樣兩個(gè)原因:

第一個(gè)原因是:目前幾乎所有的驅(qū)動(dòng)開(kāi)發(fā)方面的參考書(shū),內(nèi)容結(jié)構(gòu)都是先介紹介紹什么是 linux 驅(qū)動(dòng),它分為哪些種類(lèi),然后是各種類(lèi)型設(shè)備的驅(qū)動(dòng)程序的內(nèi)容細(xì)節(jié)。大都是只注重各種驅(qū)動(dòng)本身的細(xì)節(jié),而沒(méi)有站在一個(gè)全局整體的角度講解一下驅(qū)動(dòng)開(kāi)發(fā)的方法。這樣導(dǎo)致的后果就是,大多數(shù)的驅(qū)動(dòng)開(kāi)發(fā)者雖然可以正確的編寫(xiě)驅(qū)動(dòng)程序,但往往都是只知其一不知其二,知其然而不知其所以然。

第二個(gè)原因是:目前很多驅(qū)動(dòng)開(kāi)發(fā)者,即使是已經(jīng)有多年經(jīng)驗(yàn)的開(kāi)發(fā)者,在開(kāi)發(fā)驅(qū)動(dòng)的時(shí)候也就是填充填充 driver 的結(jié)構(gòu)體,對(duì)于比較成熟的平臺(tái),就是網(wǎng)上找個(gè)類(lèi)似的驅(qū)動(dòng)修改一下,即使寫(xiě)十個(gè)百個(gè)千個(gè)驅(qū)動(dòng),也就是對(duì)某些硬件比較熟,遇到全新的芯片全新的平臺(tái)就束手無(wú)策。應(yīng)該說(shuō)這樣對(duì)驅(qū)動(dòng)的理解是很有限的。這也是目前linux 驅(qū)動(dòng)開(kāi)發(fā)領(lǐng)域的現(xiàn)狀。

我們首先認(rèn)識(shí)一下 linux 驅(qū)動(dòng)的基本面,我們認(rèn)識(shí)一個(gè)新事物的的第一件事就是了解它的一些基本信息,就像我們?nèi)伺c人之間互相認(rèn)識(shí)首先也是通過(guò)個(gè)人的基本信息一樣。

linux 驅(qū)動(dòng)在本質(zhì)上就是一種軟件程序,上層軟件可以在不用了解硬件特性的情況下,通過(guò)驅(qū)動(dòng)提供的接口,和計(jì)算機(jī)硬件進(jìn)行通信。

系統(tǒng)調(diào)用是內(nèi)核和應(yīng)用程序之間的接口,而驅(qū)動(dòng)程序是內(nèi)核和硬件之間的接口,也就是內(nèi)核和硬件之間的橋梁。它為應(yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以象操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。

linux 驅(qū)動(dòng)程序是內(nèi)核的一部分,管理著系統(tǒng)中的設(shè)備控制器和相應(yīng)的設(shè)備。它主要完成這么幾個(gè)功能:對(duì)設(shè)備初始化和釋放;傳送數(shù)據(jù)到硬件和從硬件讀取數(shù)據(jù);檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。

一般來(lái)說(shuō),一個(gè)驅(qū)動(dòng)可以管理一種類(lèi)型的設(shè)備。例如不同的 U 盤(pán)都屬于 mass storage 設(shè)備,我們不需要為每一個(gè) U 盤(pán)編寫(xiě)驅(qū)動(dòng),而只需要一個(gè)驅(qū)動(dòng)就可以管理所有這些 mass storage 設(shè)備。

為方便我們加入各種驅(qū)動(dòng)來(lái)支持不同的硬件,內(nèi)核抽象出了很多層次結(jié)構(gòu),這些層次結(jié)構(gòu)是 linux 設(shè)備驅(qū)動(dòng)的上層。它們抽象出各種的驅(qū)動(dòng)接口,驅(qū)動(dòng)只需要填寫(xiě)相應(yīng)的回調(diào)函數(shù),就能很容易把新的驅(qū)動(dòng)添加到內(nèi)核。

一般來(lái)說(shuō), linux 驅(qū)動(dòng)可以分為三類(lèi),就是塊設(shè)備驅(qū)動(dòng),字符設(shè)備驅(qū)動(dòng)和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)。塊設(shè)備的讀寫(xiě)都有緩存來(lái)支持,并且塊設(shè)備必須能夠隨機(jī)存取。塊設(shè)備驅(qū)動(dòng)主要用于磁盤(pán)驅(qū)動(dòng)器。

而字符設(shè)備的 I/O 操作沒(méi)有通過(guò)緩存。字符設(shè)備操作以字節(jié)為基礎(chǔ),但不是說(shuō)一次只能執(zhí)行一個(gè)字節(jié)操作。例如對(duì)于字符設(shè)備我們可以通過(guò) mmap 一次進(jìn)行大量數(shù)據(jù)交換。字符設(shè)備實(shí)現(xiàn)比較簡(jiǎn)單和靈活。

    網(wǎng)絡(luò)設(shè)備在 Linux 里做專(zhuān)門(mén)的處理。 Linux 的網(wǎng)絡(luò)系統(tǒng)主要是基于 BSD  socket 機(jī)制。網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)為網(wǎng)絡(luò)操作提供接口,管理網(wǎng)絡(luò)數(shù)據(jù)的接送和收發(fā)。為了屏蔽網(wǎng)絡(luò)環(huán)境中物理網(wǎng)絡(luò)設(shè)備的多樣性, Linux 對(duì)所有的物理設(shè)備進(jìn)行抽象并定義了一個(gè)統(tǒng)一的概念,稱(chēng)之為接口( interface )。所有對(duì)網(wǎng)絡(luò)硬件的訪問(wèn)都是通過(guò)接口進(jìn)行的,接口對(duì)上層協(xié)議提供一致化的操作集合來(lái)處理基本數(shù)據(jù)的發(fā)送和接收,對(duì)下層屏蔽硬件差異。它與字符設(shè)備及塊設(shè)備不同之處其一就是網(wǎng)絡(luò)接口不存在于 Linux 的設(shè)備文件系統(tǒng) /dev/ 中。

和前一篇的介紹一樣,看完外表,我們?cè)倏磧?nèi)涵,就是 Linux 驅(qū)動(dòng)的工作流程。大概有四個(gè)部分:使用 insmod 加載,模塊的初始化,進(jìn)行設(shè)備操作,使用 rmmod 卸載。

Linux 驅(qū)動(dòng)有兩種存在形式,一種是直接編譯進(jìn)內(nèi)核,就是我們?cè)谂渲脙?nèi)核的時(shí)候,在相應(yīng)選項(xiàng)上選 Y ,另外一種就是編譯成模塊,按需加載和卸載。通常我們使用insmod 命令完成模塊的加載,在加載時(shí)還可以指定模塊參數(shù)。另外一個(gè)常用的加載工具是 modprobe ,它與 insmod 的不同在于它會(huì)檢查模塊之間的依賴(lài)關(guān)系,將該模塊依賴(lài)的模塊也加載到內(nèi)核。

每個(gè)驅(qū)動(dòng)都有自己的初始化函數(shù),完成一些新功能的注冊(cè),這個(gè)初始化函數(shù)只是在初始化的時(shí)候被使用。在 linux 系統(tǒng)里,設(shè)備以文件的形式存在,應(yīng)用程序可以通過(guò) open  read 等函數(shù)操作設(shè)備,通過(guò)設(shè)備文件實(shí)現(xiàn)對(duì)設(shè)備的訪問(wèn)。設(shè)備不再使用時(shí),我們使用 rmmod 命令來(lái)卸載它,卸載的過(guò)程會(huì)調(diào)用到驅(qū)動(dòng)的推出函數(shù),每個(gè)驅(qū)動(dòng)都必須有一個(gè)退出函數(shù),沒(méi)有的話(huà),內(nèi)核就不會(huì)允許去卸載它。

在對(duì) linux 驅(qū)動(dòng)的外表和內(nèi)涵都有了一個(gè)初步的認(rèn)識(shí)之后,我們來(lái)看看作為一個(gè)驅(qū)動(dòng)開(kāi)發(fā)者,我們需要注意哪些問(wèn)題。

首先,對(duì)模塊機(jī)制的了解是開(kāi)發(fā) linux 驅(qū)動(dòng)的基礎(chǔ),因?yàn)槲覀兙帉?xiě)驅(qū)動(dòng)的過(guò)程也就是在編寫(xiě)一個(gè)內(nèi)核模塊的過(guò)程。早期版本的內(nèi)核是整體式的,也就是說(shuō)所有的部分都靜態(tài)地連接成一個(gè)很大的執(zhí)行文件。但是現(xiàn)在的內(nèi)核采用的是新的機(jī)制,即模塊機(jī)制:許多功能包含在模塊內(nèi),當(dāng)你需要時(shí)可以使用 insmod 去擁抱它,將它動(dòng)態(tài)地載入到內(nèi)核里,當(dāng)你不需要時(shí),則可以使用 rmmod 將它一腳踢開(kāi)。這就使得 kernel 的內(nèi)核很小,而且在運(yùn)行的時(shí)候可以不用 reboot 就能夠載入和替代模塊。

其次,我們要注重對(duì)設(shè)備模型的理解。其實(shí)從 2.6 內(nèi)核開(kāi)始,隨著設(shè)備模型的出現(xiàn),驅(qū)動(dòng)的開(kāi)發(fā)就不再是個(gè)困難的問(wèn)題,毫不夸張得說(shuō),理解了設(shè)備模型,再去看那些五花八門(mén)的驅(qū)動(dòng)程序,你會(huì)發(fā)現(xiàn)自己站在了另一個(gè)高度,從而有了一種俯視的感覺(jué),就像鳳姐俯視知音和故事會(huì),韓峰同志俯視女下屬。不過(guò)貌似大部分驅(qū)動(dòng)開(kāi)發(fā)者都沒(méi)意識(shí)到這個(gè)問(wèn)題。

最后,是要養(yǎng)成使用協(xié)議的 spec 、設(shè)備的 datasheet 、內(nèi)核參考代碼去解決問(wèn)題的習(xí)慣,而不是一碰到問(wèn)題就到處尋找所謂的牛人去問(wèn)怎么解決。

中間的那些內(nèi)容和前面精華版的博文里差不多,就不貼了,…………


支持(0中立(0反對(duì)(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

Linux內(nèi)核修煉之道》 之 高效學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
风间由美一区二区av101 | 亚洲图片激情小说| 成人看片黄a免费看在线| 欧美日本免费一区二区三区| 美国十次了思思久久精品导航| 色视频成人在线观看免| 奇米影视7777精品一区二区| 91九色最新地址| 理论电影国产精品| 欧美精品日韩综合在线| 懂色av一区二区夜夜嗨| 精品国产成人系列| aa成人免费视频| 亚洲欧美色一区| 日韩三级在线播放| 日韩av二区在线播放| 欧美裸体bbwbbwbbw| 国产91精品露脸国语对白| 久久综合久久综合久久综合| 国产传媒一区二区| 一二三四社区欧美黄| 欧美综合一区二区| 国产精品伊人色| 国产午夜精品一区二区三区视频| 国产精品12| 亚洲成人免费观看| 在线成人免费观看| 91九色露脸| 夜夜嗨av一区二区三区四季av | 麻豆精品在线观看| 日韩欧美一二三| 国产一区免费观看| 偷窥少妇高潮呻吟av久久免费| 欧美亚洲国产一区在线观看网站 | 亚洲男人电影天堂| 色婷婷一区二区| 成人永久aaa| 中文字幕制服丝袜一区二区三区 | 99re在线视频上| 亚洲青青青在线视频| 伊人久久av导航| 国产成人午夜精品影院观看视频 | 亚洲国产日韩综合一区| 国产美女一区二区| 国产精品久久久久久久裸模| 一本一道久久a久久精品 | 亚洲中国最大av网站| 欧美性大战久久久久久久蜜臀| 国产91精品一区二区麻豆网站 | 欧美体内she精视频| **亚洲第一综合导航网站| 亚洲在线观看免费视频| 欧美一区日本一区韩国一区| 国新精品乱码一区二区三区18| 日本一不卡视频| 久久久久久电影| 伊人情人网综合| 91久久精品一区二区别| 日韩精品视频网| 国产婷婷色一区二区三区四区| 亚洲一区二区高清视频| 99久久久免费精品国产一区二区| 亚洲一区av在线| 精品久久久三级丝袜| 神马影院午夜我不卡影院| 国产成人免费视频网站| 一区二区三区高清在线| 日韩欧美高清一区| 在线一区亚洲| 国产精品制服诱惑| 国产剧情一区在线| 亚洲超碰精品一区二区| 国产日本亚洲高清| 欧美日韩高清一区二区| 欧美精品一区在线| 91在线精品一区二区| 久久国产精品一区二区| 亚洲视频狠狠干| 精品播放一区二区| 91国偷自产一区二区开放时间 | 看电影不卡的网站| 亚洲欧美日韩在线| 久久久噜噜噜久久人人看| 欧美性色黄大片| 日韩国产欧美精品| 翡翠波斯猫1977年美国| 国产成人综合在线| 日本在线观看不卡视频| 亚洲图片你懂的| 久久久久久久久免费| 91精品啪在线观看国产60岁| 一区二区三区国| 免费av在线一区二区| 91网站最新地址| 国产成人在线视频网址| 日本欧美在线观看| 一区二区三区精密机械公司| 久久久久久99久久久精品网站| 777久久久精品| 日本韩国一区二区| 日韩精品资源| 蜜桃av久久久亚洲精品| 粉嫩av免费一区二区三区| 成人免费福利片| 国产一二三精品| 黄色成人免费在线| 青青草国产成人99久久| 亚洲第一激情av| 一区二区三区高清不卡| **网站欧美大片在线观看| 国产亚洲成av人在线观看导航| 日韩欧美高清一区| 日韩一区二区中文字幕| 欧美剧在线免费观看网站| 在线观看免费成人| 色成年激情久久综合| 夜夜爽99久久国产综合精品女不卡| 欧美午夜免费| 欧美一区视久久| 日韩久久不卡| 亚洲精品免费在线看| 色噜噜一区二区| 日韩av免费电影| 日韩国产伦理| 永久免费精品视频网站| 中文字幕一区综合| 在线不卡视频一区二区| 中文字幕中文字幕99| 日本韩国一区二区三区视频| 一本大道久久精品懂色aⅴ| 在线观看福利一区| 欧洲av在线精品| 欧美日韩国产高清一区二区三区| 欧美日产在线观看| 91精品久久久久久蜜臀| 欧美一区二区大片| 精品国产百合女同互慰| 国产偷国产偷亚洲高清人白洁 | 色一情一伦一子一伦一区| 中文字幕中文字幕在线中心一区 | 99麻豆久久久国产精品免费优播| 成人av网站在线观看免费| 91在线视频播放| 成人动漫在线观看视频| 黄色99视频| 亚洲精品中文字幕在线 | www.亚洲国产| av一区二区三区在线观看| 精品国产乱码久久久久| 日韩国产精品一区二区三区| 在线观看亚洲视频啊啊啊啊| 欧美系列在线观看| 日韩免费高清av| 国产精品伦一区| 亚洲一区视频在线| 美女视频黄a大片欧美| 国产精品77777竹菊影视小说| 94-欧美-setu| 欧美黑人3p| 91福利在线观看| 欧美岛国在线观看| 国产精品第五页| 日韩精品亚洲一区| 国产成人亚洲精品狼色在线| 成人三级在线| 亚洲高清视频在线观看| 欧美精品日韩精品| 欧美经典三级视频一区二区三区| 亚洲一区二区偷拍精品| 狠狠色狠狠色综合| 福利视频一区二区三区| 日韩视频精品| 欧美一区二区三区在线电影| 国产精品国产三级国产aⅴ中文| 亚洲国产一区二区三区 | 国产精品久久精品日日| 亚洲高清免费视频| 国产成人午夜高潮毛片| 国产久一道中文一区| 中文字幕剧情在线观看一区| 日韩午夜中文字幕| 亚洲三级电影网站| 激情综合一区二区三区| 国产精品日韩高清| 91福利资源站| 国产精品亲子伦对白| 免费成人结看片| 国产乱码精品一区二区三区中文| 色婷婷国产精品久久包臀 | 亚洲精品成人久久久998| 日韩一区二区在线观看视频播放| 亚洲欧美一区二区三区极速播放 | 欧美国产丝袜视频| 日本美女视频一区二区| 999日本视频| 色久综合一二码| 国产精品视频你懂的| 久久超碰97中文字幕| 久久国产精品亚洲va麻豆| 欧美高清视频www夜色资源网|