国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

查看: 2533|回復(fù): 0
打印 上一主題 下一主題

不再害怕驅(qū)動(dòng)!Linux字符設(shè)備驅(qū)動(dòng)詳解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2017-5-15 10:40:09 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
不再害怕驅(qū)動(dòng)!Linux字符設(shè)備驅(qū)動(dòng)詳解

現(xiàn)實(shí)世界中存在著大量的設(shè)備,操作系統(tǒng)要求能夠控制和管理這些硬件,而驅(qū)動(dòng)就能幫助實(shí)現(xiàn)管理控制。

下面我們從不同的角度理解一下驅(qū)動(dòng):

驅(qū)動(dòng)(Device Driver)相當(dāng)于硬件的接口,它維護(hù)著我們的硬件,操作系統(tǒng)通過(guò)驅(qū)動(dòng)這個(gè)接口才能控制硬件。

驅(qū)動(dòng)本身就是一段代碼,自己不會(huì)主動(dòng)運(yùn)行,而是被操作系統(tǒng)調(diào)用執(zhí)行。

驅(qū)動(dòng)是內(nèi)核的一部分,運(yùn)行在內(nèi)核空間。

驅(qū)動(dòng)和應(yīng)用程序有什么關(guān)系?

應(yīng)用程序在運(yùn)行中往往要用到硬件設(shè)備,但應(yīng)用程序不能直接調(diào)用驅(qū)動(dòng)程序,因此要執(zhí)行系統(tǒng)調(diào)用陷入內(nèi)核態(tài)才能調(diào)用驅(qū)動(dòng)。

寫(xiě)驅(qū)動(dòng)需要我們懂哪些知識(shí)?

1,需要熟悉Linux的內(nèi)核機(jī)制
2,驅(qū)動(dòng)程序與應(yīng)用程序的接口
3,需要考慮系統(tǒng)對(duì)設(shè)備的并發(fā)操作
4,需要非常熟悉所開(kāi)發(fā)硬件的工作原理

linux下的驅(qū)動(dòng)千篇一律嗎?

linux系統(tǒng)從各異的設(shè)備中提取共性特征,將其分為三大類(lèi):字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備。
字符設(shè)備驅(qū)動(dòng)是這三類(lèi)中最常見(jiàn)的,而且linux中又有很多基于字符驅(qū)動(dòng)封裝出來(lái)的驅(qū)動(dòng)模型,例如:input設(shè)備、framebuffer設(shè)備、雜項(xiàng)設(shè)備等等,今后學(xué)習(xí)中我們會(huì)有所介紹
每一類(lèi)設(shè)備驅(qū)動(dòng)都有對(duì)應(yīng)的驅(qū)動(dòng)模型框架,降低了驅(qū)動(dòng)編程的復(fù)雜度,大家都遵循固定的框架進(jìn)行編程。

在學(xué)習(xí)linux驅(qū)動(dòng)之前我們要先建立起相關(guān)概念,我們將從以下幾點(diǎn)進(jìn)行學(xué)習(xí):

1.Linux驅(qū)動(dòng)程序的功能

   對(duì)硬件進(jìn)行初始化和控制
   檢測(cè)和處理硬件出現(xiàn)的錯(cuò)誤
   負(fù)責(zé)從硬件讀數(shù)據(jù)和傳送數(shù)據(jù)給硬件設(shè)備
   接收應(yīng)用程序發(fā)送的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)

2.驅(qū)動(dòng)程序與應(yīng)用程序的區(qū)別  

    應(yīng)用程序從頭到尾執(zhí)行完整的任務(wù);驅(qū)動(dòng)程序完成初始化之后不再運(yùn)行,等待應(yīng)用程序調(diào)用執(zhí)行。
    應(yīng)用程序可以使用glibc等標(biāo)準(zhǔn)C函數(shù)庫(kù);驅(qū)動(dòng)程序不能使用標(biāo)準(zhǔn)C庫(kù)。
    驅(qū)動(dòng)程序是內(nèi)核的一部分,工作在內(nèi)核態(tài);應(yīng)用程序工作在用戶(hù)態(tài)。

