omap 的framebuffer驅動程式

來源:互聯網
上載者:User

1.幀緩衝的基本原理通過 framebuffer ,應用程式用 mmap 把顯存映射到應用程式虛擬位址空間,將要顯示的資料寫入這個記憶體空間就可以在螢幕上顯示出來; 驅動程式分配系統記憶體作為顯存;實現 file_operations 結構中的介面,為應用程式服務;實現 fb_ops 結構中的介面,控制和操作 LCD 控制器; 驅動程式將顯存的起始地址和長度傳給 LCD 控制器的寄存器 (一般由 fb_set_var 完成) 。 LCD 控制器會自動的將顯存中的資料顯示在 LCD 屏上。2.register_framebuffer(struct fb_info *fb_info)unregister_framebuffer(struct fb_info *fb_info)底層驅動程式的工作基本上是填充 fb_info 結構,然後註冊它3. OMAP 的 DSS顯示DSS(Display sub system)顯示子系統顯示子系統的庫在drivers/video/omap2/dss目錄中,主要包含了core.c, dispc.c, display.c, dpi.c, dss.c ,manager.c omapdss.c, overlay.c venc.ccore.c中定義了platform_driverstatic struct platform_driver omap_dss_driver = {.driver         = {.name   = "omapdss",.owner  = THIS_MODULE,},}它和arch/arm/mach-omap2中定義的平台裝置相匹配static struct platform_device my_dss_device = {.name          = "omapdss",.id            = -1,.dev            = {.platform_data = &my_dss_data,},};檔案系統的資訊包含在以下目錄中/ # ls sys/devices/platform/omapdss/ueventmodaliassubsystempowerdrivermanager0manager1overlay0overlay1overlay2microamps_requested_vdda_dacdisplay2display1display0----------------------------------------------------overlay0目錄中為基本顯示層的資訊overlay1和overlay2分別目錄中分別是兩個疊加顯示層的資訊manager0和manager1中則提供了管理方面的功能查看sys檔案系統/ # cat sys/devices/platform/omapdss/overlay0/name gfxgfx為graphics的含義,表示overlay0的名稱為圖形層,檔案enable是一個可又控制的# echo 0 > sys/devices/platform/omapdss/overlay0/enabled 關屏# echo 1 > sys/devices/platform/omapdss/overlay0/enabled 開屏4. 主顯示驅動的framebufferdrivers/video/omap2/omapfbomafb.c, omapfb-sysfs.c, omapfb-ioctl.c, omapfb-main.comapfb-main.c定義了platform_driver#define MODULE_NAME"omapfb"static struct platform_driver omapfb_driver = {.probe= omapfb_probe,.remove= omapfb_remove,.suspend= omapfb_suspend,.resume= omapfb_resume,.driver= {.name= MODULE_NAME,.owner= THIS_MODULE,},};與arch/arm/plat-omap/fb.c中的platform_device相匹配static struct platform_device omap_fb_device = {.name= "omapfb",.id= -1,.dev = {.dma_mask= &omap_fb_dma_mask,.coherent_dma_mask= ~(u32)0,.platform_data= &omapfb_config,},.num_resources = 0,};omapfb-main.c的調用static int omapfb_probe(struct platform_device *pdev){struct omapfb2_device *fbdev = NULL;omapfb_create_framebuffers(fbdev);/*調用 framebuffer_alloc 為fb_info結構體分配記憶體*/}static int omapfb_create_framebuffers(struct omapfb2_device *fbdev){struct fb_info *fbi;struct omapfb2_device *fbdev = NULL;fbdev = kzalloc(sizeof(struct omapfb2_device), GFP_KERNEL);fbi = framebuffer_alloc(sizeof(struct omapfb_info),fbdev->dev);...omapfb_fb_init(fbdev, fbdev->fbs[i]);//初始化//註冊framebufferfor (i = 0; i < fbdev->num_fbs; i++) {r = register_framebuffer(fbdev->fbs[i]);return r;}}static int omapfb_fb_init(struct omapfb2_device *fbdev, struct fb_info *fbi){fbi->fbops = &omapfb_ops;}static struct fb_ops omapfb_ops = {.owner          = THIS_MODULE,.fb_open        = omapfb_open,.fb_release     = omapfb_release,.fb_fillrect    = cfb_fillrect,.fb_copyarea    = cfb_copyarea,.fb_imageblit   = cfb_imageblit,.fb_blank       = omapfb_blank,.fb_ioctl       = omapfb_ioctl,.fb_check_var   = omapfb_check_var,.fb_set_par     = omapfb_set_par,.fb_pan_display = omapfb_pan_display,.fb_mmap= omapfb_mmap,.fb_setcolreg= omapfb_setcolreg,.fb_setcmap= omapfb_setcmap,/*.fb_write= omapfb_write,*/};

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.