濮阳杆衣贸易有限公司

主頁 > 知識庫 > Linux系統(tǒng)的硬件設(shè)備驅(qū)動的底層結(jié)構(gòu)講解

Linux系統(tǒng)的硬件設(shè)備驅(qū)動的底層結(jié)構(gòu)講解

熱門標簽:高德地圖標注技術(shù) 慶陽便宜外呼系統(tǒng)報價 天地圖標注線 靈圖uu電子服務(wù)區(qū)地圖標注 大眾點評公寓式酒店地圖標注 如何在地圖標注多個位置 微信地圖標注在哪 辦理400電話怎么申請 滴滴洗衣店地圖標注

什么是驅(qū)動?
最通俗的解釋就是“驅(qū)使硬件設(shè)備行動”
 
作用?
設(shè)備驅(qū)動與底層硬件直接打交道,按照硬件設(shè)備的具體工作方式讀寫設(shè)備寄存器,完成設(shè)備的輪詢、中斷處理、DMA通信,進行物理內(nèi)存向虛擬內(nèi)存的映射,最終使通信設(shè)備能夠收發(fā)數(shù)據(jù),使顯示設(shè)備能夠顯示文字和畫面,使存儲設(shè)備能夠記錄文件號數(shù)據(jù)
 
計算機系統(tǒng)的硬件主要有cpu、存儲器、外設(shè)組成。但是隨著IC制造工藝的發(fā)展,目前,芯片的集成度越來越高,往往cpu內(nèi)部就集成了存儲器和外設(shè)適配器。ARM處理器集成了UART、I2C控制器(2==平方)、USB控制器、SDRAM控制器等

驅(qū)動針對的對象是存儲器和外設(shè)(包括cpu內(nèi)部集成的存儲器和外設(shè)),而不是針對cpu核。Linux將存儲器和外設(shè)分為3個基礎(chǔ)大類:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備
 
字符設(shè)備之那些必須以串行順序依次進行訪問的設(shè)備,如觸摸屏、磁帶驅(qū)動器、鼠標等??稍O(shè)備可以按照任意順序進行訪問,以塊為單位進行操作,如硬盤、軟驅(qū)等。字符設(shè)備不經(jīng)過系統(tǒng)的快速緩沖,而塊設(shè)備經(jīng)過系統(tǒng)的快速緩沖。但是,字符設(shè)備和塊設(shè)備并沒有明顯的界限,如flash設(shè)備符合塊設(shè)備的特點,但是我們?nèi)匀豢梢园阉鳛橐粋€字符設(shè)備來訪問
 
在Linux系統(tǒng)中,網(wǎng)絡(luò)設(shè)備面向數(shù)據(jù)包的接收和發(fā)送而設(shè)計,它并不對應于文件系統(tǒng)的節(jié)點。內(nèi)核與網(wǎng)絡(luò)設(shè)備的通信和內(nèi)核與字符設(shè)備、塊設(shè)備的通信方式完全不同。

如上圖所示,除網(wǎng)絡(luò)設(shè)備外,字符設(shè)備與塊設(shè)備都被映射到Linux文件系統(tǒng)的文件和目錄,通過文件系統(tǒng)的系統(tǒng)調(diào)用接口open()、write()、read()、close()等函數(shù)即可訪問字符設(shè)備和塊設(shè)備。塊設(shè)備比字符設(shè)備復雜,在它上面會首先建立一個磁盤/Flash文件系統(tǒng),如FAT、Ext3、YAFFS、JFFS等FAT、Ext3、YAFFS、JFFS規(guī)范了文件和目錄在存儲介質(zhì)上的組織
 
應用程序可以使用Linux的系統(tǒng)調(diào)用接口編程,也可由使用c庫函數(shù),出于可移植性的考慮,后者更值得推薦。c庫函數(shù)本身也是通過系統(tǒng)調(diào)用接口而實現(xiàn)的
 
在嵌入式系統(tǒng)的設(shè)計中,LED一般直接由cpu的GPIO控制。GPIO一般有兩組寄存器控制,即一組控制寄存器和一組數(shù)據(jù)寄存器??刂萍拇嫫骺稍O(shè)置GPIO口的工作方式為輸入或輸出。當引腳設(shè)置為輸出時,向數(shù)據(jù)寄存器的對應位寫入1和0會分別在引腳上產(chǎn)生高電平和低電平;當引腳設(shè)置為輸入時,讀取數(shù)據(jù)寄存器的對應位可獲得引腳上相應的電平信號。

驅(qū)動設(shè)計的硬件基礎(chǔ)
處理器的分類,如下圖所示:

存儲器可分為只讀存儲器(ROM)、閃存(Flash)、隨機存取存儲器(RAM)、光介質(zhì)存儲器和磁介質(zhì)存儲器
 
