当前位置: 首页 > news >正文

移植案例与原理 - HDF驱动框架-驱动配置(1)

HCS(HDF Configuration Source)是HDF驱动框架的配置描述源码,内容以Key-Value为主要形式。它实现了配置代码与驱动代码解耦,便于开发者进行配置管理。应该,类似Linux DTS(Device Tree Source)设备树。

HC-GEN(HDF Configuration Generator)是HCS配置转换工具,可以将HDF配置文件转换为软件可读取的文件格式。类似的,在Linux下,可以将DTS转换为DTB(Device Tree Blob,设备树数据二进制编码),使用的工具是DTC。

对于HC-GEN,对不同性能的环境,采用不同的策略,如下。现在还不清楚,高弱性能环境是如何定义的。

  • 在弱性能环境中,转换为配置树源码,驱动可直接调用C代码获取配置。
  • 在高性能环境中,转换为HCB(HDF Configuration Binary)二进制文件,驱动可使用HDF框架提供的配置解析接口获取配置。

使用HCB模式的配置使用流程如下图,HCS经过HC-GEN编译生成HCB文件,HDF驱动框架中的HCS Parser模块会从HCB文件中重建配置树,HDF驱动模块使用HCS Parser提供的配置读取接口获取配置内容。

1、HCS 配置语法

1.1 HCS使用的关键字

关键字描述备注
root配置根节点
include引用其他HCS配置文件
delete删除节点和属性只能删除include引入的节点或属性
template定义模板节点
match_attr用于标记节点的匹配查找属性解析配置时可以使用该属性的值查找到对应节点

关键字include、delete、template可以在文件drivers\framework\tools\leagecy\hc-gen\src\hcs_compiler.l中找到:

"root"              { LEXER_DEBUG("root\n"); return ROOT; }
"true"              { HcsCompilerlval.i = 1; return NUMBER; }
"false"             { HcsCompilerlval.i = 0; return NUMBER; }
"#include"          { LEXER_DEBUG("INCLUDE\n"); return INCLUDE; }
"delete"            { return DELETE; }
"template"          { return TEMPLATE; }

关键字match_attr应该是定义在文件drivers\framework\utils\include\hcs_tree_if.h中。

#define HCS_MATCH_ATTR "match_attr"

1.2 基本组成结构

HCS配置文件主要由属性attribute和节点node两部分组成。

1.2.1 属性

属性即最小的配置单元,是一个独立的配置项。语法如下,类似键值对,attribute 必须以分号(;)结束且必须属于一个node。

  attribute_name = value;

其中:

  • 属性名称attribute_name:

    字母、数字、下划线的组合且必须以字母或下划线开头,字母区分大小写。

  • 属性值value:

    可用格式为:数字常量,支持二进制、八进制、十进制、十六进制数,具体参考数据类型部分;字符串,内容使用双引号(“”)引用;节点引用。

1.2.2 节点

节点是一组属性的集合,语法如下,大括号后无需添加结束符“;”。其中,node_name 是字母、数字、下划线的组合且必须以字母或下划线开头,字母区分大小写。

  node_name {module = "sample";...}

每个配置表必须以root节点开始,用于声明配置表的根节点。root节点中必须包含module属性,其值应该为一个字符串,用于表征该配置所属模块。节点中还可以增加match_attr属性,其值为一个全局唯一的字符串。在解析配置时,通过该属性值,调用查找节点可以查找到包含该属性的节点。

1.2.3 数据类型

在属性定义中使用自动数据类型,不显式指定类型,属性支持的数据类型如下。

1.2.3.1 整型

整型长度自动推断,根据实际数据长度给与最小空间占用的类型。

  • 二进制,0b前缀,示例:0b1010。

  • 八进制,0前缀,示例:0664。

  • 十进制 ,无前缀,且支持有符号与无符号,示例:1024,+1024均合法。负值在读取时注意使用有符号数读取接口。

  • 十六进制,0x前缀,示例:0xff00、0xFF。

1.2.3.2 字符串

字符串使用双引号(“”)表示。

1.2.3.3 数组

