隨著嵌入式linux的迅速發展,由於其沒有昂貴的版權費,完全開放源**,可裁減性與可移植性,因此是開發嵌入式產品的優秀作業系統平台。裝置驅動程式是linux核心的重要組成部分,執行在linux核心底層,在核心源**中佔較大比例,驅動程式開發逐漸成為嵌入式軟體開發中一項重要工作。應專案設計的需要完成了嵌入式linux下的lcd驅動程式設計。
1 linux下裝置驅動程式
驅動程式從字面上可以理解為一類程式,這類程式的目的一般是驅動硬體正常工作,所以通常所說的驅動程式都是針對特定的硬體來編寫的。linux裝置驅動程式是為特定的硬體提供給使用者程式的一組標準化介面,它隱藏了裝置工作的細節。linux系統下驅動程式是執行在核心態的,是和核心連線在一起的程式。如果執行在使用者態的應用程式想控制硬體裝置,必須通過驅動程式來控制。
linux系統的裝置分為3種型別,分別是字元裝置、塊裝置和網路裝置。文中所涉及的lcd驅動屬於字元型裝置驅動程式。在對字元裝置發出讀、寫請求時,實際的硬體i/o一般就緊接著發生了。linux系統訪問裝置就像訪問檔案一樣,例如開啟關閉裝置系統呼叫open()和close()函式。在linux核心中,字元裝置使用structfile_operations結構來定義裝置的各種操作集合。編寫字元裝置驅動程式,主要是實現str-uctfile_operations結構中的各個函式。
2 基於ffamebuffer的lcd驅動程式設計
2.1 lcd簡介
設計中採用的嵌入式微處理器是samsung公司的s3c2410,lcd控制器主要用於傳輸顯示資料和產生控制訊號,使用者只需通過讀寫一系列暫存器即可完成配置和顯示控制,圖1是s3c2410平台lcd控制器的結構圖。
其各個訊號描述及功能如表1所示。
可以看出,fb_ops()結構體類似於file_operations()結構體,提供了乙個幀緩衝裝置的統一介面。s3c2410_ops()函式給出了標準介面到針對具體硬體操作函式的跳轉指標。
2.3.4 framebuffer裝置驅動程式的設計
驅動程式主要完成的工作有以下5部分:
(1)編寫初始化函式
framebuffer驅動首先要初始化lcd控制器,通過相關暫存器來設定lcd相對應的顯示模式和顏色數,然後分配顯示緩衝區。通常用vmall-oc()函式分配一段連續空間,緩衝區的大小可以用「點陣行數×點陣列數×乙個畫素的位數/8」計算得到。
如果使用模組化載入方式,載入lcd驅動模組時,系統呼叫fb_init()函式。解除安裝lcd驅動模組時,系統首先呼叫unregister_framebuffer()取消註冊,然後釋放顯示緩衝區的記憶體。
(2)編寫成員函式
主要負責編寫fb_ops()對應的底層操作函式。
(3)讀/寫(read/write)
完成對幀緩衝區的讀寫操作。
(4)對映(map)
linux有核心空間和使用者空間,平時工作在保護模式,每個應用程式程序都有自己的虛擬位址空間,應用程式不能直接訪問物理緩衝位址。但是,linux在檔案操作介面(file_operations)中提供了位址對映(mmap)操作,它可以將檔案的內容對映到使用者空間,這樣使用者就可以通過讀寫這段位址來訪問緩衝區,並在螢幕上繪圖。
(5)輸入/輸出控制
裝置檔案的ioctl()呼叫可以讀取和設定顯示裝置的引數,如解析度、支援顏色數、螢幕大小等。
3 結束語
嵌入式系統中LCD驅動的實現原理
結合三星公司arm9系列嵌入式處理器s3c2410,講解如何進行lcd驅動程式模組化程式設計及如何將驅動程式靜態載入進系統核心。lcd 液晶顯示 模組滿足了嵌入式系統日益提高的要求,它可以顯示漢字 字元和圖形,同時還具有低壓 低功耗 體積小 重量輕和超薄等很多優點。隨著嵌入式系統的應用越來越廣泛,功...
嵌入式系統中LCD驅動的實現原理
結合三星公司arm9系列嵌入式處理器s3c2410,講解如何進行lcd驅動程式模組化程式設計及如何將驅動程式靜態載入進系統核心。lcd 液晶顯示 模組滿足了嵌入式系統日益提高的要求,它可以顯示漢字 字元和圖形,同時還具有低壓 低功耗 體積小 重量輕和超薄等很多優點。隨著嵌入式系統的應用越來越廣泛,功...
嵌入式系統中LCD驅動的實現原理
結合三星公司arm9系列嵌入式處理器s3c2410,講解如何進行lcd驅動程式模組化程式設計及如何將驅動程式靜態載入進系統核心。lcd 液晶顯示 模組滿足了嵌入式系統日益提高的要求,它可以顯示漢字 字元和圖形,同時還具有低壓 低功耗 體積小 重量輕和超薄等很多優點。隨著嵌入式系統的應用越來越廣泛,功...