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.c
core.c中定义了platform_driver
static 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/
uevent
modalias
subsystem
power
driver
manager0
manager1
overlay0
overlay1
overlay2
microamps_requested_vdda_dac
display2
display1
display0
----------------------------------------------------
overlay0目录中为基本显示层的信息
overlay1和overlay2分别目录中分别是两个叠加显示层的信息
manager0和manager1中则提供了管理方面的功能
查看sys文件系统
/ # cat sys/devices/platform/omapdss/overlay0/name
gfx
gfx为graphics的含义,表示overlay0的名称为图形层,文件enable是一个可又控制的
# echo 0 > sys/devices/platform/omapdss/overlay0/enabled 关屏
# echo 1 > sys/devices/platform/omapdss/overlay0/enabled 开屏
4. 主显示驱动的framebuffer
drivers/video/omap2/omapfb
omafb.c, omapfb-sysfs.c, omapfb-ioctl.c, omapfb-main.c
omapfb-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,*/
};

omap 的framebuffer驱动程序相关推荐

  1. 驱动硬件Framebuffer驱动程序框架 skeletonfb.c 分析

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 Framebuffer驱动程序框架 skeletonfb.c 析分 近来想好好研究一下lcd驱动发开程过,lcd驱动发开重要就是fr ...

  2. Framebuffer原理、使用、测试系列文章

    FROM: http://bbs.chinaunix.net/viewthread.php?tid=1932291&extra=page%3D1%26amp%3Bfilter%3Dtype%2 ...

  3. LINUX framebuffer

    http://wangshh03.blog.163.com/blog/static/49103415201001231317484/ 一.FrameBuffer的原理 FrameBuffer 是出现在 ...

  4. 转--linux开启FrameBuffer

    转--linux开启FrameBuffer 色彩 640x400 640x480 800x600 1024x768 1280x1024 1600x1200 4bits ? ? 0x302 ? ? ? ...

  5. Framebuffer基础知识(三十)

    1.Framebuffer应用编程   在Linux系统中通过Framebuffer驱动程序来控制LCD.Frame是帧的意思,buffer是缓冲的意思,这意味着Framebuffer就是一块内存,里 ...

  6. Linux LCD驱动程序

    LCD操作原理 在Linux系统中通过Framebuffer(简称为fb,又叫显存)驱动程序来控制LCD. Frame是帧的意思,buffer是缓冲的意思,这意味着Framebuffer就是一块内存, ...

  7. Framebuffer的配置及应用

    * 一.FrameBuffer的原理*  FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口.  Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS ...

  8. framebuffer驱动全篇

    在后续的几篇里面会详细介绍如何编写一个显卡的驱动程序. framebuffer device在内核里面作为显卡驱动模型,许多函数和数据结构都是特定,正是这些特定的东西为我们的编程提供了方便. 要开发f ...

  9. Framebuffer原理、使用、测试

    Framebuffer的配置及应用 *一.FrameBuffer的原理*  FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口.  Linux是工作在保护模式下,所以用户态进程 ...

最新文章

  1. svn导出java项目_【SVN】导出项目后报错汇总
  2. java query api_ElasticSearch(十二) Bool Query JAVA API
  3. Java多线程(五) —— 线程并发库之锁机制
  4. 验证内容是否为空的多种办法 1210 c#
  5. 实时视频流(url)——延时显示
  6. 2004-11-28+ 认识Duwamish 7.0(3)错误处理
  7. 3.24学习记录(下午)
  8. ubuntu服务器文件权限设置密码,Ubuntu 开启 root 用户并开启 ssh 远程访问权限
  9. python 返回函数,偏函数,装饰器,itertools,collections,dir()type()
  10. 使用Ehome协议将设备接入EasyCVR无法注册成功原因排查
  11. 计算机青岛科技大学济南大学,山东考生在山东理工,济大,山东科技和青岛科技中该如何选择?...
  12. 数据集成-5-批数据集成
  13. 寒冬已过,2023抓住IT复苏新机会
  14. canvas - 基础知识 - 绘制剪纸图形
  15. linux下tomcat查看端口
  16. 仿QQ-----开发工具vs2005 相关下载
  17. 压缩图片大小(根据比例,或直接给定宽高)
  18. 青铜变王者,桌面云是如何逆袭的?
  19. 车站检查危险品 JAVA,第八周Java实验报告六
  20. 企业级虚拟化实战之KVM——从KVM到云计算OpenStack

热门文章

  1. 又一杀手级VR游戏?《星球大战:前线2》或支持VR玩法
  2. 新乡学院2019计算机报名,2019届毕业论文答辩工作安排
  3. R 进制表示与互转(二、八、十、十六进制)
  4. Windows10设置移动热点开机自动开启
  5. 实现链表的逆序的三种方式
  6. 记android开发环境搭建过程
  7. 最佳实战 | 如何使用微搭低代码基于模板开发小程序
  8. 「图像处理matlab函数」imclearborder与bwareaopen
  9. 怎么在远程服务器里面绑定域名,服务器怎么绑定域名?教你4步完成域名绑定!...
  10. 《扫雷》游戏初始化数据算法分析