下彩色液晶顯示器的設(shè)計(jì)_第1頁(yè)
下彩色液晶顯示器的設(shè)計(jì)_第2頁(yè)
下彩色液晶顯示器的設(shè)計(jì)_第3頁(yè)
下彩色液晶顯示器的設(shè)計(jì)_第4頁(yè)
下彩色液晶顯示器的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 可修改 歡送下載 精品 Word 可修改 歡送下載 精品 Word 可修改 歡送下載 精品 WordS3C2440A下彩色(cis)液晶顯示器的設(shè)計(jì)嵌入式系統(tǒng)已成為當(dāng)今(dngjn)最熱門的概念之一,對(duì)大多數(shù)嵌入式系統(tǒng)(xtng)開發(fā)者而言,顯示系統(tǒng)的硬件和軟件開發(fā)是不可回避(hub)的關(guān)鍵性技術(shù)。三星公司開發(fā)的S3C2440A是一款以ARM920T為內(nèi)核(ni h)的嵌入式微處理器,它的最高工作頻率達(dá)533MHz,內(nèi)含3通道的異步串行口,USB主、從單元設(shè)備接口,攝像頭接口,觸摸屏接口,LCD控制器等眾多片上外設(shè)接口,且具低功耗、高性能,廣泛適用于PDA、便攜式媒體播放器、手持式導(dǎo)航儀等領(lǐng)

2、域。目前國(guó)內(nèi)對(duì)該款高性價(jià)比嵌入式微處理器的開發(fā)應(yīng)用才起步不久。 夏普公司生產(chǎn)的LCD屏LQ035Q7DH01為3.5in透反射式TFT-LCD顯示器,屏幕分辨率為320240,能提供262144種色彩,顯示亮度到達(dá)100nit,使設(shè)計(jì)人員能夠在各種照明條件下利用它來(lái)生動(dòng)地展示圖像和文字信息。本文以S3C2440A和LQ035Q7DH01為硬件根底,設(shè)計(jì)了顯示硬件電路。 軟件平臺(tái)采用Linux 2.4.20, 交叉編譯器為arm-linux-gcc 2.95.3,完成了對(duì)LQ035Q7DH01顯示屏的驅(qū)動(dòng)程序開發(fā)。 以三星公司的嵌入式微處理器S3C2440A和夏普公司3.5inLCD屏LQ035

3、Q7DH01為根底,設(shè)計(jì)了顯示硬件電路,介紹了幀緩沖設(shè)備的處理機(jī)制及底層驅(qū)動(dòng)的接口函數(shù),針對(duì)本顯示系統(tǒng)給出了如何開發(fā)其Linux幀緩沖設(shè)備驅(qū)動(dòng)程序。不管是顯示硬件電路還是軟件驅(qū)動(dòng)程序,都有很強(qiáng)的可移植性,可以方便地移植到不同的平臺(tái)。1顯示系統(tǒng)硬件電路1.1 LCD控制器電路 LCD控制器用來(lái)傳輸圖像數(shù)據(jù)并產(chǎn)生相應(yīng)的控制信號(hào),S3C2440A LCD控制器能支持高達(dá)4K色STN屏和256K色TFT屏,支持1024768分辨率下的各種液晶屏, 具有LCD專用DMA。LCD控制器產(chǎn)生的控制信號(hào)和數(shù)據(jù)信號(hào)主要有:VFRAME:LCD 控制器和LCD驅(qū)動(dòng)器之間的幀同步(tngb)信號(hào), LCD控制器在一

4、個(gè)完整幀顯示完成(wn chng)后插入一個(gè)VFRAME信號(hào)(xnho),開始(kish)新一幀的顯示。 VLINE:LCD控制器和LCD驅(qū)動(dòng)器之間的行同步(tngb)信號(hào),LCD控制器在整行數(shù)據(jù)移入LCD驅(qū)動(dòng)器后插入一個(gè)VLINE信號(hào)。 VCLK:LCD控制器和LCD驅(qū)動(dòng)器之間的像素時(shí)鐘信號(hào), 由LCD控制器送出的數(shù)據(jù)在VCLK的上升沿處送出,在VCLK的下降沿處被LCD驅(qū)動(dòng)器采樣。 VM:數(shù)據(jù)輸出使能信號(hào),在VM 信號(hào)躍變成高電平后行數(shù)據(jù)信號(hào)開始由LCD控制器輸出至LCD驅(qū)動(dòng)器,當(dāng)VM信號(hào)躍變?yōu)榈碗娖胶髷?shù)據(jù)輸出停止。 數(shù)據(jù)線:也就是RGB信號(hào)線,S3C2440A LCD控制器有VD0:23

