移植案例与原理 - HDF驱动框架-驱动配置(2) 原创 精华
移植案例与原理 - HDF驱动框架-驱动配置(2)
【本文正在参与优质创作者激励】
1.2.7 节点复制
节点复制可以实现在节点定义时从另一个节点先复制内容,用于定义内容相似的节点。语法如下,表示在定义"node"节点时将另一个节点"source_node"的属性复制过来。
node : source_node
示例如下,编译后bar节点既包含attr_0属性也包含attr_1属性,在bar中对attr_0的修改不会影响到foo。在foo和bar在同级node中可不指定foo的路径,否则需要使用绝对路径引用。
root {
module = "sample";
foo {
attr_0 = 0x0;
}
bar:foo {
attr_1 = 0x1;
}
}
上述代码的最终生成配置树为,可以通过编译为hcb,然后反编译确认效果。
root {
module = "sample";
foo {
attr_0 = 0x0;
}
bar {
attr_1 = 0x1;
attr_0 = 0x0;
}
}
1.2.8 属性引用
为了在解析配置时快速定位到关联的节点,可以把节点作为属性的右值,通过读取属性查找到对应节点。语法如下,表示attribute的值是一个节点node的引用,在解析时可以用这个attribute快速定位到node,便于关联和查询其他node。
attribute = &node;
示例如下:
root {
module = "sample";
node1 {
attribute1 = "value1";
}
node2 {
attr_1 = &node1;
}
}
注意:不知道为什么,该示例编译报错,已提交reference invalid node issue跟踪。
ref_update.hcs:7 reference invalid node 'node1'
1.2.9 删除
要对include导入的base配置树中不需要的节点或属性进行删除,可以使用delete关键字。下面的举例中sample1.hcs通过include导入了sample2.hcs中的配置内容,并使用delete删除了sample2.hcs中的attribute2属性和foo_2节点,示例如下:
// sample2.hcs
root {
module = "sample2";
attr_1 = 0x1;
attr_2 = 0x2;
foo_2 {
t = 0x1;
}
}
// sample1.hcs
#include "sample2.hcs"
root {
module = "sample1";
attr_2 = delete;
foo_2 : delete {
}
}
编译sample1.hcs文件,在生成过程中将会删除root.foo_2节点与attr_2,最终生成配置树效果为:
/*
* HDF decompile hcs file
*/
root {
attr_1 = 0x1;
module = "sample1";
}
1.2.10 模板
模板的用途在于生成严格一致的node结构,以便对同类型node进行遍历和管理。使用template关键字定义模板node,子node通过双冒号“::”声明继承关系。子节点可以改写但不能新增和删除template中的属性,子节点中没有定义的属性将使用template中的定义作为默认值。示例如下:
root {
module = "sample";
template foo {
attr_1 = 0x1;
attr_2 = 0x2;
}
bar :: foo {
}
bar_1 :: foo {
attr_1 = 0x2;
}
}
生成配置树效果如下:
root {
module = "sample";
bar {
attr_1 = 0x1;
attr_2 = 0x2;
}
bar_1 {
attr_1 = 0x2;
attr_2 = 0x2;
}
}
2、hc-gen配置生成
从上文可知,hc-gen是配置生成的工具,可以对HCS配置语法进行检查并把HCS源文件转化成HCB二进制文件。hc-gen的源代码目录在drivers\framework\tools\hc-gen,
以./out/v200zr/xts_demo/obj/drivers/framework/tools/hc-gen/hc-gen为例,执行下可以输出使用帮助信息:
zhushangyuan@OHOS:~/openharmony$ ./out/v200zr/xts_demo/obj/drivers/framework/tools/hc-gen/hc-gen
Usage: hc-gen [Options] [File]
options:
-a hcb align with four bytes
-b output binary output, default enable
-t output config in C language source file style
-m output config in macro file style
-i output binary hex dump in C language source file style
-p <prefix> prefix of generated symbol name
-d decompile hcb to hcs
-V show verbose info
-v show version
-h show this help message
注意,还有个-o选项,可以指定输出文件的名字。
2.1 生成.c/.h文件
生成.c/.h文件的命令如下,其中$SourceHcsFileName为HCS文件路径。
hc-gen -t $SourceHcsFileName
实际例子,可以使用openharmony/device/soc/bestechnic/bes2600/liteos_m/components/hdf_config/device_info.hcs文件,执行命令如下。执行后,可以在目录~/openharmony/device/soc/bestechnic/bes2600/liteos_m/components/hdf_config下看到生成的device_info.h和device_info.c文件。
cd ~/openharmony/device/soc/bestechnic/bes2600/liteos_m/components/hdf_config
~/openharmony/out/v200zr/xts_demo/obj/drivers/framework/tools/hc-gen/hc-gen -t device_info.hcs
2.2 生成HCB文件
生成HCB二进制文件的命令如下,其中$SourceHcsFileName为HCS文件路径。
hc-gen -b $SourceHcsFileName
2.3 生成宏定义文件
生成宏定义文件的命令如下,其中$SourceHcsFileName为HCS文件路径。使用这个命令只生成.h文件。
hc-gen -m $SourceHcsFileName
2.4 反编译HCB文件为HCS文件
反编译HCB文件为HCS的命令如下,其中$SourceHcbFileName为HCB文件路径。
hc-gen -d $SourceHcbFileName
参考站点
- OpenHarmony / drivers_adapter
- HarmonyOS Device > 文档 > 指南 > 基础能力 > HDF驱动开发框架
- HarmonyOS Device > 文档 > 指南 > 基础能力 > HDF配置管理
- HDF驱动框架
- 轻量带屏解决方案之恒玄芯片移植案例
小结
本文介绍了HDF驱动框架配置管理的概念,介绍了HCS及其语法,并介绍了HCB及其用法,后续会介绍更多的HDF驱动框架知识。因为时间关系,仓促写作,或能力限制,若有失误之处,请各位读者多多指正。感谢阅读,有什么问题,请留言。
Mark~