Linux液晶屏驅動開發(fā)
幀緩沖設備屬于字符設備,采用“文件層-驅動層”的接口方式。在文件層為之定義了以下數據結構:
本文引用地址:http://butianyuan.cn/article/84078.htm其成員函數都在Linux/driver/video/fbmem.c中定義,其中的函數對具體的硬件進行操作,對寄存器進行設置,對顯示緩沖進行映射。
對于/dev/fb,對顯示設備的操作主要有以下幾種:
讀/寫(read/write)/dev/fb 相當于讀/寫屏幕緩沖區(qū)。
映射(map)操作 由于Linux工作在保護模式和每個應用程序里都有自己的虛擬地址空間,在應用程序中是不能直接訪問物理緩沖區(qū)地址的。因此,Linux在文件操作file_operations結構中提供了mmap函數,可將文件的內容映射到用戶空間。對于幀緩沖設備,則可通過映射操作,可將屏幕緩沖區(qū)的物理地址映射到用戶空間的一段虛擬地址中,之后用戶就可以通過讀寫這段虛擬地址訪問屏幕緩沖區(qū),在屏幕上繪圖。
I/O控制 對于幀緩沖設備,對設備文件的ioctl操作可讀取/設置顯示設備及屏幕的參數,如分辨率、顯示顏色數和屏幕大小等。ioctl的操作是由底層的驅動程序來完成的。
在應用程序中,操作/dev/fb的一般步驟為首先打開/dev/fb設備文件,然后用ioctl操作取得當前顯示屏幕的參數,如屏幕分辨率,每個像素點的比特數,根據屏幕參數可計算屏幕緩沖區(qū)的大小。接下來,將屏幕緩沖區(qū)映射到用戶空間。最后,映射后就可以直接讀寫屏幕緩沖區(qū),進行繪圖和圖片顯示了。典型程序段如下:
由于準備在LCD 上顯示一幅256色BMP圖片,關于BMP 圖片方面的知識請見相關鏈接。
4.幀緩沖驅動的縮寫
了解了上述知識后,在編寫驅動的時候就簡單多了。源程序共將程序分為初始化幀緩沖模塊fb_init(),調色板獲取色彩模塊get_cmap(),圖片顯示模塊display_bmp(),main函數4個函數。其中調色板獲取色彩模塊的功能是從文件中獲得圖像顯示色彩,重置系統調色板,使圖像能正確的顯示色彩。
圖片顯示函數部分重要代碼為:
在主函數中,建立一個進程調用圖片顯示函數
至此LCD的驅動程序就編寫完成了,經過調試,編譯鏈接,然后用串口下載到實驗板上,一幅256色BMP圖片就可以出現在液晶屏幕上了。
5.應用價值
液晶屏點亮了,這只是第一步,我們可以在此基礎上進一步進行應用程序的開發(fā),比如筆者將此應用在一個視頻監(jiān)控系統中。在這個視頻監(jiān)控系統中,圖像處理占很大的比重,基本的圖像處理構成如下:
圖像采集模塊圖像采集模塊需要兩種裝置,一種是將光信號轉換成電信號的物理器件,如攝像機;另一種是能夠將模擬電信號轉換成數字信號的器件,如圖像采集卡。
圖像處理模塊對圖像的處理一般可用算法的形式描述,但是對于特殊的問題需要特殊的解決方法,圖像處理模塊中不但包含了對圖像的一般處理方法,也包括一些特殊的算法處理。
圖像顯示模塊對于采集得到的圖像,經過處理以后,最終需要顯示給用戶看。在系統的實時采集部分中,需要對展開的圖像進行滾屏顯示:在圖像編輯部分中,需要瀏覽所要拼接的圖像。所以圖像顯示對于系統來說非常重要。
圖像儲存模塊由于圖像中包含有大量的信息,并且由于系統所采用8位真彩色格式,因此需要大量的空間。因此,在本系統中需要大容量和快速的圖像存儲器。
圖像通信模塊隨著網絡的建設和發(fā)展,圖像通信傳輸也得到極大的重視。另外,圖像傳輸可以使不同的系統共享圖像數據資源,快速地將結果反映到遠處系統,所以極大推動了圖像在各個方面的應用。
在這五步中,首先在點亮液晶屏之后,才能做下一步工作。比如說筆者能夠在LCD顯示一幅圖畫,但由于這幅圖是BMP格式的,它的存儲量非常驚人,一幅320×240的BMP格式就有320×240×8/8=76800,也就是77KB,這對于系統資源相對短缺的嵌入式設備來說占用系統RAM 太大了,因此我們就要將BMP格式的圖片壓縮成占用系統資源少的圖片格式,比如JPEG 格式或PNG格式,可以有效地減少存儲量。
由于篇幅所限,不可能把完整的源代碼均做一番解釋,但主要的過程就是這些,在此拋磚引玉。隨著液晶屏在嵌入式設備中的用途越來越廣,會有很大的空間值得我們去研究。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論