5、共24根數(shù)據(jù)線,數(shù)據(jù)格式不同,接線方式就不同。本文用的是RGB565方式,只需要16根數(shù)據(jù)線(紅色5根,綠色6根,藍(lán)色5根)。其數(shù)據(jù)線接線方式如表1所示:LCD控制器電路(dinl)如圖1所示:1.2 時(shí)序(sh x)和數(shù)據(jù)匹配電路 由于(yuy)S3C2440A 的LCD控制器與LCD屏LQ035Q7DH01在數(shù)據(jù)格式及顯示(xinsh)時(shí)序上無(wú)法匹配,需要(xyo)選用一種時(shí)序控制IC或者用CPLD(也就是通常所說(shuō)的LCD伴侶芯片)來(lái)對(duì)不同數(shù)據(jù)格式的數(shù)據(jù)接口進(jìn)行映射。但CPLD面積較大、本錢較高,因而通常只在需要對(duì)電路進(jìn)行靈活配置的情況下才使用。本文時(shí)序控制IC選用夏普公司的LZ9FC22

6、。該芯片專用于對(duì)TFT型QVGA屏幕(屏幕分辨率320240)的LCD進(jìn)行時(shí)序控制。這是一個(gè)18bit(R6G6B6)的控制器,由于本文采用的是RGB565 16位工作模式,所以將其輸入引腳R0和B0接地。時(shí)序和數(shù)據(jù)匹配電路如圖2所示:1.3 多路電壓(diny)產(chǎn)生電路 LCD屏內(nèi)集成(j chn)有數(shù)字電路和模擬電路,需要外部提供(tgng)數(shù)字電壓和模擬電壓。另外,為了(wi le)完成數(shù)據(jù)掃描,需要(xyo)TFT輪流開啟/關(guān)閉。當(dāng)TFT開啟時(shí),數(shù)據(jù)通過(guò)源極驅(qū)動(dòng)器加載到顯示電極,顯示電極和公共電極問(wèn)的電壓差再作用于液晶實(shí)現(xiàn)顯示,因此需要控制LCD的開啟電壓、關(guān)閉電壓,以及加到公共電極上

7、的電壓, 本系統(tǒng)采用松下公司生產(chǎn)的芯片LM1117DT-3.3來(lái)產(chǎn)生LCD所需要的數(shù)字電壓,采用美國(guó)MAXIM 公司推出的有源矩陣液晶顯示器電源芯片MAX1664來(lái)產(chǎn)生其他電壓,MAX1664內(nèi)部集成有兩個(gè)DC-DC變換器,可以為小型TFT LCD提供高效的調(diào)節(jié)電壓。LCD所需各電壓如表2所示:多路電壓產(chǎn)生電路如圖3所示1.4 顯示驅(qū)動(dòng)和LQ035Q7DH01的接口電路顯示驅(qū)動(dòng)和LQ035Q7DH01的接口電路如圖4所示:1.5 顯示系統(tǒng)整體結(jié)構(gòu)框圖顯示系統(tǒng)整體結(jié)構(gòu)框圖如圖5所示。圖5 顯示系統(tǒng)結(jié)構(gòu)框圖2 Linux下的幀緩沖(hunchng)(frame buffer)設(shè)備(shbi) Li

8、nux下編寫顯示設(shè)備的驅(qū)動(dòng)程序有兩種方法:一種是把顯示設(shè)備抽象(chuxing)成一般的字符設(shè)備,驅(qū)動(dòng)程序的寫法和一般的字符設(shè)備(shbi)驅(qū)動(dòng)類似;第二種就是幀緩沖設(shè)備(shbi)驅(qū)動(dòng)程序的編寫。由于第一種方法不標(biāo)準(zhǔn),而且實(shí)現(xiàn)功能有限,故一般不提倡;而幀緩沖驅(qū)動(dòng)程序比擬簡(jiǎn)單,也容易實(shí)現(xiàn),因而在嵌入式系統(tǒng)里得到了廣泛應(yīng)用。 幀緩沖設(shè)備是一個(gè)提供顯示內(nèi)存和顯示芯片存放器從物理內(nèi)存映射到進(jìn)程地址空間中的設(shè)備,是Linux為圖形設(shè)備提供的一個(gè)抽象接口,它將顯示設(shè)備抽象為幀緩沖區(qū)。幀緩沖允許上層應(yīng)用程序在圖形模式下直接對(duì)顯示緩沖區(qū)進(jìn)行讀寫操作。這種操作是抽象的、統(tǒng)一的。應(yīng)用程序不必關(guān)心物理顯存的位置、

