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