Nor Flash和cpu的接口屬于典型的類SRAM接口,不需要增加額外的控制電路。Nor Flash的特點是可芯片內(nèi)執(zhí)行,程序可以直接在Nor內(nèi)運行。而Nand Fash和cpu的接口必須由相應的控制電路進行轉(zhuǎn)換,當然也可以通過地址線或GPIO產(chǎn)生Nand Flash接口的信號。Nand Flash以塊方式進行訪問,不支持芯片內(nèi)執(zhí)行。
 
Flash的編程原理都是只能將1寫為0,而不能將0寫完1.所以在Flash編程之前必須將對應的塊擦除,而擦除的過程就是把所有的位都寫為1的過程,塊內(nèi)的所有字節(jié)變?yōu)?xFF
 
存儲器的分類,如下圖所示:

原理圖分析:通過閱讀電路板的原理圖獲得各種存儲器、外設(shè)所使用的硬件資源,主要包括存儲器和外設(shè)控制芯片所使用的片選、中斷、DMA資源。通過分析片選得出芯片的內(nèi)存、I/O基地址,通過分析中斷、DMA信號獲得芯片使用的中斷號和DMA通道,歸納出類似下表:

時序分析:對驅(qū)動工程師或硬件工程師而言,時序分析的意思是讓芯片之間的訪問滿足芯片手冊中時序圖信號有效的先后順序、采樣建立時間和保持時間的要求,在電路板工作不正常的時候,準確的定位時序方面的問題

內(nèi)核及內(nèi)核編程
在設(shè)備驅(qū)動方面,Linux2.6相對于Linux2.4有較大的改動,這主要表現(xiàn)在內(nèi)核API中增加了不少新功能(如內(nèi)存池)、sysfs文件系統(tǒng)、內(nèi)核模塊從.o變?yōu)?ko、驅(qū)動模塊編譯方式、模塊使用計數(shù)、模塊加載和卸載函數(shù)的定義等方面
 
Linux內(nèi)核主要有進程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口和進程間通信等5個子系統(tǒng)組成,如下圖:

在設(shè)備驅(qū)動編程中,當請求的資源不能滿足時,驅(qū)動一般會調(diào)度其他線程執(zhí)行,并使驅(qū)動對應的進程進入睡眠狀態(tài),直到它請求的資源被釋放,才會被喚醒而紀念日就緒狀態(tài)
 
在設(shè)備驅(qū)動編程中,如果需要幾個并發(fā)執(zhí)行的任務(wù),可以啟動內(nèi)核線程,啟動內(nèi)核線程的函數(shù)為:int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
 
Linux內(nèi)存管理完成為每個進程進行虛擬內(nèi)存到物理內(nèi)存的轉(zhuǎn)換。一般而言,Linux的每個進程享有4GB的內(nèi)存空間,0-3GB屬于用戶空間,3-4GB屬于內(nèi)核空間,內(nèi)核空間對常規(guī)內(nèi)存、I/O設(shè)備內(nèi)存以及高端內(nèi)存存在不同的處理方式
 
虛擬文件系統(tǒng)隱藏了各種硬件的具體細節(jié),為所有的設(shè)備提供了統(tǒng)一的接口。而且,它獨立于各個具體的文件系統(tǒng),是對各種文件系統(tǒng)的一個抽象,它使用super block存放文件系統(tǒng)相關(guān)信息,使用索引節(jié)點inode存放文件的物理信息,使用目錄項dentry存放文件的邏輯信息
 
Linux系統(tǒng)只能通過系統(tǒng)調(diào)用和硬件中斷完成從用戶空間到內(nèi)核空間的控制轉(zhuǎn)移。

標簽:九江 海東 哈密 臺州 昌都 玉樹 優(yōu)質(zhì)穩(wěn)定 孝感

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Linux系統(tǒng)的硬件設(shè)備驅(qū)動的底層結(jié)構(gòu)講解》,本文關(guān)鍵詞  Linux,系統(tǒng),的,硬件,設(shè)備驅(qū)動,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux系統(tǒng)的硬件設(shè)備驅(qū)動的底層結(jié)構(gòu)講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux系統(tǒng)的硬件設(shè)備驅(qū)動的底層結(jié)構(gòu)講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    玛多县| 肥乡县| 三门县| 额济纳旗| 长春市| 宁波市| 娄烦县| 彭水| 怀来县| 保山市| 象州县| 突泉县| 从江县| 县级市| 娱乐| 迁西县| 红安县| 娄烦县| 荃湾区| 鄱阳县| 宜城市| 柯坪县| 通河县| 长葛市| 乐业县| 莫力| 阿城市| 盘锦市| 大荔县| 资溪县| 汝阳县| 淮阳县| 兴和县| 措美县| 曲阜市| 乐清市| 云林县| 潜江市| 高台县| 曲靖市| 景洪市|