9、換頁(yè)機(jī)制等等具體細(xì)節(jié)。 幀緩沖設(shè)備屬于字符設(shè)備,采用“文件層-驅(qū)動(dòng)層的接口方式。 Linux內(nèi)核include/fnux/fb.h中定義了幀緩沖設(shè)備的驅(qū)動(dòng)層接口fb_info結(jié)構(gòu)體,fb_info定義了當(dāng)前工作的顯示卡的狀態(tài)和幀緩沖設(shè)備的操作函數(shù), 它僅對(duì)內(nèi)核可見。文件fb.h中還定義了fb_var_screeninfo(顯示卡可變特性,這些特性在程序運(yùn)行期間可以由應(yīng)用程序動(dòng)態(tài)改變)、fb_fix_screeninfo(顯示卡不可變特性,這些特性在硬件初始化時(shí)就被定義了, 以后不得修改)、fb_cmap(RGB顏色映射表)等結(jié)構(gòu)體,幀緩沖設(shè)備驅(qū)動(dòng)程序主要依靠這幾個(gè)結(jié)構(gòu)體工作。除了結(jié)構(gòu)體fb_i

10、nfo只能在內(nèi)核空間訪問(wèn)外,其他三個(gè)結(jié)構(gòu)體都可以在用戶空間訪問(wèn)。 Linux內(nèi)核driversvideofbmem.c中定義了幀緩沖設(shè)備的文件層接口file_operations結(jié)構(gòu)體,它對(duì)應(yīng)用程序可見,結(jié)構(gòu)體中功能函數(shù)open()和release()不需要底層的支持.而read()、write()、mmap()那么需要調(diào)用fb_get_fix()、fb_get_var()、fb_set_var()、fb_get_cmap、fb_set_cmap()(這些函數(shù)位于結(jié)構(gòu)體fb_info中指針fbops指向的結(jié)構(gòu)體變量中)等與底層LCD硬件相關(guān)的函數(shù)的支持。另一個(gè)功能函數(shù)是ioctl(),ioct

11、l()是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù),應(yīng)用程序通過(guò)ioctl()系統(tǒng)調(diào)用來(lái)調(diào)用fb_get_fix()、fb_get_var()、fb_set_var()、fb_set_cmap()、fb_get_cmap()等來(lái)獲得和設(shè)置結(jié)構(gòu)體fb_info中fb_var_screeninfo結(jié)構(gòu)變量var、fb_fix_screeninfo 結(jié)構(gòu)變量fix 和fb_cmap結(jié)構(gòu)變量cmap等變量的信息。在fbmem.c中給出了ioctl()命令和fb_info中結(jié)構(gòu)體fb_ops的成員函數(shù)的對(duì)應(yīng)關(guān)系如下:FBIOGET_VSCREENINFO fb_get_varFBIOPUT_VSCR

12、EENINFO fb_set_varFBIOGET_FSCREENINFO fb_get_fixFBIOPUTCMAP fb_set_cmapFBIOGETCMAP fb_get_cmap用戶應(yīng)用程序只需要調(diào)用FBIOXXXX來(lái)操作LCD硬件。 文件fbmem.c中還定義了幀緩沖設(shè)備底層驅(qū)動(dòng)的管理函數(shù):register_framebuffer(struct fb_info 3 fb_info)unregister_framebuffer(struct fb_info 3 fb_info) 幀緩沖設(shè)備在驅(qū)動(dòng)層所要做的工作僅僅是對(duì)Linux為幀緩沖的驅(qū)動(dòng)層接口fb_info進(jìn)行初始化.然后調(diào)用這兩

