Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
9948b358
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
9948b358
编写于
5月 16, 2022
作者:
O
openharmony_ci
提交者:
Gitee
5月 16, 2022
浏览文件
操作
浏览文件
下载
差异文件
!4000 【OpenHarmony开源贡献者计划2022】HDF相关格式及表达问题
Merge pull request !4000 from king_he/hdf-1
上级
4742cfe8
29438b50
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
23 deletion
+23
-23
zh-cn/device-dev/driver/driver-hdf-development.md
zh-cn/device-dev/driver/driver-hdf-development.md
+11
-11
zh-cn/device-dev/driver/driver-hdf-manage.md
zh-cn/device-dev/driver/driver-hdf-manage.md
+11
-11
zh-cn/device-dev/driver/driver-hdf-sample.md
zh-cn/device-dev/driver/driver-hdf-sample.md
+1
-1
未找到文件。
zh-cn/device-dev/driver/driver-hdf-development.md
浏览文件 @
9948b358
...
...
@@ -3,7 +3,7 @@
## 驱动模型介绍
HDF
框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node,
HDF驱动模型如下图所示:
HDF
(Hardware Driver Foundation)框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node。
HDF驱动模型如下图所示:
**图1**
HDF驱动模型
...
...
@@ -12,7 +12,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
## 驱动开发步骤
基于HDF框架进行驱动的开发主要分为两个部分,驱动实现和驱动配置
,
详细开发流程如下所示:
基于HDF框架进行驱动的开发主要分为两个部分,驱动实现和驱动配置
。
详细开发流程如下所示:
1.
驱动实现
...
...
@@ -22,11 +22,11 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
```
#include "hdf_device_desc.h" // HDF框架对驱动开发相关能力接口的头文件
#include "hdf_log.h" // HDF
框架提供的日志接口头文件
#include "hdf_log.h" // HDF框架提供的日志接口头文件
#define HDF_LOG_TAG "sample_driver" // 打印日志所包含的标签,如果不定义则用默认定义的HDF_TAG标签
//驱动对外提供的服务能力,将相关的服务接口绑定到HDF框架
//
驱动对外提供的服务能力,将相关的服务接口绑定到HDF框架
int32_t HdfSampleDriverBind(struct HdfDeviceObject *deviceObject)
{
HDF_LOGD("Sample driver bind success");
...
...
@@ -59,7 +59,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
.Release = HdfSampleDriverRelease,
};
// 调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动,当Init调用异常时,HDF框架会调用Release释放驱动资源并退出
。
// 调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动,当Init调用异常时,HDF框架会调用Release释放驱动资源并退出
HDF_INIT(g_sampleDriverEntry);
```
...
...
@@ -79,7 +79,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
LOCAL_INCLUDE := #本驱动的头文件目录
LOCAL_SRCS := #本驱动的源代码文件
LOCAL_CFLAGS := #自定义的编译选项
include $(HDF_DRIVER) #导入
模板makefile
完成编译
include $(HDF_DRIVER) #导入
Makefile模板
完成编译
```
编译结果文件链接到内核镜像,添加到drivers/adapter/khdf/liteos目录下的hdf_lite.mk里面,示例如下:
...
...
@@ -213,7 +213,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
-
驱动私有配置信息(可选)
如果驱动有私有配置,则可以添加一个驱动的配置文件,用来填写一些驱动的默认配置信息,HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject
中的property里面,通过Bind和Init(参考步骤1)传递给驱动,驱动的配置信息示例如下:
如果驱动有私有配置,则可以添加一个驱动的配置文件,用来填写一些驱动的默认配置信息,HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject中的property里面,通过Bind和Init(参考步骤1)传递给驱动,驱动的配置信息示例如下:
```
...
...
@@ -221,7 +221,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
SampleDriverConfig {
sample_version = 1;
sample_bus = "I2C_0";
match_attr = "sample_config"; //该字段的值必须和device_info.hcs中的deviceMatchAttr值一致
match_attr = "sample_config"; //
该字段的值必须和device_info.hcs中的deviceMatchAttr值一致
}
}
```
...
...
@@ -235,7 +235,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
<br>
> 驱动加载方式支持按需加载和按序加载两种方式,具体使用方法如下:
>
> - 按需加载
...
...
@@ -249,7 +249,7 @@ HDF框架以组件化的驱动模型作为核心设计思路,为开发者提
> } DevicePreload;
> ```
>
> 配置文件中preload
字段配成
0(DEVICE_PRELOAD_ENABLE),则系统启动过程中默认加载;配成1(DEVICE_PRELOAD_ENABLE_STEP2),当系统支持快启的时候,则在系统完成之后再加载这一类驱动,否则和DEVICE_PRELOAD_ENABLE含义相同;配成2(DEVICE_PRELOAD_DISABLE),则系统启动过程中默认不加载,支持后续动态加载,当用户态获取驱动服务(参考[消息机制](../driver/driver-hdf-message-management.md))时,如果驱动服务不存在,HDF框架会尝试动态加载该驱动。
> 配置文件中preload
字段配成
0(DEVICE_PRELOAD_ENABLE),则系统启动过程中默认加载;配成1(DEVICE_PRELOAD_ENABLE_STEP2),当系统支持快启的时候,则在系统完成之后再加载这一类驱动,否则和DEVICE_PRELOAD_ENABLE含义相同;配成2(DEVICE_PRELOAD_DISABLE),则系统启动过程中默认不加载,支持后续动态加载,当用户态获取驱动服务(参考[消息机制](../driver/driver-hdf-message-management.md))时,如果驱动服务不存在,HDF框架会尝试动态加载该驱动。
>
> - 按序加载(需要驱动为默认加载)
> 配置文件中的priority(取值范围为整数0到200)是用来表示host和驱动的优先级
,
不同的host内的驱动,host的priority值越小,驱动加载优先级越高;同一个host内驱动的priority值越小,加载优先级越高。
> 配置文件中的priority(取值范围为整数0到200)是用来表示host和驱动的优先级
。
不同的host内的驱动,host的priority值越小,驱动加载优先级越高;同一个host内驱动的priority值越小,加载优先级越高。
zh-cn/device-dev/driver/driver-hdf-manage.md
浏览文件 @
9948b358
...
...
@@ -42,7 +42,7 @@ HCS配置语法保留了以下关键字。
### 基本结构
HCS主要分为属性
(Attribute)和节点(Node)
两种结构。
HCS主要分为属性
(Attribute)和节点(Node)
两种结构。
**属性**
...
...
@@ -53,7 +53,7 @@ HCS主要分为属性(Attribute)和节点(Node)两种结构。
attribute_name = value;
```
-
attribute_name
是
**字母、数字、下划线**
的组合且必须以字母或下划线开头,字母区分大小写。
-
attribute_name是
**字母、数字、下划线**
的组合且必须以字母或下划线开头,字母区分大小写。
-
value的可用格式如下:
...
...
@@ -61,7 +61,7 @@ HCS主要分为属性(Attribute)和节点(Node)两种结构。
-
字符串,内容使用双引号("")引用。
-
节点引用。
-
attribute
必须以分号(;)
结束且必须属于一个node。
-
attribute
必须以分号(;)
结束且必须属于一个node。
**节点**
...
...
@@ -75,7 +75,7 @@ HCS主要分为属性(Attribute)和节点(Node)两种结构。
}
```
-
node_name
是
**字母、数字、下划线**
的组合且必须以字母或下划线开头,字母区分大小写。
-
node_name是
**字母、数字、下划线**
的组合且必须以字母或下划线开头,字母区分大小写。
-
大括号后无需添加结束符“;”。
...
...
@@ -103,11 +103,11 @@ HCS主要分为属性(Attribute)和节点(Node)两种结构。
**字符串**
字符串使用双引号
("")
表示。
字符串使用双引号
("")
表示。
**数组**
数组元素支持整型、字符串,不支持混合类型。整型数组中uint32_t uint64_t混用会向上转型为uint64_t
数组。整型数组与字符串数组示例如下:
数组元素支持整型、字符串,不支持混合类型。整型数组中uint32_t uint64_t混用会向上转型为uint64_t数组。整型数组与字符串数组示例如下:
```
...
...
@@ -132,7 +132,7 @@ bool类型中**true**表示真,**false**表示假。
#include "../bar.hcs"
```
-
文件名必须使用双引号
("")
,不在同一目录使用相对路径引用。被include文件也必须是合法的HCS文件。
-
文件名必须使用双引号
("")
,不在同一目录使用相对路径引用。被include文件也必须是合法的HCS文件。
-
多个include,如果存在相同的节点,后者覆盖前者,其余的节点依次展开。
...
...
@@ -157,7 +157,7 @@ bool类型中**true**表示真,**false**表示假。
*/
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
<br>
> 多行注释不支持嵌套。
...
...
@@ -295,7 +295,7 @@ root {
}
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
<br>
> 在同一个HCS文件中不允许使用delete,建议直接删除不需要的属性。
...
...
@@ -403,14 +403,14 @@ options:
-h show this help message
```
生成.c/.h
配置文件方法:
生成.c/.h配置文件方法:
```
hc-gen -o [OutputCFileName] -t [SourceHcsFileName]
```
生成HCB
配置文件方法:
生成HCB配置文件方法:
```
...
...
zh-cn/device-dev/driver/driver-hdf-sample.md
浏览文件 @
9948b358
...
...
@@ -232,7 +232,7 @@ int main()
}
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
<br>
> 用户态应用程序使用了HDF框架中的消息发送接口,因此在编译用户态程序的过程中需要依赖HDF框架对外提供的hdf_core和osal的动态库,在gn编译文件中添加如下依赖项:
>
> deps = [
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录