5.7.7.framebuffer驱动框架分析2

5.7.7.1、register_framebuffer

(1)fb驱动框架开放给驱动编写着的注册接口
linux提供了register_framebuffer和unregister_framebuffer函数分别注册和注销帧缓冲设备
1174523-20180701193350911-1749872434.png

对于register_framebuffer而言,如果注册的帧缓冲设备超过了FB_MAX(32),则返回-ENXIO,注册成功则返回0

1174523-20180701193451161-921532080.png

(2)fb_check_foreignness
(3)remove_conflicting_framebuffers
(4)device_create
(5)fb_init_device
1174523-20180701200036542-1035528018.png
1174523-20180701200123712-380275950.png
1174523-20180701200241247-1815828335.png
每个从设备都需要传递一个fb_info的数据结构指针,其即代表单个显示缓存设备。从中,可以看到fb_info最终会存储到全局数组struct fb_info * registered_fb[FB_MAX]中,FB_MAX是32,从这里我们可以看出,framebuffer最多支持32个从设备。另外,每个从设备还会在/sys/class/graphics/设备类中创建一个设备,最终有mdev在/dev目录中生成对应的设备文件。假设M个从设备调用那个register_framebuffer接口,即会在/dev中生成M个设备文件,如/dev/fb0,/dev/fb1、/dev/fb2 等等。这M个设备的主设备号都是29,从设备则是0、1、2等等。
1174523-20180701200655272-1973794609.png

每个被注册的帧缓冲硬件设备在/dev/graphics目录下都有一个对应的设备文件fb。minor表示从设备号。 例如,第一个被注册的帧缓冲区硬件设备在/dev/graphics目录下都有一个对应的设备文件fb0。用户空间的应用程序就通过fb0设备文件操作帧缓冲区硬件设备,即将要显示的画面渲染到帧缓冲区硬件设备上去。
帧缓冲区控制台在内核中对应的驱动程序模块为fbcon: (drivers\video\console\Fbcon.c)
初始化:
1174523-20180701200831867-1978066302.png
这个函数除了会调用函数device_create来创建一个类别为graphics的设备fbcon之外,还会调用函数fb_register_client来监听帧缓冲区硬件设备的注册事件,这是由函数fbcon_event_notify来实现的,如下所示:
1174523-20180701200928900-1538754288.png
帧缓冲区硬件设备的注册事件最终由函数fbcon_fb_register来处理的,它的实现如下:
1174523-20180701201036675-1767199366.png
函数fbcon_select_primary用来检查当前注册的帧缓冲区硬件设备是否是一个主帧缓冲区硬件设备。如果是的话,那么久将它的信息记录下来。这个函数只有当指定了 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY编译选项是才有效,否则是一个空函数。
在linux内核中,每个控制台和每一个帧缓冲区硬件设备都有一个从0开始的编号,它们的初始对应关系保存在con2fb_map_boot中。控制台和帧缓冲区硬件设备的初始对应关系是可以通过设置内核启动参数来初始化的。在模块fbcon中, 还有另外一个全局数组con2fb_map,也是用来映射控制台和帧缓冲区硬件设备的对应关系,不过它映射的是控制台和帧缓冲区硬件设备的实际对应关系。
5.7.7.2、fb在sysfs中的接口
(1)device_attrs
(2)dev_set_drvdata和dev_get_drvdata,

fb_init_device
dev_set_drvdata(&pdev->dev, dev); //把设备相关信息放到设备结构体里最为私有数据保存起来

转载于:https://www.cnblogs.com/Ocean-Star/p/9251136.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值