13、個(gè)函數(shù)對(duì)其注冊(cè)或注銷。幀緩沖設(shè)備驅(qū)動(dòng)層接口直接對(duì)LCD設(shè)備硬件進(jìn)行操作,而fbmem.c可以記錄和管理多個(gè)底層設(shè)備驅(qū)動(dòng)。3 顯示系統(tǒng)幀緩沖(hunchng)驅(qū)動(dòng)的編寫3.1 定義(dngy)LCD控制器結(jié)構(gòu)(jigu)體 前面(qin mian)已經(jīng)說(shuō)過(guò),LCD控制器的功能是傳輸圖像數(shù)據(jù)并產(chǎn)生相應(yīng)的控制信號(hào)(xnho)來(lái)驅(qū)動(dòng)LCD顯示器,驅(qū)動(dòng)程序需要根據(jù)當(dāng)前具體顯示硬件的特性,通過(guò)讀寫一系列的LCD控制存放器來(lái)完成設(shè)定顯示器分辨率和顯示數(shù)據(jù)的格式,設(shè)置控制信號(hào)時(shí)序,指定顯示緩 中區(qū)地址等,從而提供應(yīng)顯示設(shè)備適宜的數(shù)據(jù)信號(hào)和控制信號(hào)。文中根據(jù)需要為S3C2440A的LCD 控制器定義了一個(gè)專用結(jié)

14、構(gòu)體s3c2440fb_mach_info:struct s3c2440fb_mach_infou_long pixclock; /* 像素時(shí)鐘頻率 */u_char bpp; /* 每像素需要的bit數(shù) */u_short xres; /* 顯示器行分辨率 */u_short yres; /* 顯示器列分辨率 */u_char hsync_len; /* 行同步信號(hào)的長(zhǎng)度 */u_char vsync_len; /* 幀同步信號(hào)的長(zhǎng)度 */u_char left_margin;/* 從本行圖象數(shù)據(jù)輸出結(jié)束到下一行的行同步信號(hào)開始之間的像素時(shí)鐘數(shù) */u_char right_margin;

15、/* 從行同步信號(hào)結(jié)束到該行的圖象數(shù)據(jù)開始輸出之間的像素時(shí)鐘數(shù)*/u_char upper_margin;/*從本幀圖象數(shù)據(jù)輸出結(jié)束到下一幀的幀同步信號(hào)開始之間的無(wú)效行數(shù) */u_char lower_margin; /*從幀同步信號(hào)結(jié)束到該幀圖象數(shù)據(jù)開始輸出之間的無(wú)效行數(shù)*/u_char sync;struct s3c2440fb_lcd_reg reg; /*S3C2440ALCD控制存放器結(jié)構(gòu)體 */; 驅(qū)動(dòng)程序通過(guò)定義一個(gè)s3c2440fb_mach_info結(jié)構(gòu)變量并給該變量賦值來(lái)完成LCD控制器的初始化。3.2 編寫結(jié)構(gòu)體fb_info中fb_ops對(duì)應(yīng)的成員函數(shù) 對(duì)于本嵌入式系統(tǒng)

16、的實(shí)現(xiàn),需要以下5個(gè)函數(shù)static struct fb_ops s3c2440fb_ops=owner:THIS_MODULE,/*THIS_MODULE宏用來(lái)防止驅(qū)動(dòng)模塊在使用狀態(tài)下被卸載 /fb_get_fix:s3c2440fb_get_fix,fb_get_var:s3c2440fb_get_var,fb_set_var:s3c2440fb_set_var,fb_get_cmap:s3c2440fb_get_cmap,fb_set_cmap:s3c2440fb_set_cmap,;結(jié)構(gòu)體fb_ops在Linux內(nèi)核include/linux/fb.h中定義。 這些函數(shù)都是用來(lái)設(shè)置和獲

17、取驅(qū)動(dòng)層接口fb_info結(jié)構(gòu)體中的成員變量的,前文已提過(guò)當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行ioctl操作時(shí)會(huì)調(diào)用它們。對(duì)于fb_get_fix()和fb_get_var()應(yīng)用程序傳入的是fb_info中的結(jié)構(gòu)變量fix和var,fb_set_var()函數(shù)那么是對(duì)var變量進(jìn)行設(shè)置。同樣fb_get_cmap()和fb_set_cmap()那么是對(duì)結(jié)構(gòu)變量cmap內(nèi)容進(jìn)行讀取和設(shè)置。在這5個(gè)函數(shù)中,fb_set_var()設(shè)置了顯示設(shè)備的顯示模式,是最重要的一個(gè)函數(shù)。文中根據(jù)需要為當(dāng)前顯示硬件定義一個(gè)專有結(jié)構(gòu)體s3c2440fb_info,該結(jié)構(gòu)體包括一個(gè)fb_info結(jié)構(gòu)變量,及其它與所選LCD硬

18、件有關(guān)的所有參數(shù).因此結(jié)構(gòu)體fb_ops中成員函數(shù)對(duì)結(jié)構(gòu)體fb_info的操作實(shí)際上就是對(duì)結(jié)構(gòu)體s3c2440fb_info的操作。該結(jié)構(gòu)體定義如下:struct s3c2440fb_infostruct fb_info fb; /* fb_info結(jié)構(gòu)變量 */signed int currcon; /* 當(dāng)前終端控制臺(tái)的序號(hào)*/u_int max_xres;/*屏幕能顯示的最大行分辨率 */u_int max_yres;/* 屏幕能顯示的最大列分辨率 */struct s3c2440fb_lcd_reg reg;/*S3C2440A LCD控制存放器 */* 其他與LCD硬件有關(guān)的參數(shù) *

