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相关推荐

  1. [译]5.1. System Initialization Overview 系统初始化简介

    目录:http://www.cnblogs.com/WuCountry/archive/2008/11/15/1333960.html   [不提供插图,读者最好从网上下载源书] 5.1. Syste ...

  2. 【嵌入式】C语言高级编程-嵌入式C语言简介(01)

    00. 目录 文章目录 00. 目录 01. C 语言标准 02. C 标准内容 03. C 标准的发展历程 04. 编译器对 C 标准的支持 05. 编译器对 C 标准的扩展 06. Linux内核 ...

  3. tomcat catalina localhost 没有项目_Tomcat简介--01

    一.tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开 ...

  4. 001. Ansible简介

    一 简介 Ansible是一款极其简单的自动化运维工具, 基于Python开发, 集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点. 实现了批量系统 ...

  5. Linux0基础深度解析shell简介01

    一.shell简介 ------------     用户      |         终端  (相当于bash的接口)      |     shell(壳) bash 大多数Linux系统默认的 ...

  6. [云计算] 001.云计算简介

    1.简介 云计算平台也称为云平台.云计算平台可以划分为3类:以数据存储为主的存储型云平台,以数据处理为主的计算型云平台以及计算和数据存储处理兼顾的综合云计算平台. 2.目前的开源的云平台 (1)Abi ...

  7. SpringCloud简介---01

    SpringCloud简介 SpringCloud是基于SpringBoot基础之上开发的微服务框架,SpringCloud是一套目前非常完整的微服务解决方案框架,其内容包含服务治理.注册中心.配置管 ...

  8. jQuery简介-01

    目录 异步请求局部刷新 架构 技术栈 执行过程 jQuery简介 什么是jQuery jQuery的语法 jQuery的优势 jQuery的使用 文档就绪事件 测试 总结 异步请求局部刷新 架构 主流 ...

  9. LTspice基础教程-001.软件简介与安装

    接触并使用LTspice仿真软件已4年有余,写下以下文章供大家参考,学习资料来源于网络,反馈给网络. 首先,为什么选择LTspice而不是其他特别知名软件,比如PSpice.Multisim.Tina ...

最新文章

  1. 在Android中进行单元测试遇到的问题
  2. 模拟线程切换 C++
  3. ios 秒数转化为时间_iOS UTC秒数时间戳和日期的相互转换【原创】
  4. 电脑如何测网速_【网络调试】网络速度检测工具有哪些?这五款工具让你随时掌控网速...
  5. 总结2---万用表测量方波和正弦波的电压
  6. 【转】8G内存下MySQL的优化详细方案
  7. 2022年G3锅炉水处理考试模拟100题及答案
  8. 利用极小极大搜索和alpha-beta剪枝算法预测五子棋对弈落子
  9. Python本地文件合并(csv)
  10. shim是什么?Vue响应式原理
  11. 将iPhone投影到Mac上
  12. 地球重力——黄金维教授,台湾交通大学
  13. 浏览器打印功能print.js
  14. 关于Unix时间戳(Unix timestamp)
  15. 用计算机描点法画方程函数图像,函数的三种表示方法及用描点法画函数图像.——青夏教育精英家教网——...
  16. 那个给三千人算命的大师,正在给自己水滴筹
  17. iOS 随机数(Fixed)
  18. PyautoGui常规操作
  19. netapp 开启内网穿透
  20. wmv格式的视频怎么转成mp4,4种方法简单易学

热门文章

  1. 【记录】CentOS 安装 gitlab社区版
  2. 【Pyhton爬虫】中国大学排名爬虫
  3. 【Python】循环的拓展
  4. C#LeetCode刷题之#766-托普利茨矩阵(Toeplitz Matrix)
  5. html代码范例_最佳HTML范例和HTML5范例
  6. 数据结构队列代码_代码简介:队列数据结构如何工作
  7. java aspectj_AspectJ的基本用法
  8. 一篇夯实一个知识点系列--python实现十大排序算法
  9. mysql的库与表的增删查改
  10. python网络编程之 一 socket(套接字)