結(jié)合三星公司ARM9系列嵌入式處理器S3C2410,講解如何進(jìn)行LCD驅(qū)動程序模塊化編程及如何將驅(qū)動程序靜態(tài)加載進(jìn)系統(tǒng)內(nèi)核。
LCD(液晶顯示)模塊滿足了嵌入式系統(tǒng)日益提高的要求,它可以顯示漢字、字符和圖形,同時還具有低壓、低功耗、體積小、重量輕和超薄等很多優(yōu)點(diǎn)。隨著嵌入式系統(tǒng)的應(yīng)用越來越廣泛,功能也越來越強(qiáng)大,對系統(tǒng)中的人機(jī)界面的要求也越來越高,在應(yīng)用需求的驅(qū)使下,許多工作在Linux下的圖形界面軟件包的開發(fā)和移植工作中都涉及到底層LCD驅(qū)動的開發(fā)問題。因此在嵌入式系統(tǒng)中開發(fā)LCD驅(qū)動得以廣泛運(yùn)用。
本文以三星公司ARM9內(nèi)核芯片S3C2410的LCD接口為基礎(chǔ),介紹了在Linux平臺上開發(fā)嵌入式LCD驅(qū)動程序的一般方法。
本文硬件采用三星公司的S3C2410芯片的開發(fā)板,軟件采用Linux 2.4.19平臺,編譯器為arm-linux-gcc的交叉編譯器,使用640×480分辨率的TFT彩色LCD,通過對其Linux驅(qū)動程序進(jìn)行改寫和調(diào)試,成功地實(shí)現(xiàn)了對該種屏的驅(qū)動和顯示。
嵌入式驅(qū)動的概念
設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口,設(shè)備驅(qū)動程序為應(yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來,硬件設(shè)備只是一個設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進(jìn)行操作。設(shè)備驅(qū)動程序是內(nèi)核的一部分,它主要完成的功能有:對設(shè)備進(jìn)行初始化和釋放;把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)、回送應(yīng)用程序請求的數(shù)據(jù)以及檢測和處理設(shè)備出現(xiàn)的錯誤。
Linux將設(shè)備分為最基本的兩大類:一類是字符設(shè)備,另一類是塊設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別是:在對字符設(shè)備發(fā)出讀/寫請求時,實(shí)際的硬件I/O一般就緊接著發(fā)生了。字符設(shè)備以單個字節(jié)為單位進(jìn)行順序讀寫操作,通常不使用緩沖技術(shù);塊設(shè)備則是以固定大小的數(shù)據(jù)塊進(jìn)行存儲和讀寫的,如硬盤、軟盤等,并利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū)。為提高效率,系統(tǒng)對于塊設(shè)備的讀寫提供了緩存機(jī)制,由于涉及緩沖區(qū)管理、調(diào)度和同步等問題,實(shí)現(xiàn)起來比字符設(shè)備復(fù)雜得多。LCD是以字符設(shè)備方式加以訪問和管理的,Linux把顯示驅(qū)動看做字符設(shè)備,把要顯示的數(shù)據(jù)一字節(jié)一字節(jié)地送往LCD驅(qū)動器。
Linux的設(shè)備管理是和文件系統(tǒng)緊密結(jié)合的,各種設(shè)備都以文件的形式存放在/dev目錄下,稱為設(shè)備文件。應(yīng)用程序可以打開、關(guān)閉和讀寫這些設(shè)備文件,完成對設(shè)備的操作,就像操作普通的數(shù)據(jù)文件一樣。為了管理這些設(shè)備,系統(tǒng)為設(shè)備編了號,每個設(shè)備號又分為主設(shè)備號和次設(shè)備號。主設(shè)備號用來區(qū)分不同種類的設(shè)備,而次設(shè)備號用來區(qū)分同一類型的多個設(shè)備。對于常用設(shè)備,Linux有約定俗成的編號,如硬盤的主設(shè)備號是3。Linux為所有的設(shè)備文件都提供了統(tǒng)一的操作函數(shù)接口,方法是使用數(shù)據(jù)結(jié)構(gòu)struct file_operations。這個數(shù)據(jù)結(jié)構(gòu)中包括許多操作函數(shù)的指針,如open()、close()、read()和write()等,但由于外設(shè)的種類較多,操作方式各不相同。





