【编撰】Directfb 深入 001 初始化简介 01
来源:互联网 发布:双色球组合数据 编辑:程序博客网 时间:2024/05/01 09:26
Franklin 只是对排版做了优化,然后对笔者自己实践的地方,【】加了更多的解释和注释。
全文转载:DFB初始化简介
地址:http://blog.csdn.net/acs713/article/details/7846686
作者:Smith先生
===============================================================================================================================
1 初始化DFB应用接口函数:
对任何一个dfb应用程序,它在初始化时一定会调用下面两句:
/* DirectFB init */
DirectFBInit( &argc, &argv);
DirectFBCreate(&dfb);
1.1 接口函数DirectFBInit介绍
第一步,DirectFBInit主要完成directFB配置的一些初始化。
主要包括读取环境变量DIRECTFBPATH,读取directfbrc文件,【可以通过getenv("DIRECTFBPATH")】获取系统配置和用户配置、处理命令行等。
读取到的配置信息保存在dfb_config全局变量中。这样,后面的程序可以通过dfb_config,获取配置信息,不需要自己去读取。
1.2 接口函数DirectFBCreate的介绍
第二步,调用DirectFBCreate(&dfb),获取【&dfb】的超级接口IDirectFB,即这里的dfb.有了这个超级接口,应用程序才可以DFB的其他接口或函数,如CreateSurface, CreateFont等。【笔者加了更多的理解】
1.2.1 IDirectFB的结构
如果你还不是很明白,分析下这个超级接口的定义和实现,你就会恍然大悟了。在directfb.h头文件里,有下面一句:
DECLARE_INTERFACE( IDirectFB ) 和 DEFINE_INTERFACE(IDirectFB ,......)
这是一个宏,对于IDirectFB,展开后相当于:
typedef struct _IDirectFB IDirectFB;
struct _IDirectFB
{
void *priv; //【私有数据】
int magic; //【magic字用于区分】
//【下面是一大波注册回调的接口函数,定义了DFB模块和资源所需的各自初始化函数】
DirectResult (*AddRef)( IDirectFB *thiz );
DirectResult (*Release)( IDirectFB *thiz );
DFBResult (*SetCooperativeLevel) (IDirectFB *thiz, DFBCooperativeLevel level );
...........................(若干函数指针,省略)....................................
DFBResult (*CreateSurface) (IDirectFB *thiz, const DFBSurfaceDescription *desc, IDirectFBSurface **ret_interface );
DFBResult (*GetScreen) (IDirectFB *thiz, DFBScreenID screen_id, IDirectFBScreen **ret_interface);
DFBResult (*GetDisplayLayer) ( IDirectFB *thiz, DFBDisplayLayerID layer_id, IDirectFBDisplayLayer **ret_interface);
DFBResult (*GetInputDevice) ( IDirectFB *thiz, DFBInputDeviceID device_id, IDirectFBInputDevice **ret_interface );
DFBResult (*CreateEventBuffer) ( IDirectFB *thiz, IDirectFBEventBuffer **ret_buffer );
DFBResult (*CreateFont) ( IDirectFB *thiz, const char *filename, const DFBFontDescription *desc, IDirectFBFont **ret_interface );
...........................(若干函数指针,省略)....................................
};
除了IDirectFB这个主接口外,DFB中还有IDirectFBSurface, IDirectFBPalette等接口。所有的接口都是以宏定义的形式实现的。关于这些接口的具体用途,先别急,我会在
下一篇文章对此进行详细解说。
1.2.2 IDirectFB结构的初始化主要步骤和接口函数
总之,就directFB本身来说,DirectFBCreate主要是在配置已经读取的基础上,完成一系列初始化,并将各种需要的信息保存在IDirectFB指向的数据结构中。
1.2.2.1 它主要调用三个函数:
(1) direct_initialize()函数:完成线程以及信号量的初始化;(2) dfb_core_create函数:完成多进程相关的初始化和核心部件的初始化。
(3)IDirectFB_Construct函数:填充IDIRECTFB数据结构,对函数指针CreateSurface等进行赋值、初始化;
1.2.2.2 dfb_core_create函数:
我们重点解释下dfb_core_create函数。它主要调用以下函数:(1) dfb_system_lookup函数:它主要是根据系统库目录,读取和加载系统信息。这里的系统,指的是图形系统,一般frame buffer设备、x11等。
(2) fusion_enter:完成多进程相关的初始化。
(3)fusion_arena_enter:初始化或加入竞技场。它会根据当前进程是否第一个,决定调用initialize或join函数。
这里分析第一个进程的情况,即调用最后会调用dfb_core_initialize函数。dfb_core_initialize函数一方面会创建surface pool等结构,
另一方面调用dfb_core_part_initialize会完成各个核心部件的初始化。
核心部件的一个定义如下:
static CorePart *core_parts[] = {
&dfb_clipboard_core,
&dfb_colorhash_core,
&dfb_surface_core,
&dfb_system_core,
&dfb_input_core,
&dfb_graphics_core,
&dfb_screen_core,
&dfb_layer_core,
&dfb_wm_core
};
下文我将进一步以图形系统graphics_core为例,进一步分析显卡驱动相关的初始化。
- 【编撰】Directfb 深入 001 初始化简介 01
- 【编撰】Directfb 深入 002 DirectFB内存分配与管理:surface pool
- DirectFB简介
- 【编撰】linux IPC 001 - 概述
- DirectFB::->Fusion简介
- 【转】DirectFB::->Fusion简介
- DirectFB 之 简介
- DirectFB源代码阅读(二)初始化 .
- directfb嵌入式图形界简介
- DirectFB简介以及移植[一]
- Linux DirectFB DFB 简单 初始化 例子 代码
- Directfb窗口管理分析之初始化
- Directfb窗口管理分析之初始化
- DirectFB 源码解读之初始化-10
- DirectFB显卡驱动的加载和初始化
- DirectFB 源码解读之初始化-1
- DirectFB 源码解读之初始化-2
- DirectFB 源码解读之初始化-3
- 访问者模式
- 面向对象和面向过程的区别
- 微信公众平台开发-UnionID
- Linux下的网络配置
- Redis协议详解
- 【编撰】Directfb 深入 001 初始化简介 01
- java中的Socket编程
- Java空对象设计模式
- PyQt学习笔记(9)--布局管理
- 10.8-10.15工作周报
- JDBC浅析
- 《Linux内核设计与实现》读书笔记(十二)- 内存管理
- Java动态代理与反射详解
- java 如何用pattern 和 Matcher 来使用正则表达式