19、/;結(jié)構(gòu)體fb_ops中的成員函數(shù)流程相似,本文在此僅給出函數(shù)s3c2440fb_set_var()的流程圖和程序代碼。函數(shù)s3c2440fb_set_var()流程圖如圖6所示:static struct fb_ops s3c2440fb_ops=owner:THIS_MODULE,/*THIS_MODULE宏用來(lái)防止驅(qū)動(dòng)模塊在使用狀態(tài)下被卸載 /fb_get_fix:s3c2440fb_get_fix,fb_get_var:s3c2440fb_get_var,fb_set_var:s3c2440fb_set_var,fb_get_cmap:s3c2440fb_get_cmap,fb_set

20、_cmap:s3c2440fb_set_cmap,;結(jié)構(gòu)體fb_ops在Linux內(nèi)核include/linux/fb.h中定義。 這些函數(shù)都是用來(lái)設(shè)置和獲取驅(qū)動(dòng)層接口fb_info結(jié)構(gòu)體中的成員變量的,前文已提過(guò)當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行ioctl操作時(shí)會(huì)調(diào)用它們。對(duì)于fb_get_fix()和fb_get_var()應(yīng)用程序傳入的是fb_info中的結(jié)構(gòu)變量fix和var,fb_set_var()函數(shù)那么是對(duì)var變量進(jìn)行設(shè)置。同樣fb_get_cmap()和fb_set_cmap()那么是對(duì)結(jié)構(gòu)變量cmap內(nèi)容進(jìn)行讀取和設(shè)置。在這5個(gè)函數(shù)中,fb_set_var()設(shè)置了顯示設(shè)備的顯示模式

21、,是最重要的一個(gè)函數(shù)。文中根據(jù)需要為當(dāng)前顯示硬件定義一個(gè)專有結(jié)構(gòu)體s3c2440fb_info,該結(jié)構(gòu)體包括一個(gè)fb_info結(jié)構(gòu)變量,及其它與所選LCD硬件有關(guān)的所有參數(shù).因此結(jié)構(gòu)體fb_ops中成員函數(shù)對(duì)結(jié)構(gòu)體fb_info的操作實(shí)際上就是對(duì)結(jié)構(gòu)體s3c2440fb_info的操作。該結(jié)構(gòu)體定義如下:struct s3c2440fb_infostruct fb_info fb; /* fb_info結(jié)構(gòu)變量 */signed int currcon; /* 當(dāng)前終端控制臺(tái)的序號(hào)*/u_int max_xres;/*屏幕能顯示的最大行分辨率 */u_int max_yres;/* 屏幕能顯示

22、的最大列分辨率 */struct s3c2440fb_lcd_reg reg;/*S3C2440A LCD控制存放器 */* 其他與LCD硬件有關(guān)的參數(shù) */;結(jié)構(gòu)體fb_ops中的成員函數(shù)流程相似,本文在此僅給出函數(shù)s3c2440fb_set_var()的流程圖和程序代碼。函數(shù)s3c2440fb_set_var()流程圖如圖6所示:圖6 函數(shù)s3c2440fb_set_var()流程圖函數(shù)s3c2440fb_set_var()程序如下:static int s3c2440fb_set_var(struct fb_var_screeninfo *var,int con,struct fb_in

23、fo *info)struct s3c2440fb_info *fbi= (struct s3c2440fb_info *)info; /* 將顯示模式讀入結(jié)構(gòu)體s3c2440fb_info*/struct fb_var_screeninfo *dvar= get_con_var(&fbi-fb,con);int err;err= s3c2440fb_validate_var(var,fbi); /* 顯示模式是否有效 */if(err) /* 無(wú)效返回 */return err;dvar-red=fbi-rgbrgbidx-red; /* 將顯示參數(shù)寫入結(jié)構(gòu)體fb_var_screeninf

24、o */dvar-green=fbi-rgbrgbidx-green;dvar-blue=fbi-rgbrgbidx-bIue;dvar-transp=fbi-rgbrgbidx-transp;display-var= *dvar;s3c2440fb_hw_set_var (dvar,fbi); /* 設(shè)置RGB顏色信息,設(shè)置S3C2440A的LCD控制存放器 */return 0;3.3 編寫初始化函數(shù) 初始化函數(shù)首先初始化LCD控制器和結(jié)構(gòu)體s3c2440fb_info,填充s3c2440fb_info中結(jié)構(gòu)變量fb_info的成員變量,這些成員變量的參數(shù)值由LCD顯示器廠商的手冊(cè)獲得。然