数组元素支持整型、字符串,不支持混合类型。整型数组中uint32_t uint64_t混用会向上转型为uint64_t 数组。整型数组与字符串数组示例如下

attr_foo = [0x01, 0x02, 0x03, 0x04];
attr_bar = ["hello", "world"];
1.2.3.4 bool类型

bool类型中true表示真,false表示假。

1.2.4 include预处理

用于导入其他HCS文件。语法示例如下,文件名必须使用双引号(“”),不在同一目录使用相对路径引用。被include文件也必须是合法的HCS文件。
多个include,如果存在相同的节点,后者覆盖前者,其余的节点依次展开。

#include "foo.hcs"
#include "../bar.hcs"

可以参考示例文件device\board\fnlink\hcs\v200zr.hcs,等于板端hcs文件复用soc芯片部分的文件。

#include "../../../soc/bestechnic/bes2600/liteos_m/components/hdf_config/device_info.hcs"

1.2.5 注释

支持单行和多行两种注释风格。多行注释不支持嵌套,注释示例如下:

// comment 单行注释/*
comment 多行注释
comment 多行注释
*/

1.2.6 引用修改

引用修改可以实现修改另外任意一个节点的内容,引用修改节点不产生新的节点,只修改另外一个节点。语法如下,表示node中的内容是对source_node节点内容的修改。注意 “:&”是整体,前后各有一个空格。

 node :& source_node

引用修改有如下注意事项:

  • 引用同级node,可以直接使用node名称,否则被引用的节点必须使用绝对路径,节点间使用“.”分隔,root表示根节点,格式为root开始的节点路径序列,例如root.foo.bar即为一个合法的绝对路径。
  • 如果出现修改冲突(即多处修改同一个属性),编译器将提示warning,因为这种情况下只会生效某一个修改而导致最终结果不确定。

示例如下:
``

root {module = "sample";foo {foo_ :& root.bar{attr = "foo";}foo1 :& foo2 {attr = 0x2;}foo2 {attr = 0x1;}}bar {attr = "bar";}
}

假如下述示例保存在文件ref_update.hcs中,可以先生成二进制hcb文件,然后再反编译生成hcs文件,查看效果。其他示例均可采用编译、反编译的方式来查看HCS配置文件的实现效果。

hc-gen -b ref_update.hcs
hc-gen -d ref_update.hcb

生成反编译的文件ref_update.d.hcs,内容为:

/** HDF decompile hcs file*/
root {module = "sample";foo {foo2 {attr = 0x2;}}bar {attr = "foo";}
}

在以上示例中,可以看到foo.foo_节点通过引用将bar.attr属性的值修改为了"foo",foo.foo1节点通过引用将foo.foo2.attr属性的值修改为了0x2。foo.foo_以及foo.foo1节点表示对目标节点内容的修改,其自身并不会存在最终生成的配置树中。

如果大家想更加深入的学习 OpenHarmony(鸿蒙南向) 开发的全栈内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

在这里插入图片描述

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:https://qr21.cn/FV7h05

相关文章:

移植案例与原理 - HDF驱动框架-驱动配置(1)

HCS(HDF Configuration Source)是HDF驱动框架的配置描述源码,内容以Key-Value为主要形式。它实现了配置代码与驱动代码解耦,便于开发者进行配置管理。应该,类似Linux DTS(Device Tree Source)设备树。 HC-GEN(HDF Configuration Generator)是…...

坚持刷题|反转链表

文章目录 题目思考实现1. 迭代方式实现链表翻转2. 递归方式实现链表翻转 Hello,大家好,我是阿月。坚持刷题,老年痴呆追不上我,今天继续链表:反转链表 题目 LCR 024. 反转链表 思考 翻转链表是一个常见的算法问题&a…...

升级和维护老旧LabVIEW程序

在升级老旧LabVIEW程序至64位环境时,需要解决兼容性、性能和稳定性等问题。本文从软件升级、硬件兼容性、程序优化、故障修复等多个角度详细分析。具体包括64位迁移注意事项、修复页面跳转崩溃、解决关闭程序后残留进程的问题,确保程序在新环境中的平稳运…...

