移植案例与原理 - HDF驱动框架-驱动配置(2) 原创 精华
移植案例与原理 - HDF驱动框架-驱动配置(2)
【本文正在参与优质创作者激励】
1.2.7 节点复制
节点复制可以实现在节点定义时从另一个节点先复制内容,用于定义内容相似的节点。语法如下,表示在定义"node"节点时将另一个节点"source_node"的属性复制过来。
示例如下,编译后bar节点既包含attr_0属性也包含attr_1属性,在bar中对attr_0的修改不会影响到foo。在foo和bar在同级node中可不指定foo的路径,否则需要使用绝对路径引用。
上述代码的最终生成配置树为,可以通过编译为hcb,然后反编译确认效果。
1.2.8 属性引用
为了在解析配置时快速定位到关联的节点,可以把节点作为属性的右值,通过读取属性查找到对应节点。语法如下,表示attribute的值是一个节点node的引用,在解析时可以用这个attribute快速定位到node,便于关联和查询其他node。
示例如下:
注意:不知道为什么,该示例编译报错,已提交reference invalid node issue跟踪。
1.2.9 删除
要对include导入的base配置树中不需要的节点或属性进行删除,可以使用delete关键字。下面的举例中sample1.hcs通过include导入了sample2.hcs中的配置内容,并使用delete删除了sample2.hcs中的attribute2属性和foo_2节点,示例如下:
编译sample1.hcs文件,在生成过程中将会删除root.foo_2节点与attr_2,最终生成配置树效果为:
1.2.10 模板
模板的用途在于生成严格一致的node结构,以便对同类型node进行遍历和管理。使用template关键字定义模板node,子node通过双冒号“::”声明继承关系。子节点可以改写但不能新增和删除template中的属性,子节点中没有定义的属性将使用template中的定义作为默认值。示例如下:
生成配置树效果如下:
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为例,执行下可以输出使用帮助信息:
注意,还有个-o选项,可以指定输出文件的名字。
2.1 生成.c/.h文件
生成.c/.h文件的命令如下,其中$SourceHcsFileName为HCS文件路径。
实际例子,可以使用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文件。
2.2 生成HCB文件
生成HCB二进制文件的命令如下,其中$SourceHcsFileName为HCS文件路径。
2.3 生成宏定义文件
生成宏定义文件的命令如下,其中$SourceHcsFileName为HCS文件路径。使用这个命令只生成.h文件。
2.4 反编译HCB文件为HCS文件
反编译HCB文件为HCS的命令如下,其中$SourceHcbFileName为HCB文件路径。
参考站点
- OpenHarmony / drivers_adapter
- HarmonyOS Device > 文档 > 指南 > 基础能力 > HDF驱动开发框架
- HarmonyOS Device > 文档 > 指南 > 基础能力 > HDF配置管理
- HDF驱动框架
- 轻量带屏解决方案之恒玄芯片移植案例
小结
本文介绍了HDF驱动框架配置管理的概念,介绍了HCS及其语法,并介绍了HCB及其用法,后续会介绍更多的HDF驱动框架知识。因为时间关系,仓促写作,或能力限制,若有失误之处,请各位读者多多指正。感谢阅读,有什么问题,请留言。
Mark~