OpenHarmony开发者论坛
标题:
h2hdf工具使用说明
[打印本页]
作者:
深开鸿_苟晶晶
时间:
2024-9-14 17:20
标题:
h2hdf工具使用说明
[md]## 简介
在OpenHarmony系统中,上层应用或服务层通过调用HDF框架提供的HDI接口,能够以一种标准化和抽象化的方式与底层硬件设备进行交互。使用h2hdf工具,用户只需提供一个drivername,工具会自动生成整个框架的代码,包含驱动配置文件、idl接口、驱动程序driver和驱动服务框架。
## 约束
系统:建议Ubuntu 20.04或者Windows 10
依赖版本:VS Code 1.62.0
## 使用方法
### 生成
1.安装typescript:在napi_generator/src/cli/h2hdf/src目录下执行命令:
```
npm i typescript
```
2.安装stdio:在napi_generator/src/cli/h2hdf目录下执行命令:
```
npm i stdio
```
3.在napi_generator/src/cli/h2hdf/src下执行以下命令:
```
node main.js -n hello
```
其中,参数详情如下:
-n, drivername,例如:hello
-v, 可选参数,版本,默认为4.1
-o, 可选参数,默认为当前目录,指定生成框架代码输出路径。
6.执行成功后在napi_generator/src/cli/h2hdf/src/下生成hellohdf文件夹,文件夹中目录结构如下所示:
```
hellohdf
├── HcsConfig # hcs配置文件
│ ├── device_info.hcs # 内容配置到源码vendor/hihope/rk3568/hdf_config/uhdf/device_info.hcs文件中
├── IdlInterface
│ ├── hello # 拷贝到源码drivers/interface
│ │ ├── v1_0
│ │ │ ├── BUILD.gn
│ │ │ ├── IHelloInterface.idl # idl接口
│ │ ├── bundle.json
├── Peripheral # 拷贝到源码drivers/peripheral
│ ├── hello
│ │ ├── hal
│ │ │ ├── include
│ │ │ │ ├── hello_dump.h
│ │ │ ├── BUILD.gn
│ │ │ ├── hello_dump.c # hidump实现
│ │ ├── hdi_service # hdi_service
│ │ │ ├── BUILD.gn # 编译两个动态库:libhello_driver、libhello_interface_service_1.0
│ │ │ ├── hello_interface_driver.cpp # driver:定义驱动入口的对象,将驱动入口注册到HDF框架中;在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动;当Init调用异常时,HDF框架会调用Release释放驱动资源并退出
│ │ │ ├── hello_interface_service.cpp # 驱动服务
│ │ │ ├── hello_interface_service.h
│ │ ├── utils/interface
│ │ │ ├── hello_log.h # 日志文件
│ │ ├── BUILD.gn
│ │ ├── bundle.json
```
### 编译
1. **拷目录:** 将hellohdf/Peripheral文件夹下的hello文件夹拷贝到源码drivers/peripheral目录下
```
cp hellohdf/Peripheral/hello 源码/drivers/peripheral -r
```
2. **拷目录:** 将hellohdf/IdlInterface文件夹下的hello文件夹拷贝到源码drivers/interface目录下
```
cp hellohdf/IdlInterface/hello 源码/drivers/interface -r
```
3. **改文件:** 将hellohdf/HcsConfig/device_info.hcs中的内容拷贝到源码vendor/hihope/rk3568/hdf_config/uhdf/device_info.hcs文件中,如下所示:
```
root {
device_info {
...
// 增加以下内容
hello :: host {
hostName = "hello_host";
priority = 50;
hello_device :: device {
device0 :: deviceNode {
preload = 0;
policy = 2;
priority = 100;
moduleName = "libhello_driver.z.so";
serviceName = "hello_interface_service";
}
}
}
// 增加上述内容
...
}
}
```
4. **配置产品:** 以rk3568为例,在源码vendor/hihope/rk3568/config.json文件中hdf子系统的components中增加以下内容:
```
{
"component": "drivers_interface_hello",
"features": []
},
{
"component": "drivers_peripheral_hello",
"features": []
}
```
"drivers_interface_hello"为生成的drivers/interface/hello/v1_0/BUILD.gn中的part_name,其中"drivers_interface_"为固定格式。drivers_peripheral_hello"为生成的drivers/peripheral/hello/bundle.json中的component,"drivers_peripheral_"为固定格式。
5. **编译:** 在源码下执行以下命令进行编译:
```
./build.sh --product-name rk3568
```
编译成功后,镜像位置在out/rk3568/packages/phone/image目录下
### 验证
#### 动态加载
1.查看hostId:镜像烧录后,在vendor/etc/init/hdf_devhost.cfg文件里查看hostId
```
cat vendor/etc/init/hdf_devhost.cfg
```
![pic_show_hostid.png](
https://forums-obs.openharmony.c ... b4qysqp1ztaanty.png
"pic_show_hostid.png")2.加载hello_host,命令如下:
```
./vendor/bin/hdf_devhost 14 hello_host
```
![pic_show_exe.png](
https://forums-obs.openharmony.c ... o0ici0oa2oo52ah.png
"pic_show_exe.png")
注意 :不可将进程kill
3.查看host是否加载:新开一个命令行窗口,hdc进入开发板,执行以下命令查看进程是否拉起:
```
ps -A | grep host
```
屏幕显示hello_host进程号,则表明host已被拉起
![pic_show_devhostPid.png](
https://forums-obs.openharmony.c ... 4z181gs1041lxsz.png
"pic_show_devhostPid.png")
4.使用hidumper查看更多细节信息:
通过DeviceServiceManager查询用户空间的设备信息
```
hidumper -s HdfDeviceServiceManager -a "-query"
```
![pic_show_host.png](
https://forums-obs.openharmony.c ... 6drnj7nnj3218jo.png
"pic_show_host.png")
通过DeviceServiceManager查询hello_host提供什么功能
```
hidumper -s HdfDeviceServiceManager -a "-host hello_host -h"
```
-h:打印dump help信息
![pic_show_dumph.png](
https://forums-obs.openharmony.c ... gogbuzfb51f1z1a.png
"pic_show_dumph.png")
通过DeviceServiceManager查询hello_host提供的helloworld功能
```
hidumper -s HdfDeviceServiceManager -a "-host hello_host -c"
```
-c:打印出Hello, World!
![pic_show_dump.png](
https://forums-obs.openharmony.c ... p12oo2aankvi2qn.png
"pic_show_dump.png")
其中,-h、-c定义在生成的hellohdf/Peripheral/hello/hal/hello_dump.c中:
![pic_show_dumpc.png](
https://forums-obs.openharmony.c ... edv5adnoiva6a5x.png
"pic_show_dumpc.png")
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5