sqlite数据库整体迁移进mysql整个流程并解决中文异常问题

咨询【QQ】 sqlite轻量数据还行,随着数据量增大,不得不迁移进mysql 首先 电脑执行 sqlite3 db.sqlite3 .dump > dump.sql 会把整个sqlite的数据导出进 dump.sql中 紧接着我们把sqlite的sql转换成mysql的sql语句,因为mysql语句和 sq…...

Hadoop3:MapReduce中的Partition原理及自定义Partition

一、默认Partition分区配置 以WC案例来进行验证。 1、设置setNumReduceTasks 修改的代码 这行代码,确定了reduceTask的数量,也确定了分区逻辑 在mapper文件中,打上断点 计算分区的代码 这里会对每一个kv进行计算,然后&#…...

就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂

“嗯嗯”,“嗯嗯”,“那产品也没说加呀”,“按F11不行吗?”,“嗯嗯”,“好的”。 早上在4号线上,我正坐在地铁里,边上站着的妹子,我看他背着双肩包,打着电话…...

STM32学习记录(八)————定时器输出PWM及舵机的控制

文章目录 前言一、PWM1.工作原理2.内部运作机制3. PWM工作模式4.PWM结构体及库函数 二、PWM控制舵机 前言 一个学习STM32的小白~ 有错误评论区或私信指出提示:以下是本篇文章正文内容,下面案例可供参考 一、PWM 1.工作原理 以向上计数为例&#xff0…...

Vue CLI,Vue Router,Vuex

