Lichee (五岁以下儿童) sysconfig1.fex 配置系统
sysconfig配置系统,作为一个通用的软件平台,还希望通过它。能够适应用户不同的方案。通过给出一个相应的配置。用户的方案就能够自己主动执行,而不须要改动系统里面的代码,或者又一次给出參数。
一、 sysconfig1.fex简述
二、 解析过程思路
PC端配置数据的生成
配置脚本本质上是PC端的一个文本文件。通过一个固定的格式形成能够被我们使用的文件,里面保存了大量的配置信息。在图一中,能够看到。PC端的一个数据文件怎样变成了小机端能够用到的文件。
图一 小机端配置文件生成
图一中能够看出,当用户生成一个配置文件之后,不须要做额外的操作。仅仅要依照正常的打包,烧写过程。配置文件的数据就自己主动被嵌入到boot相关的数据中了。
3.2系统启动的数据传递
在小机端,系统启动之后存在数据传递的过程,这个过程主要是数据从boot中读出,然后存放到操作系统指定的位置。
然后操作系统能够自己搬移这块数据,或者直接使用这块和配置有关的数据。相关的处理过程能够參见图二。
图二 配置系统在系统中的流程
从图二中能够看出,boot阶段把数据从boot1.bin中读出,然后传递给了操作系统。操作系统拿到数据之后,做一次初始化动作,然后就一直等待用户进行操作。当系统关机的时候,操作系统须要调用一次配置管理的退出函数。然后,整个配置系统的执行就结束。
3.3用户调用配置系统的数据传递
当用户调用配置系统的时候,里面存在数据传递。图三表示了用户的数据怎样传递到系统。以及系统怎样做出对应的。
图三 配置系统使用中数据传递流程
通过图三。用户能够看出,当调用配置相关的函数的时候。系统中以及配置管理模块怎样管理用户传入的数据。
三、 关键函数分析
在系统中,提供了例如以下的几个函数。提供给用户在系统中读取配置信息的数据。
|
这个函数的功能非常强大。能够获取配置脚本中随意一项的值。
比方,用户须要获取配置脚本中。主键target下的子键boot_clock的值,能够写成
{ int value; int ret; ret = Script_parser_fetch(“target”, “boot_clock”, &value, 1); if(ret < 0) printf(“fetch script data fail\n”); else printf(“fetch script data ok, value = %d\n”, value); return ret; } |
在这个函数中,获取到的值存放在整型变量value中,正常情况下,函数调用的结果是 value
= 406
假设要获取一个配置的GPIO信息,比方twi_para的twi_scl能够使用例如以下的形式
{ user_gpio_set_t gpio_info[1]; int ret; ret = Script_parser_fetch(“twi_para”, “twi_scl”, gpio_info, sizeof(user_gpio_set_t)/sizeof(int)); if(ret < 0) printf(“fetch script gpio infomation fail\n”); else printf(“fetch script gpio infomation ok \n”); return ret; } |
这个函数将把获取到的GPIO信息存放到结构体gpio_info中。
用户能够使用这个结果,来调用GPIO管理模块提供的函数。
用户也能够使用脚本函数来获取一个字符串。
比方,存在例如以下的一个主键和子键项目
[string_test]
string_demo = string:abcdefghijklmn
如今。能够用这个函数来获取出主键string_test的子键string_demo的值。
正常情况下。调用例如以下的函数之后。string_info中保存的值将是“abcdefghijklmn”(没有引號)。
{ char string_info[128]; int ret; memset(string_info, 0, 128); ret = Script_parser_fetch(“string_test”, “string_demo”, string_info, 128/sizeof(int)); if(ret < 0) printf(“fetch script string infomation fail\n”); else printf(“fetch script string infomation ok \n”); return ret; } |
获取子键个数
函数原型:int Script_parser_subkey_count(char *main_name); 參数: main_name 主键名称,即配置脚本中的主键名称,字符串形式 返回值: 成功返回 主键下的子键个数 失败返回 -1 |
这个函数返回的是一个主键下全部的子键的个数,通经常使用户不会关心它。
这个函数更大的用途还在于做检查。
{ int sub_key_count; sub_key_count = Script_parser_subkey_count (“target”); if(sub_key_count < 0) printf(“fetch script sub key count fail\n”); else printf(“fetch script sub key count ok , sub_key_count = %d\n”, sub_key_count); return sub_key_count; } |
调用如上的函数。将获取到主键target下的全部子键的个数,即得到数值4。
获取主键个数
函数原型:int Script_parser_mainkey_count(void); 參数:无 返回值: 成功返回 配置脚本中主键的总的个数 失败返回 -1 |
这个函数将获取全部主键的个数,和Script_parser_subkey_count一样,主要用途还是做检查使用。
{ int main_key_count; main_key_count = Script_parser_mainkey_count(); if(main_key_count < 0) printf(“fetch script sub key count fail\n”); else printf(“fetch script main key count ok , main_key_count = %d\n”, main_key_count); return main_key_count; } |
调用如上的函数,将获取到配置脚本中主键的个数。
函数原型:int Script_parser_mainkey_get_gpio_count(char 參数:main_name 配置脚本中主键的名称。字符串形式 返回值: 成功返回 配置脚本中主键下的,数据GPIO类型的子键个数 失败返回 -1 |
获取主键下GPIO个数
这个函数的调用将得到主键下的子键中,值属于GPIO类型的子键个数。
比方。当获取twi_para下的子键中的GPIO类型时。将获取到数值2。
{ int gpio_key_count; gpio_key_count = Script_parser_mainkey_get_gpio_count (“twi_para”); if(gpio_key_count < 0) printf(“fetch script sub key count fail\n”); else printf(“fetch script gpio key count ok , gpio_key_count = %d\n”, gpio_key_count); return gpio_key_count; } |
假设把上面函数的參数twi_para替换成target,则得到的将是0。
假设把上面函数的參数twi_para替换成nand_para,则得到的将是23。
获取主键下GPIO配置
这个函数将获取一个主键下,全部属于GPIO的子键的GPIO描写叙述值。
|
调用这个函数。将把配置脚本中匹配主键名称的。属于GPIO类型的子键的个数。
{ user_gpio_set_t gpio_info[2]; int ret; ret = Script_parser_mainkey_get_gpio_cfg(“twi_para”,gpio_info, 2); if(ret < 0) printf(“fetch script gpio infomation fail\n”); else printf(“fetch script gpio infomation ok \n”); return ret; } |
调用这个函数,将获取配置脚本里,twi_para的子键中。属于GPIO类型的描写叙述信息。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Lichee (五岁以下儿童) sysconfig1.fex 配置系统的更多相关文章
- Lichee (五) sysconfig1.fex 配置系统
sysconfig配置系统,作为一个通用的软件平台,还希望通过它,可以适应用户不同的方案.通过给出一个对应的配置,用户的方案就可以自动运行,而不需要修改系统里面的代码,或者重新给出参数. 配置脚本的本 ...
- (五岁以下儿童)NS3样本演示:桥模块演示样品csma-bridge.cc凝视程序
(五岁以下儿童)NS3:桥模块演示样品csma-bridge.cc凝视程序 1.Ns3 bridge模csma-bridge.cc演示示例程序的目光 // Network topology // // ...
- linux下一个Oracle11g RAC建立(五岁以下儿童)
linux下一个Oracle11g RAC建立(五岁以下儿童) 四.建立主机之间的信任关系(node1.node2) 建立节点之间oracle .grid 用户之间的信任(通过ssh 建立公钥和私钥) ...
- python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...
- PE文件结构(五岁以下儿童)基地搬迁
PE文件结构(五岁以下儿童) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 基址重定位 链接器生成一个PE文件时,它会如果程序被装入时使用的默认ImageBase基地址(VC默认 ...
- Servlet(五岁以下儿童)web.xml一些常用的配置
(1)lode-on-startup,这Servlet该项目启动时它将被称为(从主要的电话init办法,为了安全起见,一般不应为Servlet建立URL制图).一些数据通常被用作前处理,或使用多线程建 ...
- Scrapy研究和探索(五岁以下儿童)——爬行自己主动多页(抢别人博客所有文章)
首先.在教程(二)(http://blog.csdn.net/u012150179/article/details/32911511)中,研究的是爬取单个网页的方法.在教程(三)(http://blo ...
- nagios二次开发(五岁以下儿童)---nagios和nagiosql关系
基于nagios和nagiosql理解.这将是这两个梳理比较粗糙的简单关系,有关详细信息,请参阅下面的图如: 从上面的关系图中能够看出,nagios与nagiosql共享了主机.主机组.服务 ...
- ExtJs4得知(五岁以下儿童)主要的Ext分类
Ext类是ExtJs最常见的.最基本的类,它是一个全局对象,它封装了全班.辛格尔顿和 Sencha 该方法提供了一种有用的库. 嵌套在该命名空间中一个较低的水平最用户界面组件. 但是提供了很多有用的功 ...
随机推荐
- 基于Greenplum Hadoop分布式平台的大数据解决方案及商业应用案例剖析
随着云计算.大数据迅速发展,亟需用hadoop解决大数据量高并发访问的瓶颈.谷歌.淘宝.百度.京东等底层都应用hadoop.越来越多的企 业急需引入hadoop技术人才.由于掌握Hadoop技术的开发 ...
- Primefaces的fileUpload组件使用
最近在学习Primefaces(当然也是项目中需要用的).在使用其fileUpload遇到了不小的困难,现总结一下供大家及我自己今后参考使用. 1.首先是使用环境配置:正常的Primefaces开发环 ...
- 管理支撑办公系统技术架构选型对照讨论(J2EE与SOA对照)
续:管理支撑办公系统技术架构选型及相关技术应用范围.方法分析 M域办公系统改造.整合涉及到OA.业务流程.部室信息站点.部室专业管理等系统和信息共享等新需求,从信息化视角来看,内容多并且杂,这里核心业 ...
- UML之九图概述
最近看了UML的九种图的讲解,这九种图在我们以后的学习中起着举足轻重的作用,不管是在写文档,还是在对系统的需求.设计进行分析时,都很重要,所以首先做一下概述,希望能和大家分享. 首先和大家展示一下我对 ...
- C# MVC 自学笔记—2 MVC Movie简介
MVC Movie是微软官方的一个MVC入门项目,我们可以跟着这个项目来实践入门 这是官方地址 http://www.asp.net/mvc/tutorials/mvc-4/getting-start ...
- C++ Primer 学习笔记_60_重载操作符与转换 --赋值、下标、成员訪问操作符
重载操作符与转换 --赋值.下标.成员訪问操作符 一.赋值操作符 类赋值操作符接受类类型形參,通常该形參是对类类型的const引用,但也能够是类类型或对类类型的非const引用.假设未定义这个操作符, ...
- 【安卓】eclipse中不可错过的几个秘密、!
1.PackageExplorer显示文件层次的默认方式是平行列出全部包,事实上也可显示成多级,并且效果比navigator好多了. PackageExplorer视图中,"右上角箭头→pa ...
- Spring MVC 数据验证——validate注解方式
1.说明 学习注解方式之前,应该先学习一下编码方式的spring注入.这样便于理解验证框架的工作原理.在出错的时候,也能更好的解决这个问题.所以本次博客教程也是基于编码方式.仅仅是在原来的基础加上注解 ...
- ZenCoding Syntax
语法: 后代:> 缩写:nav>ul>li 兄弟:+ 缩写:div+p+bq 上级:^ 缩写:div+div>p>span+em^bq 缩写:div+div>p&g ...
- Swift - 炫酷放射弹出按钮菜单(改造自AwesomeMenu)
这个是一个第三方按钮菜单组件,原版是使用Objective-C编写的名为AwesomeMenu的组件,地址是:https://github.com/levey/AwesomeMenu 这里改造成了Sw ...