3.應(yīng)用程序、庫(kù)、內(nèi)核、驅(qū)動(dòng)程序的關(guān)系
應(yīng)用程序調(diào)用函數(shù)庫(kù)完成一系列功能,一部分庫(kù)函數(shù)通過(guò)系統(tǒng)調(diào)用由內(nèi)核完成相應(yīng)功能,例如:printf、fread函數(shù)等等。
內(nèi)核處理系統(tǒng)調(diào)用,內(nèi)核在實(shí)現(xiàn)系統(tǒng)調(diào)用時(shí)會(huì)根據(jù)需要調(diào)用設(shè)備驅(qū)動(dòng)程序操作硬件。
設(shè)備驅(qū)動(dòng)是硬件設(shè)備的直接控制者,它完成了內(nèi)核和硬件的通信任務(wù)。

4.設(shè)備驅(qū)動(dòng)的種類(lèi)
字符設(shè)備
I/O傳輸過(guò)程中以字符為單位進(jìn)行傳輸;
用戶(hù)對(duì)字符設(shè)備發(fā)出讀/寫(xiě)請(qǐng)求時(shí),實(shí)際的硬件讀/寫(xiě)操作一般緊接著發(fā)生

塊設(shè)備
塊設(shè)備與字符相反,它的數(shù)據(jù)傳輸以塊(內(nèi)存緩沖)為單位傳輸;
用戶(hù)對(duì)塊設(shè)備讀/寫(xiě)時(shí),硬件讀/寫(xiě)不會(huì)緊接著發(fā)生(即用戶(hù)請(qǐng)求和硬件操作是異步的)
磁盤(pán)類(lèi)、閃存類(lèi)等設(shè)備都封裝成塊設(shè)備。

網(wǎng)絡(luò)設(shè)備
網(wǎng)絡(luò)設(shè)備是一類(lèi)特殊的設(shè)備,它不像字符設(shè)備或塊設(shè)備那樣通過(guò)對(duì)應(yīng)的設(shè)備文件訪問(wèn),也不能直接通過(guò)read或write進(jìn)行數(shù)據(jù)請(qǐng)求,而是通過(guò)socket接口函數(shù)進(jìn)行訪問(wèn)。

5.設(shè)備文件和主/從設(shè)備號(hào)
設(shè)備文件是用戶(hù)程序與設(shè)備驅(qū)動(dòng)的一個(gè)接口,應(yīng)用程序通過(guò)操作設(shè)備文件來(lái)調(diào)用設(shè)備驅(qū)動(dòng)程序。
Linux把對(duì)硬件的操作全部抽象成對(duì)文件的操作,其中包含了控制和數(shù)據(jù)傳輸操作,例如:open,read,write,close...
Linux下的各種硬件設(shè)備以文件的形式存放于/dev目錄下,可以使用ls/dev 命令進(jìn)行查看
每個(gè)設(shè)備文件都有其文件屬性(c或者b),表明其是字符設(shè)備還是塊設(shè)備。

每個(gè)設(shè)備文件都有2個(gè)設(shè)備號(hào),在/dev目錄下使用“l(fā)l”或“l(fā)s-l”命令可以查看各個(gè)設(shè)備的設(shè)備類(lèi)型、主/從設(shè)備號(hào)等詳細(xì)信息。

主設(shè)備號(hào):用于標(biāo)識(shí)驅(qū)動(dòng)程序,如果兩個(gè)設(shè)備文件的主設(shè)備號(hào)相同,那他們使用同一個(gè)驅(qū)動(dòng)程序。

從設(shè)備號(hào):用于標(biāo)識(shí)同一驅(qū)動(dòng)程序的不同硬件,為了能把不同的具體硬件分開(kāi),又通過(guò)從設(shè)備號(hào)來(lái)區(qū)分使用相同驅(qū)動(dòng)程序的不同設(shè)備。
例如:210開(kāi)發(fā)板中的串口設(shè)備,主設(shè)備號(hào)標(biāo)識(shí)串口這類(lèi)設(shè)備,從設(shè)備號(hào)標(biāo)識(shí)具體的某個(gè)串口。

用戶(hù)通過(guò)“cat /proc/devices”命令可以查看當(dāng)前系統(tǒng)中主設(shè)備號(hào)的使用情況,以及和硬件設(shè)備的對(duì)應(yīng)情況。

想要了解嵌入式物聯(lián)網(wǎng)相關(guān)技術(shù)的可以聯(lián)系宋工企鵝號(hào)三五二四六五九零八八Tel:173--1795--1908
試聽(tīng)C語(yǔ)言電子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽(tīng)課了。
宋工企鵝號(hào):三五二四六五九零八八   Tel173--1795--1908


本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表