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); 参数: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配置系统,作为一个通用的软件平台,还希望通过它.能够适应用户不同的方案.通过给出一个相应的配置.用户的方案就能够自己主动执行,而不须要改动系统里面的代码,或者又一次给出參数. 一. ...
- 全志sysconfig.fex配置系统解析
sysconfig配置系统,作为一个全志平台通用的配置方案,希望通过它,能够适应用户不同的方案.通过给出一个相应的配置方案,用户就能够自己主动执行,而不须要改动系统里面的代码,或者重新配置參数. 一. ...
- A40I 修改fex配置
一.从现有系统或固件中了解配置 1.使用Dragonface工具. a 打开软件,加载固件. b.在高级选项->高级配置->修改系统配置中查看 sysconfig1.lhs文件,该文件可以 ...
- 大型企业网络配置系列课程详解(五) --Frame-Relay配置与相关概念的理解
大型企业网络配置系列课程详解(五) --Frame-Relay配置与相关概念的理解 实验原理: Frame-Relay(帧中继)简称FR,是国际电信联盟通信标准化组(ITU ...
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]...
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...
- CCNA-第十五篇-DHCP配置+SDN介绍(最后一章)
CCNA-第十五篇-DHCP配置+SDN介绍 各位好,如果有一直看下来的谢谢支持 这里是CCNA的最后一篇了,如果真的能吸收很多内容,那么普通的东西基本上都没什么大问题了.除非就是工作经验 下一篇就到 ...
- Linux配置系统网络(动态)
第一次安装完毕系统,配置网络(动态网络). 打开如下文件 将ONBOOT改为yes 重启网络 配置系统网络(静态) 第一步 查看虚拟机唯一标识(MAC地址) 查看虚拟机设置 MAC地址需要详细记录(很 ...
- Django基础--Django基本命令、路由配置系统(URLconf)、编写视图、Template、数据库与ORM...
web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构. 使用框架可以帮你快速开发特定的系统. 简单地说,就是你用别人搭建好的舞台来做表演. 尝试搭建一个简单 ...
- matlab系统的根轨迹,实验五 利用MATLAB绘制系统根轨迹
<实验五 利用MATLAB绘制系统根轨迹>由会员分享,可在线阅读,更多相关<实验五 利用MATLAB绘制系统根轨迹(6页珍藏版)>请在人人文库网上搜索. 1.实验五 利用MAT ...
最新文章
- win服务器自动发邮件,windows关机前执行脚本设置与关机blat自动发送邮件脚本模板...
- 《Linux》解决Linux端口被占用
- HDU 1166 敌兵布阵(线段树单点加区间查询)
- Java和C/C++程序实时通讯数据移植问题的研究
- python如何分成两行_python将文本分每两行一组并保存到文件
- ik分词器 mysql php_php环境下使用elasticSearch+ik分词器进行全文搜索
- python笔记-python编程优化:常用原则和技术介绍
- 深入理解JavaScript中的this关键字
- 糍粑大叔的独游之旅-战斗!之弹道实现(上)
- gohu恒温花洒使用教程_使用家庭助理构建更好的恒温器
- css滑动星星评分,纯css3滑动星星打分动画特效
- 怎样批量更改文件夹里的文件名称?
- 如何提升邮箱邮件安全性,邮箱管理制度有哪些?
- ps教程:教你如何制作一种牛仔布料
- 深入理解Java虚拟机(三)之详拆运行时数据区的各个结构----方法区(元空间)
- 【矩阵论】线性空间与线性变换(6)
- 基于Android平台的监控端和被监控端系统
- 辗转相除法——求最大公约数(易懂详解)
- input中blur失去焦点事件与点击事件冲突的解决方法(vue)
- Docker 介绍、安装、基础搭建 --01