版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
LCD設(shè)備驅(qū)一、LCD屏幕基本概1、顯示屏分常用的顯示屏分為LED顯示屏和液晶顯示屏倆大類,LED是發(fā)光二極管的縮寫他是一種通過控制半導(dǎo)體發(fā)光二極管的顯示方式由鎵(Ga)與砷(As、磷(P、氮(N、銦(In)的化合物制成的二極管,當(dāng)電子與空穴復(fù)合時能輻射出可見光,因而可以用來制成發(fā)光二極管。在電路及儀器中作為指示燈,或者組成文字或數(shù)字顯示。能主動發(fā)光且有一定亮度,亮度又能用電壓(或電流調(diào)節(jié),本身耐沖擊、振動、(10萬小時,所以在大型的顯示設(shè)備中,尚無其他的顯示方式與LED顯示方式匹敵。液晶顯示屏英文統(tǒng)稱LCD,屬于屏幕顯示器的一種,常用于電視機(jī)和計算機(jī)的屏幕顯示,LCD主要有TN(扭轉(zhuǎn)向列型)、SN(超扭轉(zhuǎn)向列型)、DSTN(雙層超向列陣)和TFT(薄膜式晶體管型)四種顯示器其中TFT屏是目前嵌入式系統(tǒng)應(yīng)用的主流。LCD常的接口類型有RGB、CPU、SPI、MIPI、MDDI、LVDS和VGA。詳解見網(wǎng)頁介紹。3、LCD屏常用參數(shù):PPI是每平方英寸所擁有的像素數(shù) 分辨 是每個像素使用多少位來表示其顏 像我們這個LCD屏資料位置手冊位置\光盤\光盤C\Datasheet\LCD\S700-lcd接口的介查閱上述資料可以知道我們這個LCD屏:分辨率為FrameBuffer的原在linux系統(tǒng)中LCD這類設(shè)備稱為幀緩沖設(shè)備,英文frameBuffer設(shè)備frameBuffer2.2.xx ,將其映射到進(jìn)程地址空間Framebuffer設(shè)備驅(qū)動來完成的。幀緩沖驅(qū)動的功能就是分配一塊內(nèi)存作顯存,然后設(shè)置LCD控制器的寄存器,LCD顯示器就會不斷從顯存中獲得數(shù)據(jù),并顯示在LCD屏上Framebuffer模仿顯卡的功能,將顯卡硬件結(jié)構(gòu)抽象掉,可以通過Framebuffer的讀寫直接幀緩沖設(shè)備為標(biāo)準(zhǔn)的字符型設(shè)備,在Linux中主設(shè)備號29,定義在/include/linux/major.h中的FB_MAJOR,對應(yīng)于/dev/fb%d設(shè)備文件,次設(shè)備號定義幀緩沖的個數(shù),最大允許有32個對程序員和Liux系統(tǒng)來說,famebufer設(shè)備與其他的文件沒有區(qū)別,可以通過配置對famebufer設(shè)備文件完成對硬件的參數(shù)設(shè)置,famebufer映射可以通過ea(和writ()進(jìn)行數(shù)據(jù)的,或者通過mmap()函數(shù)將內(nèi)部數(shù)據(jù)映射到應(yīng)用程序空間,通過icl()可以獲得顯示設(shè)備的一些固定信息(比如顯示內(nèi)存大小、與顯示模式相關(guān)的可變信息(比如分辨,以及偽彩色模式下的調(diào)色板信息等等,用mmap()函數(shù)把內(nèi)存中的圖像數(shù)據(jù)直接映射到famebufer并顯示出來耗時短、效率高。FrameBufferLinux中的實現(xiàn)和機(jī)制Framebuffer對應(yīng)的源drivers//下。fbcon.c,在這個下還有與各種顯卡驅(qū)動相關(guān)的源文件。幀緩沖(FrameBuffer)驅(qū)動程序主要依4個數(shù)據(jù)結(jié)構(gòu)。這些結(jié)構(gòu)定義在include/linux/fb.h程序內(nèi)。它們分別是fb_info、fb_var_screeninfo、fb_fix_screeninfo和fb_monospecs。后3個結(jié)構(gòu)可以在用戶空間,結(jié)構(gòu)fb_info只能在內(nèi)核空間。fb_info內(nèi)部定義了structfb_ops,結(jié)構(gòu)fb_ops成員就是由一系列Framebuffer操作函數(shù)組成。下圖是Framebuffer的簡單層次圖。層的代碼 為主,層包括許多與具體硬件無關(guān)的代碼,并且提供API給用戶空間。用戶空間使用系統(tǒng)調(diào)用,系統(tǒng)調(diào)用會使用相應(yīng)的API函數(shù),最后會調(diào)用動層實現(xiàn)功能。對于不同的設(shè)備,驅(qū)動層的代碼將有所不同。幀緩沖設(shè)備驅(qū)動有固定編程框架:)(二)(三)使用層提供函數(shù)這個結(jié)構(gòu)內(nèi)核自帶tiny4412lcd驅(qū)動移tiny4412lcd驅(qū)動也是采用平臺設(shè)備驅(qū)動模型Linux3.5內(nèi)核源碼中已經(jīng)帶有這個驅(qū)動,我們要做的工作是如何使用這個驅(qū)動,內(nèi)核自帶的lcd驅(qū)動代碼路徑是LinuxLCD驅(qū)動是做一個顯示子系統(tǒng),設(shè)備稱為幀緩沖設(shè)備,這類設(shè)備所占用顯存空間是4G空間中的一部分,和獨(dú)立顯卡的顯存是不相同的。驅(qū)動探測函數(shù)簡要分析現(xiàn)在我們來簡要分析一下內(nèi)核自己帶的LCD驅(qū)動的探測函數(shù)框架,主要是為了進(jìn)行驅(qū)動移植。上一章節(jié)我們已經(jīng)學(xué)習(xí)過平臺設(shè)備驅(qū)動模型,知道這種模型的設(shè)備驅(qū)動程序是分層的,分為驅(qū)動層和設(shè)備層。內(nèi)核一般帶有驅(qū)動層代碼,缺少設(shè)備層代碼。而從前面學(xué)習(xí)的平臺模型的led驅(qū)動程序中可以總結(jié)出編寫設(shè)備層需要編寫什么內(nèi)容,比如是否要傳遞平臺資源?傳遞多少個資源?是否要傳遞?的結(jié)構(gòu)又是什么樣的結(jié)構(gòu)?這些問題去哪里找答案呢?仔細(xì)思面的平臺模型的led驅(qū),會發(fā)這些問題答案主要是從兩個方面可以得到:設(shè)備硬件原理圖(各種寄存器的配置驅(qū)動層的探測函以下就先對 的平臺驅(qū)動層探測函數(shù)進(jìn)行簡要的結(jié)構(gòu)分析,找出以上的問題答案添加設(shè)備層平臺資添加設(shè)備層平臺設(shè)備結(jié)設(shè)置設(shè)備層lcd平臺我們找到設(shè)備層的結(jié)構(gòu)體 platform_driver我們發(fā)現(xiàn)里面的id_table被賦值了,也就是總線就不去匹配name了,那么我們跳進(jìn)去在整個工程里查找exynos4-fb,得到下面的搜索結(jié)我們選中總結(jié):這一步做的事情就是s5p_device_="exynos4-那么s5p_device_fimd0是什么?跳進(jìn)去發(fā)現(xiàn)他就是我們設(shè)備層的結(jié)構(gòu)體在文件:arch\arm\Plat-samsung\Devs.c下,等會我們再對這個文件進(jìn)行詳細(xì)研究。現(xiàn)在就完成了驅(qū)動層的name(可以和多個設(shè)備配對)和設(shè)備層name配對。現(xiàn)在問題來了:下面的函數(shù)什么時候被調(diào)用?(只有被調(diào)用了才會為設(shè)備層的name賦值嘛那么我們只能看它屬于哪個函數(shù),這個函數(shù)被調(diào)用了,他自然也就被調(diào)用了。往上找:,那么這個函數(shù)被誰調(diào)用在本文件中找exynos4_map_io: 跳進(jìn)去exynos_init_io這個函數(shù)沒有被static修飾,所以,我們需要在整個工程中跳進(jìn)去看到它的主調(diào)函數(shù)smdk4x12_map_io前邊有static修飾,在本文件中找跳進(jìn)去當(dāng)前是在arch\arm\Mach-exynos\mach-注:一般找到這里就算是找到頭了,因為MCIE_SRT是內(nèi)核加載到板上優(yōu)先于驅(qū)動加載的代碼然后我們可以看這一層的Makefile可以找到這個文件的編譯我們進(jìn)入系統(tǒng) 下的lcd驅(qū)動平臺資源如何知道要什么資源?去驅(qū)動探測函數(shù)中找答案。(有需必有供探測函數(shù)很長,很多代碼都不懂,怎么辦找到第二從上代碼可以一、lcd設(shè)備層代碼一定要傳遞一個內(nèi)存資源; LCD模塊的中斷編號(注意不是sc的片上系統(tǒng)的中斷號,而是liux內(nèi)核源碼中重新編號的LCD中斷號,直接使用內(nèi)核定義的號就可以了,但是內(nèi)存資源是一個內(nèi)存地址空間范圍,到底應(yīng)用傳遞具體是從哪個地址開始到哪個地址結(jié)束,這個還不能確定。因為和LCD相關(guān)的內(nèi)存資源兩個:一個是LCD接口的IO口配置使用到GPCGPD的相關(guān)寄存器;一個是LCDres=ltfrm_get_esurce(de,IOREORCE_MEM,0);把獲取到的內(nèi)存資源賦值給e,然后又用sf->egs=devm_reuest_nd_ioemap(e,es);對內(nèi)存地址進(jìn)行申請和映射,所以我們下邊就找和sf->regs相關(guān)的代碼,在探測函數(shù)中有以下代碼:跳進(jìn)去發(fā)現(xiàn)他是那么他是什么?打開4412手冊上LCDLCD模塊控制器所用占用的內(nèi)存空間,而不是LCD模塊的IO口占用的內(nèi)存空間。lcd驅(qū)動如何知道要什么的樣去驅(qū)動探測函數(shù)中找答案。(有供才有需,由需找供發(fā)被中的pd發(fā)被中的pd變量接我們跳入structs3c_fb_platdata這個結(jié)構(gòu)體,看他里面有什么:路徑在arch\arm\plat-samsung\include\Plat\Fb.h這個結(jié)構(gòu)體就存放了從設(shè)備層傳遞過來的所有數(shù)據(jù),我們一個一個分void(*setup_gpio)(void);LCDIO口功能。前面分析內(nèi)存資源時候也知道沒有傳入IO口所占用內(nèi)存資源,所以可以肯定這個指針就是用來設(shè)置lcd所占用IO功能的。struct *win[S3C_FB_MAX_WIN];,發(fā)現(xiàn)他是一個指針數(shù)組,里面每個素都是指針,我們進(jìn)入這個數(shù)據(jù)類型去看這個結(jié)構(gòu)體就是存放了各個窗口的寄存器配置值指針structfb_ lcd工作時序參數(shù)分析要驅(qū)動一個TFT屏,首先我們得先認(rèn)識一下LCD控制器的工作時序LCD提供的外部接口信號說明VSYNC:垂直同步信號(TFT)/幀同步信號(STN);HSYNC:水平同步信號(TFT)/行同步脈沖信號(STN);VCLK:象素時鐘信號(TFT/STN);VD[23:0]:LCD像素數(shù)據(jù)輸出端口 VDEN:數(shù)據(jù)使能信號(TFT)/LCD驅(qū)動交流偏置信號(STN)/SECTFTLEND:行結(jié)束信號(TFT)/SECTFT很多排列整齊的點(diǎn)一行一行組成,這些點(diǎn)稱之為像素。那么這幅圖在LCD上的顯示原理就是:LCD上顯示,在上面的時序圖上用時間線表示就為VCLK,我們稱之為像素時鐘信號;當(dāng)顯示指針一直顯示到矩形的右邊就結(jié)束這一行,那么這一行的動作在上面的時圖中就稱之為1如此類推,顯示指針就這樣一行一行的顯示至矩形的右下角才把一副圖顯示完成。因此,這一行一行的顯示在時間線上看,就是時序圖上的HSC;只是為了將圖像持續(xù)的顯示在LCD上)。那么這一副一副的圖像就稱之為幀,在時同樣的,在幀與幀切換之間也是需要一定的時間的,我們稱之為幀切換,那 整個顯示的過程在時間線上看,就可表示為時序圖上 VSYNC上面時序圖上各時鐘延時參數(shù)的含義如下:(這些參數(shù)的值,LCD產(chǎn)生廠商會提供相應(yīng)的)VBPD(verticalbackporch):表示在一幀圖像開始時,垂直同步信號以后的無效的行數(shù),對應(yīng)驅(qū)動中的upper_margin;VFBD(verticalfrontporch):表示在一幀圖像結(jié)束后,垂直同步信號以前的無效的行數(shù),對應(yīng)驅(qū)動中的lower_margin;HBPD(horizontalbackporch):表示從水平同步信號開始到一行的有效數(shù)據(jù)開始之間的VCLK的個數(shù),對應(yīng)驅(qū)動中的left_margin;HFPD(horizontalfrontporth):表示一行的有效數(shù)據(jù)結(jié)束到下一個水平同步信號開始之間的VCLK的個數(shù),對應(yīng)驅(qū)動中的right_margin;中的hsync_len;下面看咱們的屏上面的值lcd的廠家一般會給出像素時鐘也一定會給M,LinuxpsPS。一般取中間值。10^6DCLK(單位是M)→10^6/33.3補(bǔ)充:ms(毫秒),μs(微秒),ns(納秒),ps(皮秒1秒10^3ms10^6μs10^9ns1/頻率=周期:1/(33.3*10^6)=周期(秒初始化資源、初始化設(shè)備結(jié)構(gòu)體 platform_device)、設(shè)備:定義平臺設(shè)備:arch\arm\Plat-samsung\Devs.c(發(fā)現(xiàn)里面并沒有初始 平臺設(shè)備:arch\arm\Mach- Mach-我們跳到platform_add_devices函數(shù)初始化設(shè)備數(shù)據(jù):定義結(jié)構(gòu):arch\arm\Mach- Mach-設(shè)置:arch\arm\Mach- Mach-我們跳入這個剛正好就是我們上邊定義的設(shè)備層結(jié)構(gòu)體platform_device;這一步做的就是把數(shù)據(jù)插入到設(shè)備層結(jié)構(gòu)體中。我們跳進(jìn)去,看是否真的是這樣做的:發(fā)現(xiàn)里面只是做了一下內(nèi)存的檢測后就直接把數(shù) 給了結(jié)構(gòu)體s5p_device_fimd0結(jié)構(gòu)在devs.c中定義,而mach-tiny4412.c中定義, 所以要在注冊平臺設(shè)備前把平臺數(shù)據(jù)設(shè)置到平臺結(jié)構(gòu)中 在注冊前調(diào)(3)(3)具體定義:arch/arm/mach-exynos/mach-注意:少設(shè)置像素時鐘,所以一定還有其他地方設(shè)置時鐘。我們?nèi)偛旁O(shè)置的地方去看:發(fā) tiny4412_fb_init_pdata(&smdk4x12_lcd0_pdata);也對進(jìn)行了設(shè)置,我們跳進(jìn)LCD設(shè)備驅(qū)動分析我們先看一下Linux下Framebuffer驅(qū)動的總體框架,可以用下圖來描述Linux中也可以看做是一個完整的子系統(tǒng)fbmem.cs3c-fb.c組fbmem.c向上給應(yīng)用程序提供完善的設(shè)備文件操作接口(即對frameBuffer設(shè)備進(jìn)行read、write、ioctl等操作)Linuxfbmem.c文件中實現(xiàn);向下提供了硬件操作的接LinuxLCD控制器硬件進(jìn)fbmem.c是內(nèi)核已經(jīng)實現(xiàn)框架: 這個文件是驅(qū)動人員來編寫的向下提供統(tǒng)一的接framebuffer設(shè)備驅(qū)動主要是填充fb_info結(jié)構(gòu)的內(nèi)容,及實現(xiàn)fb_ops結(jié)構(gòu)里的函數(shù)。structfb_infoint從幀緩沖設(shè)備驅(qū)動程序結(jié)構(gòu)看,該驅(qū)動主要跟f_info結(jié)構(gòu)體有關(guān),該結(jié)構(gòu)體記錄了幀Linux中,每一個幀緩沖設(shè)備都必須對應(yīng)一個f_inf,fb_info在/structfb_infointintstructmutexlock; /*Lockforopen/release/ioctlfuncs*/structmutexmm_lock; /*Lockforfb_mmapandsmem_*fields*/structfb_var_screeninfovar; *LCD可變參數(shù)結(jié)構(gòu)體*/structfb_fix_screeninfofix; /*LCD固定參數(shù)結(jié)構(gòu)體*/structfb_monspecsmonspecs; /*LCD顯示器標(biāo)準(zhǔn)*/structwork_structqueue; structfb_pixmappixmap; /*圖像硬件mapper*/structfb_pixmapsprite; /*光標(biāo)硬件mapper*/structfb_cmap structlist_head /*modeliststruct mode *當(dāng)前的顯示模式#ifdef /*對應(yīng)的背光設(shè)備/*Backlightlevelcurve*/structmutexbl_curve_mutex; #ifdefstructdelayed_workdeferred_work; structfb_deferred_io*fbdefio;structfb_ops /*對底層硬件操作的函數(shù)指針structdevice /*內(nèi)嵌的設(shè)備模型structdevice /*fb設(shè)備intclass_flag; /*privatesysfsflags*/#ifdefCONFIG_FB_TILEBLITTINGstructfb_tile_ops*tileops; iomem /*虛 址unsignedlongscreen_size; /*LCDIO映射的虛擬內(nèi)存大小*/void*pseudo_palette; /*偽16色顏色表*/#define u32 /*LCD的掛起或恢復(fù)狀態(tài)void /*fbconuse-onlyprivateareavoid /*LCD驅(qū)動的私有數(shù)據(jù)struct{unsignedintstructstructapertureresource_size_t}}其中,比較重要的成員有structfb_var_screeninfovar、structfb_fix_screeninfofix和structfb_ops*fbops,他們也都是結(jié)構(gòu)體。下面我們一個一個的來看。LCD設(shè)備驅(qū)動可變參數(shù)結(jié)構(gòu)structstructfb_var_screeninfo{u32xres;u32/*可見屏幕一行有多少個像素點(diǎn)/*可見屏幕structfb_var_screeninfo{u32xres;u32/*可見屏幕一行有多少個像素點(diǎn)/*可見屏幕一列有多少個像素點(diǎn)u32u32/*虛擬屏幕一行有多少個像素點(diǎn)/*虛擬屏幕一列有多少個像素點(diǎn)/*虛擬到可見之間的偏移u32 /*虛擬到可見屏幕之間的行偏移u32 /*虛擬到可見屏幕之間的列偏移u32u32/*每個像素的位數(shù)即/*非0時,指的是灰度structfb_bitfieldred;structfb_bitfieldgreen;structfb_bitfieldblue;structfb_bitfieldtransp;u32nonstd;u32height;u32/*fb緩存R位域/*fb緩存G位域/*fbB位域/*0非標(biāo)準(zhǔn)像素格式/*see/*高度/*寬度u32/*(OBSOLETE)seefb_info.flags/*除pixclock本身外,其他都以像素時鐘為單位u32 /*像素時鐘(皮秒u32left_margin; /*左邊距,對應(yīng)TFT控制器時序的水平前沿信*/u32right_margin; /*右邊距,對應(yīng)TFT控制器時序的水平后沿信*/u32 /*上邊距,對應(yīng)TFT控制器時序的垂直前沿信u32 /*下邊距,對應(yīng)TFT控制器時序的垂直后沿信u32u32u32u32u32/*see /*see forfuturecompatibility這個結(jié)構(gòu)的存放的參數(shù)大部分就是TFT屏的時序參數(shù),驅(qū)動程序者根據(jù)自己使用的屏的資LCD設(shè)備驅(qū)動固定參數(shù)結(jié)構(gòu)structchar /*字符串形式的標(biāo)識符,實際上就是lcd設(shè)備的別名unsignedlong /*fb緩存的開始位置(物理地址)u32u32u32type_aux;u32visual;u16xpanstep;u16ypanstep;u16u32unsignedlong/*fb緩存的長度/*see/*InterleaveforinterleavedPlanes/*see/*zeroifnohardware/*zeroifnohardware/*zeroifnohardware/*/*內(nèi)存映射IO的開始位置u32u32/*內(nèi)存映射IO的長度/*Indicatetodriver /*specificchip/cardwehave forfuturecompatibility以上結(jié)構(gòu)體中比較重要的成員是smem_sat,smem_len,line_length,mmi_srt。這個結(jié)構(gòu)是LCD固定參數(shù),在LCD正常使用運(yùn)行期間是不能修改。所以這些值一般是在驅(qū)動程序的初始化階段完成填充,當(dāng)lcd工作起來后就不能再修改了。5.4LCDstructfb_opsfb_ops結(jié)構(gòu)體是對底層硬件操作的函數(shù)指針,該結(jié)構(gòu)體中定義了對硬件的操作有structstructfb_ops/*open/releaseandusagemarkingstructmoduleint(*fb_open)(structfb_info*info,intuser);int(*fb_release)(structfb_info*info,intuser);/*lcdssize_t(*fb_read)(structfb_info*info, user*buf,size_tcount,loff_tssize_t(*fb_write)(structfb_info*info,constchar user*buf,size_tcount,loff_t 檢查可變參數(shù),如果不支持則進(jìn)行修正/*把設(shè)置的可變參數(shù)值更新到硬件寄存器中,使之有效/*設(shè)置顏色寄存器int(*fb_setcolreg)(unsignedregno,unsignedred,unsignedgreen,unsignedblue,unsignedtransp,structfb_info*info);/*setcolorregistersinbatch/*顯示黑白模式,一般要實現(xiàn)/*pandisplay/*void(*fb_fillrect)(structfb_info*info,conststructfb_fillrect/*把一個區(qū)域的內(nèi) 到另一個區(qū)域void(*fb_copyarea)(structfb_info*info,conststructfb_copyarea/*void(*fb_imageblit)(structfb_info*info,conststructfb_image/*int(*fb_cursor)(structfb_info*info,structfb_cursor/*LCDvoid(*fb_rotate)(structfb_info*info,int/*waitforblitidle,optional/*ioctlint(*fb_ioctl)(structfb_info*info,unsignedintcmd,unsignedlong/*/*Handle32bitcompatioctl(optional)int /*mmap/*lcd可變參數(shù)void(*fb_get_caps)(structfb_info*info,structfb_blit_caps*caps,structfb_var_screeninfo*var);/*teardownanyresourcestodowiththisframebuffer*/void(*fb_destroy)(structfb_info*info);控制器不屬于獨(dú)立顯卡類型,那這個結(jié)構(gòu)的很多成員都是不用實現(xiàn)的,比較像結(jié)構(gòu)的fb_open,fb_release,fb_read,fb_write等這些函數(shù)不用實現(xiàn),而是使用Framebuffer的層fnmem.c以上結(jié)構(gòu)中如果要實現(xiàn)和控制臺相關(guān)的功能,結(jié)構(gòu)中的fb_ceck_ar,fb_set_par,fb_lank,fb_curor,fb_illrect,f_cpaea,f_imagelit接口是要實現(xiàn)的,但是這幾個中除f_chec_varf_e_parfb_lak這三個要根據(jù)用戶自己的硬件特征來實現(xiàn)不同的代碼外,余下的都可以直接使用內(nèi)核中已經(jīng)實現(xiàn)的默認(rèn)函數(shù)。Linux內(nèi)核提供了register_framebuffer()和unregister_framebuffer()函數(shù)分別和注銷幀緩沖設(shè)備,這兩個函數(shù)都接受fb_info指針為參數(shù)。fb_var_screeninfo結(jié)構(gòu)體主要記錄用戶可以修改的控制器的參數(shù),比如屏幕fb_i_ceeinfn結(jié)構(gòu)在顯卡被設(shè)定模式后創(chuàng)建,它描述顯示卡的屬性,并FameBuffer模式,當(dāng)一個模式被設(shè)定后,內(nèi)存信息由顯卡硬件給出,內(nèi)存的位置等信息就不可以修改。fb_ops結(jié)構(gòu)體是對底層硬件操作的函數(shù)指針,用戶應(yīng)用可以使用ioctl()系統(tǒng)調(diào)ioctl()的這些操作的。LCD設(shè)備驅(qū)動probe函數(shù)詳細(xì)分析(了解我們找到設(shè)備層 結(jié)構(gòu)體 platform_driver跳進(jìn)去:取得id_table中的驅(qū)動數(shù)據(jù)結(jié)構(gòu)指針獲取分配私有數(shù)據(jù)結(jié)構(gòu)空間sfbdevm_kzalloc(devsizeof(structs3c_fbGFP_KERNEL保存私有數(shù)據(jù)結(jié)構(gòu)到平臺設(shè)備結(jié)構(gòu)中platform_set_drvdata(pdev,sfb->bus_clk=clk_get(dev,"lcd");獲取平臺資源,申請并且映射資源(LCD控制器res=platform_get_resource(pdev,IORESOURCE_MEM,0);sfb->regs=devm_request_and_ioremap(dev,res);獲取中斷資源(中斷號res=platform_get_resource(pdev,IORESOURCE_IRQ,硬件初始化pd->setup_gpio();//調(diào)用結(jié)構(gòu)io口配置函s3c_fb_clear_win(sfb,win);//清窗口for(win=0;win<(fbdrv->variant.nr_windows-1);{void iomem*regs=sfb->regs+sfb->variant.keycon;regs+=(win*8);wri(0xffffff,regs+WKEYCON0);}s3c_fb_set_rgb_timing(sfblcd時序參數(shù)到寄存器中5次,5個窗口,/dev/5fbx文件.分配結(jié)構(gòu)和窗口私有數(shù)據(jù)結(jié)構(gòu)以及調(diào)色板空主要:var,fix,fbops分配LCD的DMA緩沖區(qū),并且保存其虛擬地址及物理地址fbi->screen_base= bine(sfb->dev,size,&map_dma,GFP_KERNEL);fbi->fix.smem_start=map_dma;用填充fbinfo結(jié)構(gòu)參數(shù)來設(shè)置相應(yīng)LCD寄存器s3c_fb_set_par(fbinfo);//設(shè)置單個窗口的配幀緩沖設(shè)備ret=fbmem.c處于Fameufer設(shè)備驅(qū)動技術(shù)的中心位置.它為上層應(yīng)用程序提供系統(tǒng)調(diào)用也為下一層的特定硬件驅(qū)動提供接口;那些底層硬件驅(qū)動需要用到這兒的接口來向系統(tǒng)內(nèi)核注冊它們自己。fbmem.c為所有支持FameBuffer的設(shè)備驅(qū)動提供了通用的接口,避免重復(fù)工作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度注塑機(jī)設(shè)備轉(zhuǎn)讓及市場占有率提升合同樣本4篇
- 2025年度材料安全評價及風(fēng)險評估合同范本3篇
- 2025年度新能源項目土地租賃經(jīng)營合同范本4篇
- 2025年度生態(tài)環(huán)保型安置房建設(shè)一體化服務(wù)合同3篇
- 2024版海鮮采購合同
- 2025年度外墻藝術(shù)裝飾工程承攬合同4篇
- 2024維修公司環(huán)保設(shè)備維修人員勞動合同范本3篇
- 2024跨國物流倉儲服務(wù)全面合作框架協(xié)議
- 2025年度物流企業(yè)綠色包裝材料采購合同4篇
- 2025年度臨時設(shè)施搭建與場地租賃合同3篇
- 2024版塑料購銷合同范本買賣
- 【高一上】【期末話收獲 家校話未來】期末家長會
- JJF 2184-2025電子計價秤型式評價大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 有毒有害氣體崗位操作規(guī)程(3篇)
- 兒童常見呼吸系統(tǒng)疾病免疫調(diào)節(jié)劑合理使用專家共識2024(全文)
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 《華潤集團(tuán)全面預(yù)算管理案例研究》
- 2024-2025高考英語全國卷分類匯編之完型填空(含答案及解析)
- 二年級下冊加減混合豎式練習(xí)360題附答案
- 蘇教版五年級數(shù)學(xué)下冊解方程五種類型50題
評論
0/150
提交評論