25、后通過(guò)consistent_alloc函數(shù)分配一片連續(xù)的空間。顯示系統(tǒng)采用的LCD顯示方式為320240,16位彩色。需要分配的顯示緩沖區(qū)為32024016/8=150k字節(jié),緩沖區(qū)通常分配在片外SDRAM 中,起始地址和末地址保存在LCD控制器存放器LCDSADDR1和LCDSADDR2里,最后調(diào)用register_framebuffer(&fbi-fb)將fb_info結(jié)構(gòu)變量fb登記入內(nèi)核。初始化函數(shù)如下:int _init s3c2440fb_init(void)(struct s3c2440fb_info *fbi;int ret;fbi=s3c2440fb_init_fbinfo(

26、); /* 初始化LCD控制器和s3c2440fb_info */ret=s3c2440fb_map_video_memory (fbi); /*分配150K字節(jié)大小的LCD顯示緩沖區(qū) */if(ret) /* 出錯(cuò)返回 */if(fbi)kfree(fbi);return ret;s3c2440fb_set_var (&fbi-fb.var,-1,&fbi-fb);ret=register_framebuffer(&fbi-fb);/* 將fb注冊(cè)到內(nèi)核 */if(ret) /* 出錯(cuò)返回 */if(fbi)kfree(fbi);return ret;printk (Installed S3

27、C2440 frame bufferkn);/*在控制臺(tái)顯示安裝顯示驅(qū)動(dòng)程序成功 */MOD_INC_USE_COUNT;/* 該宏用來(lái)管理自己被使用的計(jì)數(shù),模塊在被使用時(shí),是不允許被卸載的 */return 0;4 驅(qū)動(dòng)(q dn)程序嵌入(qin r)到內(nèi)核 驅(qū)動(dòng)程序嵌入到內(nèi)核有兩種方式(fngsh):一種是直接編譯入內(nèi)核,隨Linux啟動(dòng)(qdng)的時(shí)候加載;另一種(y zhn)是編譯成模塊,動(dòng)態(tài)加載。如果要將其直接編譯入Linux內(nèi)核,那么需要將源代碼文件拷貝到Linux內(nèi)核源代碼的相應(yīng)路徑里,并修改Makefile文件和config.in文件,這種方法會(huì)增加內(nèi)核的大小,而且不能動(dòng)態(tài)

28、卸載,不利于調(diào)試,所以目前一般推薦采用第二種方式,如果這樣,在本驅(qū)動(dòng)程序的最后還需要加上宏module_init(s3c2440fb_init);這是告訴編譯器該驅(qū)動(dòng)程序的入口地址為初始化函數(shù)s3c2440fb_init()。需要注意的是初始化函數(shù)必須在宏module_init(s3c2440fb_init)使用前定義,否那么會(huì)出現(xiàn)編譯錯(cuò)誤。而且在編譯時(shí)至少要加上-D_KERNEL_ -DMODULE -DLINUX這幾個(gè)參數(shù),編譯完成后通過(guò)insmod命令將驅(qū)動(dòng)模塊加載進(jìn)內(nèi)核, 通過(guò)rmmod命令卸載驅(qū)動(dòng)模塊。5 應(yīng)用程序?qū)彌_設(shè)備的使用 Linux將所有的設(shè)備都當(dāng)作文件進(jìn)行處理,各種設(shè)備通常以文件的形式放在/dev目錄下。幀緩沖設(shè)備和其它位于/dev目錄下面的設(shè)備類似,其驅(qū)動(dòng)程序的設(shè)備文件一般是/dev/fb0、/dev/fb1等等。在應(yīng)用程序中,操作/dev/fb的一般流程如圖7所示:圖7 應(yīng)用程序?qū)彌_設(shè)備的操作流程其典型應(yīng)用程序如下:Main()int fbfd=O;struct fb_var_screeninfo vinf

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論