DirectFB源代码阅读(二)初始化 .

在介绍初始化之前,先看下DirectFB源码的目录结构:

1.gfxdrivers:显卡硬件抽象层

2.inputdrivers:输入设备,比如摇杆,鼠标,键盘等

3.interfaces:接口层,用来调用其他的库,包含了字体,图片,视频

4.lib:基本函数库

5.proxy:代理,事件的请求与分发

6.systems:使用directfb的当前的窗口系统,如果是在x11下使用,那么system=x11

7.tools:用到的工具

8.wm:要使用的窗口管理系统,可使用default,或unique管理窗口

9.src:包含了主要的处理代码

现在对DirectFB源码结构有了一个初步的了解.

任何dfb的程序在开始前都要调用两个函数:DirectFBInit,DirectFBCreate,本文第一个.

DirectFBInit:主要用来初始化整个系统的配置参数.

软件一般都有一些全局的参数需要设置,要么由系统来默认配置,要么采用读取用户配置文件的方法.很类似c++里面的单例模式.

DirectFB把所有的配置选项都放入到了比较大的结构体DFBConfig里面,并声明了一个指向它的全局的指针变量dfb_config.

1.默认配置:config_allocate

为dfb_config分配内存,并进行初始化.

2. dfb_config_read( SYSCONFDIR"/directfbrc" );读取一个文件进行初始化

先搞明白SYSCONFDIR到底是什么值:如果在编译的时候不指定sysconfidr那么这里SYSCONFDIR应该是/etc

下面再看configure中的一段代码:

  1. EXP_VAR=SYSCONFDIR  
  2. FROM_VAR=$sysconfdir#FROM_VAR的初始化,在开始的时候prefix为空,sysconfdir='${prefix}/etc',所以值就是/etc了  
  3.   
  4. prefix_save=$prefix  
  5. exec_prefix_save=$exec_prefix  
  6.   
  7. if test "x$prefix" = "xNONE"; then  
  8.   prefix="$ac_default_prefix"#如果编译时没指定prefix那么prefix将被初始化为ac_default_prefix  
  9. fi  
  10.   
  11. full_var="$FROM_VAR"#full_var的初始化  
  12.   while true; do  
  13.   new_full_var="`eval echo $full_var`"  
  14.   if test "x$new_full_var" = "x$full_var"; then break; fi  
  15.   full_var=$new_full_var  
  16. done  
  17.   
  18. full_var=$new_full_var  
  19. SYSCONFDIR="$full_var" #对SYSCONFDIR时行初始化  
  EXP_VAR=SYSCONFDIR
  FROM_VAR=$sysconfdir#FROM_VAR的初始化,在开始的时候prefix为空,sysconfdir='${prefix}/etc',所以值就是/etc了

  prefix_save=$prefix
  exec_prefix_save=$exec_prefix

  if test "x$prefix" = "xNONE"; then
    prefix="$ac_default_prefix"#如果编译时没指定prefix那么prefix将被初始化为ac_default_prefix
  fi

  full_var="$FROM_VAR"#full_var的初始化
    while true; do
    new_full_var="`eval echo $full_var`"
    if test "x$new_full_var" = "x$full_var"; then break; fi
    full_var=$new_full_var
  done

  full_var=$new_full_var
  SYSCONFDIR="$full_var" #对SYSCONFDIR时行初始化

主要代码:

  1. DFBResult dfb_config_read( const char *filename )  
  2. {  
  3.      dfb_config->config_layer = &dfb_config->layers[0];//共计16个层,这里初始化第0个   
  4.   
  5.      f = fopen( filename, "r" ); //打开文件   
  6.   
  7.      while (fgets( line, 400, f )) {  
  8.   
  9.           value = strchr( line, '=' );  
  10.   
  11.           if (value) {    //得到value   
  12.                *value++ = 0;  
  13.                direct_trim( &value );  
  14.           }  
  15.   
  16.           direct_trim( &name );//得到name   
  17.   
  18.           ret = dfb_config_set( name, value );//更新配置选项里面的值   
  19.      }  
  20. }  
DFBResult dfb_config_read( const char *filename )
{
     dfb_config->config_layer = &dfb_config->layers[0];//共计16个层,这里初始化第0个

     f = fopen( filename, "r" ); //打开文件

     while (fgets( line, 400, f )) {

          value = strchr( line, '=' );

          if (value) {    //得到value
               *value++ = 0;
               direct_trim( &value );
          }

          direct_trim( &name );//得到name

          ret = dfb_config_set( name, value );//更新配置选项里面的值
     }
}
3.读取home目录下的.directfbrc文件,作一次和上面一样的更新,看来如果这个文件有的话,还是这个文件的权限高些,把前面初始化的都给覆盖掉了.

4.获取执行程序的名字

5.读取/etc下directfbrc.%s(执行程序名字)的文件,更新配置选项

6.读取home目录下.directfbrc.%s(执行程序名字),更新配置选项

7.处理用户执行应用程序时输入的参数,最后可更新配置选项的地方.

到这里初始化的第一部分就做完了.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值