linux fb设备(pandaboard)

fb设备主要作用是获取帧buffer, 并设置,用于显示。

fbmem是主要的框架层和抽象层。 每个具体的平台的帧设备是在调用platform_driver_register注册之后,由其probe函数调用create framebuffer将fbinfo设置给registered_fb(数组, 不同的fb设备有不同 的index)的, 在pandaboard中, 这个注册函数 是omapfb_create_framebuffer。

一些平台的帧设备比较复杂, 可以支持众多的显示设备。比如pandaboard, 支持dsi/lcd/hdmi等等。所有这些显示设备都被挂在dss上(有这个linux的总线)。

这些具体的设备通过omap的dipc的dma传送显示数据。至于hdmi另外还有专门的audio的dma。这些dma从sram或者sdram中搬数据到最终的显示设备。 而这些sram或者sdram就是所谓的帧buffer(帧缓冲区)。 显示设备保存在omapfb2_device的displays数组中(display all)。 最大10个。这个包括了omapfb_info中返回的display ys(ofbi->overlays[i]->manager->device, 乱取的名字, 为了和displa all区别). display ys在display设备的driver注册的时候被设置( dss_recheck_connections). 这里似乎发现如果同时连接lcd, hdmi, 将有一个会被覆盖!!!在fb操作时, 操作的就是这个display ys, 比如hdmi。

fb设备通常有两个帧缓冲区(由CONFIG_FB_OMAP2_NUM_FBS决定). 帧缓冲的size和物理首地址由def_vram参数在具体帧设备模块加载的时候决定。从代码看, 有几个帧缓冲区就有几个fb设备(device_create创建的设备节点)。

不同的fbinfo对应不同的fb设备, 与设备文件的minor节点对应。他们都在同一个omapfb2_device结构下。 pandaboard最多有10个fbinfo.尽管有几个不同的fbinfo, 但是从fb2display代码来看, 所有的都应该指向相同的display ys。

 

中断都被加进dispc的中断数组。这些中断在dispc硬件中断时被处理。

 

其中有个中断就是vsync, 这个会被android4.2的surfaceflinger的hwcomposer使用。 vsync中断处理函数调用vsync_work, 这个work会发kobject_uevent_env。 这样用户空间将知道这个vsync。

 

所有显示设备(hdmi/lcd等)挂在omapdss总线。

omap_dss_init时, 注册omapdss总线。并注册omap_dss_driver驱动, 这个驱动的probe函数omap_dss_probe将调用omap_dss_register_device注册所有相关的设备, 包括显示设备。这些设备是在平台初始化的时候加到omap_dss_board_info的(arch/arm下), omap_dss_register_driver注册相关的driver。这些设备将在omapfb_probe时加到omapfb2_device的display数组。

 

ofbi->num_overlays = 1;: 仅有一个overlay

 

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值