关于framebuffer这几天学习的一点心得体会和疑惑

时间:2022-08-28 23:53:33

这几天一直在做 imx6q  的视频处理相关的东西,由于是首次实战liunx项目,感觉很乱,没有太多的头绪,学校里面学的都忘完成,呵呵。

学习过程中的几个疑惑:

一,实现UI层和视频的叠加处理是不是两个framebuffer的叠加?

其实这个问题的到现在还没有完全弄清楚到底UI图片和视频流叠加的实现的机理。但是通过对demo程序的分析,我还是初步实现了叠加。具体的程序来看,我的视频流跑在/dev/fb0上 然后写图片也是在/dev/fb0的的地址里面,然后通过设置全局的alpha值来实现叠加。 为什么在同一framebuffer里面,图片数据和视频数据可以共存,这个不清楚原理。

二,framebuffer的作用

今天主要参考了网上的文章,http://blog.csdn.net/jmq_0000/article/details/7104805    这里面对framebuffer有很好的说明。

我个人的理解,(水平有限,欢迎拍砖),framebuffer是liunx内核提供的一种机制,他可以把IPU(是不是还有GPU,VPU )的内存空间抽象出来,用户通过对它的映射到用户空间,来实现读写,比如改变一个点啊什么的。

三,如果说framebuffer抽象了ipu的内存空间的话,是不是说framebuffer是ipu对数据处理的最后存放的地方。那我们的/dev/vidoe16 17 (使用gst命令的时候往往会使用他来传参数实现显示输出)等又是怎么实现数据输出的的。

四,关于 fb.h 和mxfb.h的区别还行明晰。


关于驱动注册后的理解:

从framebuffer的驱动来看,首先在 某个framebuffer的驱动力会有 register_framebuffer()来实现驱动的注册。 注册过程:

1,首先判断是不是可以注册  if(num_registered_fb==FB_MAX)

2,通过num_registered_fb 来获取子设备号   fb_info->node=i; 

3,向内核注册设备,  fb_info->dev=device_create(fb_class,fb_info->device,MKDEV(FB_MAJOR,I),"fb %d",i);

4,调用驱动里面的init()函数。


关于应用程序调用open()的底层的相应:

1.调用open函数,会传设备的名称,通过解析会把主设备号和次设备号解析出来。

2.framebuffer中间层(fbmem.c)处理要打开那个具体的驱动然后打开具体驱动的open()函数。


疑问: probe 是什么时候调用的,干啥去了?