1. gzyueqian
      18078865874

      粵嵌概述嵌入式設(shè)備驅(qū)動,教你怎么“玩”轉(zhuǎn)嵌入式開發(fā)

      更新時間: 2018-11-08 14:16:10來源: 嵌入式瀏覽量:5506

          一、設(shè)備驅(qū)動的作用
          對設(shè)備驅(qū)動通俗的解釋就是“驅(qū)使硬件設(shè)備行動”。設(shè)備驅(qū)動與底層硬件直接打交道,按照硬件設(shè)備的具體工作方式讀寫設(shè)備寄存器,完成設(shè)備的輪詢、中斷處理、DMA通信,進行物理內(nèi)存向虛擬內(nèi)存的映射,終使通信設(shè)備能夠收發(fā)數(shù)據(jù),使顯示設(shè)備能夠顯示文字和畫面,使存儲設(shè)備能夠記錄文件和數(shù)據(jù)。此可見,設(shè)備驅(qū)動充當(dāng)了硬件和應(yīng)用軟件之間的紐帶,它使得應(yīng)用軟件只需要調(diào)用系統(tǒng)軟件的應(yīng)用編程接口(API)就可讓硬件去完成要求的工作。在系統(tǒng)中沒有操作系統(tǒng)的情況下,工程師可以根據(jù)硬件設(shè)備的特點自行定義接口,自己為函數(shù)命名。而在有操作系統(tǒng)的情況下,設(shè)備驅(qū)動的架構(gòu)則由相應(yīng)的操作系統(tǒng)定義,驅(qū)動工程師必須按照相應(yīng)的架構(gòu)設(shè)計設(shè)備驅(qū)動,這樣,設(shè)備驅(qū)動才能良好地整合到操作系統(tǒng)的內(nèi)核中。
          二、無操作系統(tǒng)的設(shè)備驅(qū)動
          并不是任何一個計算機系統(tǒng)都一定要運行操作系統(tǒng),在許多情況下操作系統(tǒng)是不必要的。對于功能比較單一、控制并不復(fù)雜的系統(tǒng)并不需要多任務(wù)調(diào)度、 文件系統(tǒng)、 內(nèi)存管理等復(fù)雜功能,用單任務(wù)架構(gòu)完全可以很好地支持它們的工作。 一個無限循環(huán)中夾雜對設(shè)備中斷的檢測或者對設(shè)備的輪詢是這種系統(tǒng)中軟件的典型架構(gòu)。如圖:
          在這樣的系統(tǒng)中,雖然不存在操作系統(tǒng),但是設(shè)備驅(qū)動是必須存在的。一般情況下,對每一種設(shè)備驅(qū)動都會定義為一個軟件模塊,包含.h文件和.c文件,前者定義該設(shè)備驅(qū)動的數(shù)據(jù)結(jié)構(gòu)并聲明外部函數(shù),后者進行設(shè)備驅(qū)動的具體實現(xiàn)。其他模塊需要使用這個設(shè)備的時候,只需要包含設(shè)備驅(qū)動的頭文件 serial.h ,然后調(diào)用其中的外部接口函數(shù)即可。
          由此可見,在沒有操作系統(tǒng)的情況下, 設(shè)備驅(qū)動的接口被直接提交給了應(yīng)用軟件工程師, 應(yīng)用軟件沒有跨越任層次就直接訪問了設(shè)備驅(qū)動的接口。 設(shè)備驅(qū)動包含的接口函數(shù)也與硬件的功能直接吻合, 沒有任何附加功能。如圖:
          三、有操作系統(tǒng)的設(shè)備驅(qū)動
          操作系統(tǒng)的存在勢必要求設(shè)備驅(qū)動附加更多的代碼和功能,把單一的“驅(qū)使硬件設(shè)備行動”變成了操作系統(tǒng)內(nèi)與硬件交互的模塊,它對外呈現(xiàn)為操作系統(tǒng)的API,不再給應(yīng)用軟件工程師直接提供接口。
          首先,一個復(fù)雜的軟件系統(tǒng)需要處理多個并發(fā)的任務(wù),沒有操作系統(tǒng),想完成多任務(wù)并發(fā)是很困難的。其次,操作系統(tǒng)給我們提供內(nèi)存管理機制。一個典型的例子是,對于多數(shù)含MMU的處理器而言,Windows、Linux等操作系統(tǒng)可以讓每個進程都獨立地訪問4GB的內(nèi)存空間。操作系統(tǒng)通過給設(shè)備驅(qū)動制造麻煩來達到給上層應(yīng)用提供便利的目的。如果設(shè)備驅(qū)動都按照操作系統(tǒng)給出的獨立于設(shè)備的接口而設(shè)計,應(yīng)用程序?qū)⒖墒褂媒y(tǒng)一的系統(tǒng)調(diào)用接口來訪問各種設(shè)備。對于Linux 等操作系統(tǒng)而言, 應(yīng)用程序通過 write()、read()等函數(shù)讀寫文件就可以訪問各種字符設(shè)備和塊設(shè)備,而不用管設(shè)備的具體類型和工作方式,
          四、linux設(shè)備驅(qū)動
          4.1設(shè)備的分類及特點
          計算機系統(tǒng)的硬件主要由CPU、存儲器和外設(shè)組成。目前,芯片的集成度越來越高,往往在CPU內(nèi)部就集成了存儲器和外設(shè)適配器。ARM、PowerPC、MIPS等處理器都集成了UART、I2C控制器、USB控制器、SDRAM控制器等,有的處理器還集成了片內(nèi) RAM 和 Fl ash 。驅(qū)動針對的對象是存儲器和外設(shè)(包括 CPU 內(nèi)部集成的存儲器和外設(shè)) ,而不是針對 CPU 核。Linux 將存儲器和外設(shè)分為 3 個基礎(chǔ)大類:
          字符設(shè)備;
          塊設(shè)備;
          網(wǎng)絡(luò)設(shè)備
          字符設(shè)備指那些必須以串行順序依次進行訪問的設(shè)備,如觸摸屏、磁帶驅(qū)動器、鼠標等。塊設(shè)備可以用任意順序進行訪問,以塊為單位進行操作,如硬盤、軟驅(qū)等。字符設(shè)備不經(jīng)過系統(tǒng)的快速緩沖,而塊設(shè)備經(jīng)過系統(tǒng)的快速緩沖。但是,字符設(shè)備和塊設(shè)備并沒有明顯的界限,如Flash設(shè)備符合塊設(shè)備的特點,但是我們?nèi)匀豢梢园阉鳛橐粋€字符設(shè)備來訪問。字符設(shè)備和塊設(shè)備的驅(qū)動設(shè)計呈現(xiàn)出很大的差異,但是對于用戶而言,他們都使用文件系統(tǒng)的操作接口open()、close()、read()、write()等函數(shù)進行訪問。在 Linux 系統(tǒng)中,網(wǎng)絡(luò)設(shè)備面向數(shù)據(jù)包的接收和發(fā)送而設(shè)計,它并不對應(yīng)于文件系統(tǒng)的節(jié)點。 內(nèi)核與網(wǎng)絡(luò)設(shè)備的通信和內(nèi)核與字符設(shè)備、 塊設(shè)備的通信方式完全不同。
          4.2Linux設(shè)備驅(qū)動與整個軟硬件系統(tǒng)的關(guān)系除網(wǎng)絡(luò)設(shè)備外,字符設(shè)備與塊設(shè)備都被映射到Linux文件系統(tǒng)的文件和目錄,通過文件系統(tǒng)的系統(tǒng)調(diào)用接口open()、write()、read()、close()等函數(shù)即可訪問字符設(shè)備和塊設(shè)備。所有的字符設(shè)備和塊設(shè)備都被統(tǒng)一地呈現(xiàn)給用戶。塊設(shè)備比字符設(shè)備復(fù)雜,在它上面會首先建立一個磁盤/Flash 文件系統(tǒng), 如 F AT、 Ext3、 Y AFFS、JFFS 等。F AT、Ext3、Y AFFS、JFFS 規(guī)范了文件和目錄在存儲介質(zhì)上的組織。
          應(yīng)用程序可以使用 Linux 的系統(tǒng)調(diào)用接口編程,也可以使用 C 庫函數(shù),出于代碼可移植性的考慮,后者更值得推薦。C 庫函數(shù)本身也通過系統(tǒng)調(diào)用接口而實現(xiàn),如 C庫函數(shù)中的 fopen()、 fwrite()、 fread()、 fclose()分別會調(diào)用操作系統(tǒng) API 的 open()、 write()、read()、close()函數(shù)。
          4.3編寫 Linux 設(shè)備驅(qū)動的技術(shù)基礎(chǔ)
          編寫 Linux 設(shè)備驅(qū)動要求工程師具有良好的硬件基礎(chǔ),懂得 SRAM、Flash、SDRAM、磁盤的讀寫方式,UART、I2C、USB 等設(shè)備的接口,輪詢、中斷、DMA 的原理,PCI 總線的工作方式以及 CPU 的內(nèi)存管理單元(MMU)等。
          編寫 Linux 設(shè)備驅(qū)動要求工程師具有良好的 C 語言基礎(chǔ), 能靈活地運用 C 語言的結(jié)構(gòu)體、指針、函數(shù)指針及內(nèi)存動態(tài)申請和釋放等。
          編寫 Linux 設(shè)備驅(qū)動要求工程師具有一定的 Linux 內(nèi)核基礎(chǔ),雖然并不要求工程師對內(nèi)核各個部分有深入的研究,但至少要了解設(shè)備驅(qū)動與內(nèi)核的接口,尤其是對于塊設(shè)備、網(wǎng)絡(luò)設(shè)備、Flash 設(shè)備、串口設(shè)備等復(fù)雜設(shè)備。
          編寫 Linux 設(shè)備驅(qū)動要求工程師具有良好的多任務(wù)并發(fā)控制和同步的基礎(chǔ),因為在設(shè)備驅(qū)動中會大量使用自旋鎖、互斥、信號量、等待隊列等并發(fā)與同步機制。

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 一级a做视频在线观看国 | 欧美激情视频一区在线观看 | 亚洲性久久久久网 | 嫩草研究所久久久精品 | 亚洲超清中文字幕无 | 亚洲国产综合一区第一页 |