前言 Vue CLI、Vue Router 和 Vuex 都是 Vue.js 生态系统中的重要组成部分,它们在构建 Vue 应用程序时扮演着关键角色。 Vue CLI Vue CLI 介绍 Vue CLI 是 Vue.js 的官方命令行工具,用于快速搭建 Vue.js 项目。它提供了一个图形界面(通过…...

互联网广告相关概念

互联网广告概念涉及多个关键指标和定价模式,它们帮助广告主和广告平台衡量广告效果、优化广告投放策略,并计算广告成本。以下是互联网广告中一些核心概念的简要概述: 1.ROI (投资回报率) 衡量广告投资的效益,计算公式为&#xff…...

如何在服务器上部署一个java程序

如何在服务器上部署一个java程序? 一、在服务器上安装jdk环境 1.创建目录用于存放jdk文件 cd /usr/local 2.下载最新版oracle jdk22 wget https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz 3.解压 tar -zxf jdk-22_linux-x64_bin.ta…...

白酒:中国的酒文化的传承与发扬

中国,一个拥有五千年文明史的国度,其深厚的文化底蕴孕育出了丰富多彩的酒文化。在这片广袤的土地上,酒不仅仅是一种产品,更是一种情感的寄托,一种文化的传承。云仓酒庄的豪迈白酒,正是这一文化脉络中的一颗…...

算法金 | 再见!!!梯度下降(多图)

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 接前天 李沐:用随机梯度下降来优化人生! 今天把达叔 6 脉神剑给佩奇了,上 吴恩达:机器…...

python Django安装及怎么检测是否安装成功

一、winr 输入cmd 进入控制台。输入pip install Django5.0.1 二、如果安装过程没有问题。就进行下一步进行检查是否成功安装。 三、 1.在控制台输入python,进入python环境 2.输入 import django 3.继续输入 django.get_version()。显示版本号表示成功安装。...

Swift开发——存储属性与计算属性

Swift语言开发者建议程序设计者多用结构体开发应用程序。在Swift语言中,结构体具有了很多类的特性(除类的与继承相关的特性外),具有属性和方法,且为值类型。所谓的属性是指结构体中的变量或常量,所谓的方法是指结构体中的函数。在结构体中使用属性和方法是因为:①匹别于结…...

如何解决input输入时存在浏览器缓存问题?

浏览器有时会在你输入表单过后缓存你的输入&#xff0c;有时候能提供方便。 但是在某些新建或新页面情况下出现历史的输入信息&#xff0c;用户体验很差。 解决方案 设置 autocomplete关闭 &#xff1a;<input type"text" autocomplete"off">增加…...

Java基础学习-方法

目录 方法基础概念 方法的格式&#xff1a; 案例&#xff1a;最简单方法的定义 案例&#xff1a;带参数的方法调用 案例&#xff1a;求圆的面积 带有返回值的方法&#xff1a; 方法注意点 方法的重载&#xff1a; ​编辑 案例&#xff1a;数组的遍历&#xff1a; 案例…...

Ribbon与Nginx的区别

负载均衡实现的位置不同&#xff1a; Ribbon&#xff1a;负载均衡器位于客户端&#xff0c;不需要单独搭建。Nginx&#xff1a;需要建立一个独立负载均衡服务器&#xff0c;服务端。 负载均衡策略&#xff1a; Ribbon&#xff1a;提供了多种负载均衡策略&#xff0c;如随机策…...

R包开发详细教程

开发一个R包可以帮助你组织和共享代码。以下是一个详细的步骤教程&#xff0c;介绍如何开发一个R包。 步骤 1: 准备工作 确保你已经安装了以下R包&#xff1a; install.packages("devtools") install.packages("roxygen2") install.packages("test…...

图像的高频和低频细节

在图像处理和计算机视觉中&#xff0c;"高频"和"低频"是用来描述图像中不同类型细节的术语。这些术语源自信号处理领域&#xff0c;其中频率的概念用于描述信号随时间变化的&#xff0c;但在图像处理中&#xff0c;它们被用来描述图像随空间变化的&#xf…...

PostgreSQL源码分析——常量表达式化简

常量表达式化简 常量表达式可以进行化简&#xff0c;可降低执行器计算表达式的代价。在逻辑优化阶段&#xff0c;会判断是否可以进行常量表达式化简&#xff0c;如果可以&#xff0c;则在执行器执行之前就预先对常量表达式树进行计算&#xff0c;计算出常量后&#xff0c;以新…...

速卖通自养号测评:安全高效的推广手段

在速卖通平台上&#xff0c;卖家们常常寻求各种方法来提升商品的曝光、转化率和店铺权重。其中&#xff0c;自养号测评作为一种低成本、高回报的推广方式&#xff0c;备受关注。然而&#xff0c;若操作不当&#xff0c;也可能带来风险。以下是如何安全有效地进行自养号测评的指…...

项目监督与控制

1.什么是项目过程度量&#xff1f;其方法有哪些&#xff1f; 项目过程度量是一种对项目执行过程中的活动和性能进行量化测量的方法。它涉及到收集、分析和解释项目数据&#xff0c;以便更好地理解项目的进度、质量和效率。过程度量的目的是提供关于项目健康状况的客观信息&…...

【LeetCode刷题】面试题 17.19. 消失的两个数字

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 面试题 17.19. 消失的两个数字 2. 题目描述 3. 解题方法 例子假设&#xff1a; 数组A元素为 &#xff1a;1 &#xff0c;4&#xff0c;5 缺少的元素为&#xff1a;2&#xff0c; 3 那么所有整数就为1 ~ 5&#xff…...

如何定制Spring的错误json信息

一&#xff0c;前言 相信很多同学都有遇到过这样的spring错误信息。 在我们没有做catch处理时或者做全局的exceptionHandle时&#xff0c;Spring遇到抛出向外的异常时&#xff0c;就会给我们封装返回这么个格式的异常信息。 那么问题来了&#xff0c;我们能否对这个返回增加错…...

【第20章】Vue实战篇之Vue Router(路由)

文章目录 前言一、使用Vue-Router1.安装2. 创建路由器实例3. 注册路由器插件4. 根组件 二、访问路由器1.理论2.使用3. 展示 三、嵌套路由(子路由)1. 准备文件2. 配置路由3. 菜单配置4. 展示 总结 前言 Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;…...

阿里云运维第一步(监控):开箱即用的监控

作者&#xff1a;仲阳 这是云的时代&#xff0c;现在云计算已经在各行各业广泛的应用。但是上云对于大多数客户来说&#xff0c;依然有很大的学习成本&#xff0c;如下图仅是阿里云都有几百款产品&#xff0c;怎么选择&#xff1f;怎么用&#xff1f;对于客户来说都是问题。“…...

Python量化交易学习——Part7:定制增强型中证红利策略

中证红利指数是一个反映A股市场高红利股票整体状况和走势的指数。它通过选取上海、深圳交易所中现金股息率高、分红比较稳定、具有一定规模及流动性的100只股票作为样本。这个指数的目的是提供一个全面且具有代表性的视角,以观察A股市场中高红利股票的表现。中证红利指数的样本…...

拥抱未来:探索改变游戏规则的新存储技术

目录 一.存储级内存&#xff08;Storage-Class Memory&#xff09; 3D XPoint 技术 特点 应用场景 优点 缺点 适用场景 示例 二.QLC NAND闪存 概述 优点 缺点 适用场景 前景展望 三.DNA存储 概述 优点 原理 实际应用 关键问题 研究进展 适用场景 分布式…...

shell中的流程控制

条件判断在流程控制中的重要性 有了条件判断才能进行if判断即分支流程&#xff0c;才能进行case的多分支流程&#xff0c;才能进行for循环和while循环。 单分支流程判断 如上图所示&#xff0c;在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令&#x…...

DiffIR: Efficient Diffusion Model for Image Restoration

清华&ETH&字节&UTDhttps://github.com/Zj-BinXia/DiffIR 问题引入 IR任务和image synthesis任务不同点是IR任务本身有一个很强的低质量图片作为先验&#xff0c;所以可以不完全遵循图片生成的范式&#xff0c;本文主要在compact的IPR空间进行DM&#xff1b;本文提…...

设置网站/优化关键词可以选择哪个工具

小学数学常用公式大全(几何体计算公式)1. 长方形的周长(长宽)2 公式&#xff1a;C(ab)22. 正方形的周长边长4 公式&#xff1a;C4a3. 长方形的面积长宽 公式&#xff1a;Sab4. 正方形的面积边长边长 公式&#xff1a;Sa*a5. 三角形的面积底高2 公式&#xff1a;Sah26. 平行四边…...

微商城网站建设代理商/个人网站网页首页

问题1&#xff1a; TensorFlow中pb二进制模型复用时变量&#xff08;偏置项等&#xff09;覆盖&#xff1b;如feature_embeddings tf.Variable( tf.random_normal([3, 2], 0.0, 0.01), namefeature_embeddings)这样的变量。这是因为运行sess.run(tf.global_variables_initiali…...

网站分析 实例/网络营销方案设计

1. SEL和IMP 最早我把SEL理解为函数指针&#xff0c;现在看来&#xff0c;不是这样的。 1.1 SEL类型 SEL类型的变量&#xff0c;可以通过selector(方法名)来取得&#xff0c;当然了&#xff0c;Objective C的方法名&#xff0c;我们也知道了&#xff0c;多么恶心&#xff08…...

武汉做企业网站的公司/网站模板商城

什么是Entity Framework Entity Framework是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。将数据存储从域对象自动映射到关系型数据库&#xff0c;让开发人员节不需要编写大量的数据访问代码&#xff0c;节省了数据库访问的代码时间&#xff0c;对数…...

仿站 做网站/美国疫情最新消息

性质和特点 对象与对象之间的成员变量是相互独立的。要想共用数据&#xff0c;则需要使用静态成员和静态方法。只要在类中声明静态成员变量&#xff0c;即使不定义对象&#xff0c;也可以为静态成员变量分配空间&#xff0c;进而可以使用静态成员变量。&#xff08;因为静态成…...

网站免费正能量直接进入在线/好用吗

我们有时做项目时会发现&#xff0c;当在A标签里&#xff0c;添加一张图片时&#xff0c;图片的周围会出现一圈蓝色的框&#xff0c;很是影响美观。其实解决这个问题很简单&#xff1a;就是在img标签加上border"0"。O(∩_∩)O~...