From 0173c4ec7472165bbd379dea49ab21f02b813331 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Wed, 11 Sep 2024 15:57:38 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B92hdf=20develop=20guide?= =?UTF-8?q?=E4=B8=8Eusage=20guide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- src/cli/h2hdf/docs/DEVELOP.md | 203 ++---------------- src/cli/h2hdf/docs/figures/pic_code_frame.png | Bin 37189 -> 22667 bytes .../h2hdf/docs/figures/pic_code_process.png | Bin 0 -> 37189 bytes src/cli/h2hdf/docs/usage.md | 6 +- src/cli/h2hdf/src/generate.js | 2 +- src/cli/h2hdf/src/main.js | 10 +- 6 files changed, 27 insertions(+), 194 deletions(-) create mode 100644 src/cli/h2hdf/docs/figures/pic_code_process.png diff --git a/src/cli/h2hdf/docs/DEVELOP.md b/src/cli/h2hdf/docs/DEVELOP.md index c9ef1456..9af9b0fb 100644 --- a/src/cli/h2hdf/docs/DEVELOP.md +++ b/src/cli/h2hdf/docs/DEVELOP.md @@ -47,16 +47,22 @@ h2hdf 运行逻辑 -![image-20240724093743837](./figures/pic_code_frame.png) +![image-20240724093743837](./figures/pic_code_process.png) + +main.js为脚本入口,其中使用stdio.getopt获取参数,其中,参数详情如下: + + -n, drivername,例如:hello + + -v, 可选参数,版本,默认为v4_1 -main.js为脚本入口,其中使用stdio.getopt获取参数,参数分别为: -n, drivername,例如:hello;-v, 可选参数,版本,默认为4.1;-o, 可选参数,默认为当前目录,指定生成框架代码输出路径。 + -o, 可选参数,默认为当前目录,指定生成框架代码输出路径。 ``` let ops = stdio.getopt({ // 输入driver name ,输入一个字符串,默认为hello 'drivername': { key: 'n', args: 1, description: 'driver name', default: 'hello' }, // 输入版本号 - 'version': { key: 'v', args: 1, description: 'source version', default: '4.1' }, + 'version': { key: 'v', args: 1, description: 'source version', default: 'v4_1' }, // 输出文件夹路径 'out': { key: 'o', args: 1, description: 'output directory', default: '' }, }); @@ -66,7 +72,7 @@ let ops = stdio.getopt({ ``` ... -const allowedVersion = ['4.0', '4.1', '5.0', '5.1']; +const allowedVersion = ['v4_1']; function isValidValue(value, allowedVersion) { return allowedVersion.includes(value); } @@ -77,17 +83,6 @@ function checkInput(input) { } ``` -使用getJsonCfg读取json文件中hdf框架模板的路径: - -``` -function getJsonCfg(jsonFilePath) { - let jsonCfg = null; - let jsonFile = fs.readFileSync(jsonFilePath, { encoding: 'utf8' }); - jsonCfg = JSON.parse(jsonFile); - return jsonCfg; -} -``` - 获取到每个模板的路径后,根据路径读取模板文件,并替换模板文件中的drivername等: ``` @@ -106,178 +101,24 @@ function genDriverFramework(driverName, frameworkJson, version, out = '') { } ``` -## 工具使用方法说明 - -### 生成 - -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下执行以下命令生成ts声明文件: - -``` -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 -``` - -将hellohdf/IdlInterface文件夹下的hello文件夹拷贝到源码drivers/interface目录下 - -``` -cp hellohdf/IdlInterface/hello 源码/drivers/interface -``` - -将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"; - } - } - } - ... - } - } -``` - -2.配置产品:以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_peripheral_hello为drivers/peripheral/hello/bundle.json中的component。 - -3.编译,在源码下执行以下命令进行编译: - -``` -./build.sh --product-name rk3568 -``` - -编译成功后,将源码下out/rk3568/packages/phone/image镜像烧录在dayu200开发板上 - -### 验证 - -#### 动态加载 - -1.查看hostId:hdc连接开发板,进入/vendor/etc/init路径下,并查看hdf_devhost.cfg文件,使用hdc命令如下: - -``` -cat hdf_devhost.cfg -``` - -根据hostName找到对应hostId,如本例的hostName为hello_host,对应找到“name”为“hello_host”那一项,查看“path”的第二个参数,则为hostName对应的hostId,即14,如下所示: - -![image-20240724093743837](./figures/pic_show_hostid.png) - -2.运行可执行文件hdf_devhost,手动拉起host:进入/vendor/bin路径下,运行可执行文件hdf_devhost,传入一个参数为hostId,第二个参数为hostName;运行命令如下所示: - -``` -./hdf_devhost 14 hello_host -``` - -![image-20240903114845035](./figures/pic_show_exe.png) - -注意 :不可将进程kill - -3.查看host是否加载:新开一个命令行窗口,hdc进入开发板,执行以下命令查看进程是否拉起: - -``` -ps -A | grep host -``` - -屏幕显示hello_host进程号,则表明host已被拉起 - -![image-20240724093743837](./figures/pic_show_devhostPid.png) - -4.使用hidumper查看更多细节信息: +## 开发指导 -查询所有正在运行的host +### 适配新版本 -``` - hidumper -s HdfDeviceServiceManager -a "-query" -``` - -![image-20240724093543096](./figures/pic_show_host.png) +若当前工具不能满足需要,用户可对工具进行二次开发。例如:当前工具适配的源码版本是4.1,若用户需要适配其它版本,用户需修改以下文件进行适配: -使用hidumper查看更多信息 +1.在main.js中,在allowedVersion数组中加入适配的版本号,其中版本号需统一写法,如4.1统一为v4_1, 5.0统一为v5_0。 -``` -hidumper -s HdfDeviceServiceManager -a "-host hello_host -c" -``` +2.在templete目录下,以适配5.0源码为例,IdlInterfaceTemplete目录下新建v5_0文件夹,在v5_0文件夹下新增bundle.json模板,在 Periphheral, Periphheral/DumpExampleTemplete, Periphheral/HdiServiceTemplete新增v5_0文件夹,在v5_0下新增对应的BUILD.gn模板,并在framework.json中新增5.0版本的bundle.json,BUILD.gn模板路径。 -打印出Hello, World! +3.在generate.js中,在genInterface方法、genExampleDumpfile方法、genHdiService方法、genBuildFile方法中修改相应代码:当rootInfo.version为v5_0时,替换对应的BUILD.gn, bundle.json模板路径。 -![image-20240724093535915](./figures/pic_show_dump.png) +若适配新版本需要增加其它配置,可在templete目录下增加配置模板,并在framework.json中增加配置文件模板的路径,最后在generate.js中生成最终配置文件。 -#### 静态加载 +## Roadmap -// todo 待补充 +| 工作目标 | 工作内容 | 验收要求 | 时间节点 | +| ----------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | +| 支持一个简单的sample_host模板 | 根据工具基于OpenHarmony4.1源码,编写脚本生成Hdf框架模板,其中包括hcsconfig模板,idl接口模板,peripheral模板 | 生成之后可动态加载Host,并能使用Hidump查看日志,打印出"hello word!" | 2024.8(已完成) | +| 完善host模板 | 增加testapp测试程序;完善模板中hitrace日志跟踪定位工具的使用;模板中增加死亡监听:客户端监听服务端消亡、服务端监听客户端消亡、服务端监听底层HDI侧消亡 | 驱动host能随镜像起来,在testapp中能测试监听客户端/服务端/hdi侧消亡是否成功;检测接口被调用时打印hitrace日志 | 2024.10 | diff --git a/src/cli/h2hdf/docs/figures/pic_code_frame.png b/src/cli/h2hdf/docs/figures/pic_code_frame.png index 1f77649365e6174e8f482ffef45c86f8dc0d9c05..8b21ad852e85b4cf16aaae5639fdd7144ae8916f 100644 GIT binary patch literal 22667 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 Date: Wed, 11 Sep 2024 16:20:19 +0800 Subject: [PATCH 2/4] fix codecheck Signed-off-by: gou-jingjing --- src/cli/h2hdf/docs/{DEVELOP.md => develop.md} | 19 ++++++------ src/cli/h2hdf/docs/figures/pic_show_exe.png | Bin 855 -> 1151 bytes src/cli/h2hdf/docs/usage.md | 28 ++++++++++-------- src/cli/h2hdf/src/main.js | 10 +++++-- 4 files changed, 33 insertions(+), 24 deletions(-) rename src/cli/h2hdf/docs/{DEVELOP.md => develop.md} (82%) diff --git a/src/cli/h2hdf/docs/DEVELOP.md b/src/cli/h2hdf/docs/develop.md similarity index 82% rename from src/cli/h2hdf/docs/DEVELOP.md rename to src/cli/h2hdf/docs/develop.md index 9af9b0fb..a1c67999 100644 --- a/src/cli/h2hdf/docs/DEVELOP.md +++ b/src/cli/h2hdf/docs/develop.md @@ -53,7 +53,7 @@ main.js为脚本入口,其中使用stdio.getopt获取参数,其中,参数 -n, drivername,例如:hello - -v, 可选参数,版本,默认为v4_1 + -v, 可选参数,版本,默认为4.1 -o, 可选参数,默认为当前目录,指定生成框架代码输出路径。 @@ -62,7 +62,7 @@ let ops = stdio.getopt({ // 输入driver name ,输入一个字符串,默认为hello 'drivername': { key: 'n', args: 1, description: 'driver name', default: 'hello' }, // 输入版本号 - 'version': { key: 'v', args: 1, description: 'source version', default: 'v4_1' }, + 'version': { key: 'v', args: 1, description: 'source version', default: '4.1' }, // 输出文件夹路径 'out': { key: 'o', args: 1, description: 'output directory', default: '' }, }); @@ -72,7 +72,7 @@ let ops = stdio.getopt({ ``` ... -const allowedVersion = ['v4_1']; +const allowedVersion = ['4.1']; function isValidValue(value, allowedVersion) { return allowedVersion.includes(value); } @@ -105,20 +105,21 @@ function genDriverFramework(driverName, frameworkJson, version, out = '') { ### 适配新版本 -若当前工具不能满足需要,用户可对工具进行二次开发。例如:当前工具适配的源码版本是4.1,若用户需要适配其它版本,用户需修改以下文件进行适配: +适配新版本的步骤如下: -1.在main.js中,在allowedVersion数组中加入适配的版本号,其中版本号需统一写法,如4.1统一为v4_1, 5.0统一为v5_0。 +1.在main.js中,在allowedVersion数组中加入适配的版本号,其中版本号需统一写法,如4.1 -2.在templete目录下,以适配5.0源码为例,IdlInterfaceTemplete目录下新建v5_0文件夹,在v5_0文件夹下新增bundle.json模板,在 Periphheral, Periphheral/DumpExampleTemplete, Periphheral/HdiServiceTemplete新增v5_0文件夹,在v5_0下新增对应的BUILD.gn模板,并在framework.json中新增5.0版本的bundle.json,BUILD.gn模板路径。 +2.在templete目录下,IdlInterfaceTemplete目录下新建适配版本文件夹,如v4_1,在适配版本文件夹下新增bundle.json模板,在 Periphheral, Periphheral/DumpExampleTemplete, Periphheral/HdiServiceTemplete新增适配版本文件夹,在适配版本下新增对应的BUILD.gn模板,并在framework.json中新增版本的bundle.json,BUILD.gn模板路径。 -3.在generate.js中,在genInterface方法、genExampleDumpfile方法、genHdiService方法、genBuildFile方法中修改相应代码:当rootInfo.version为v5_0时,替换对应的BUILD.gn, bundle.json模板路径。 +3.在generate.js中,在genInterface方法、genExampleDumpfile方法、genHdiService方法、genBuildFile方法中修改相应代码:当rootInfo.version为新增版本时,替换对应的BUILD.gn, bundle.json模板路径。 -若适配新版本需要增加其它配置,可在templete目录下增加配置模板,并在framework.json中增加配置文件模板的路径,最后在generate.js中生成最终配置文件。 +4.适配新版本增加其它配置时,可在templete目录下增加配置模板,并在framework.json中增加配置文件模板的路径,然后在generate.js中替换模板并生成配置文件。 ## Roadmap | 工作目标 | 工作内容 | 验收要求 | 时间节点 | | ----------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | | 支持一个简单的sample_host模板 | 根据工具基于OpenHarmony4.1源码,编写脚本生成Hdf框架模板,其中包括hcsconfig模板,idl接口模板,peripheral模板 | 生成之后可动态加载Host,并能使用Hidump查看日志,打印出"hello word!" | 2024.8(已完成) | -| 完善host模板 | 增加testapp测试程序;完善模板中hitrace日志跟踪定位工具的使用;模板中增加死亡监听:客户端监听服务端消亡、服务端监听客户端消亡、服务端监听底层HDI侧消亡 | 驱动host能随镜像起来,在testapp中能测试监听客户端/服务端/hdi侧消亡是否成功;检测接口被调用时打印hitrace日志 | 2024.10 | +| 完善host模板 | 增加testapp测试程序;完善模板中hitrace日志跟踪定位工具的使用;模板中增加死亡监听:客户端监听服务端消亡、服务端监听客户端消亡、服务端监听底层HDI侧消亡 | 驱动host能随镜像起来,服务端/客户端/HDI侧消亡时能打印出日志;检测接口被调用时打印hitrace日志 | 2024.10 | +| 适配5.0 | 适配5.0release版本 | 适配5.0时,可以编译出对应版本的工具,且编译验证成功 | 2024.11 | diff --git a/src/cli/h2hdf/docs/figures/pic_show_exe.png b/src/cli/h2hdf/docs/figures/pic_show_exe.png index d63fc90ae6b621654350bc608bf014cae1384ba7..fdbdca856d36825d4cc459aa65ac918403fc49f5 100644 GIT binary patch literal 1151 zcmd5+>rYw-6u+9a>9k$etZLR;-R9EPN6lJ7m#V;YI&^CtIw@RrV(Wv(qO4^dR#BF& zCiPLs)@mwX4OlG!#OYnM_#$x=I@Ei!tUgeXO)6L(l1UY@fV+O#->?tooZm0!@%wOc zP9rIscqrs(2mkVBKnX{_M9CZU)QhPA(9aL` zUEYWCH^0dQSpe|XuX`4xWlBrYnj=~1sd?2!&V_<1!$$`{`#Z6COD%K6HiVoirsh6& zm>!i{QaD#9g^t37$J{8s*4m241Y(8e4ur2T}wGh_kQ1cFYkiEsX3|f?1|QHU2P~#sGYX zn7*2^YZM9G(l%^G-58GImiyv*w$6smS~v~{K8ZLWfPD#VldXQbl>#rj+^7ccMT~K{ z)dosf-2%M|(+q-vX9;o};V1sLcKGS$E{TGnC(7CpvwpPK(+_#qB7d()azoT`%2sCw z?WG~Q(N;J5j{Q{&RK^-S(d4>YzEF#!9c#2PreTQTSGdo_Per$vk^LQBGea-xZCv?$ z$bTn)M&y+$mxPnBr3)I;u`Treg!K~8McUkhycka{)FTL+9LCN4_=pF$7;9y8CoH!O zaBgzDZG^MCnf%+OV&0DI2?ir?Tsb!=jJ9?J)*QVXF?2WR%ry+Uk$4QrN&#c2jiPuzg_Z@4Hm{dK8R7< zJd(n2=sYt2UCAG&Uj6)Ptv^yYbUnU_h$ByHxaEvfJKBit)2LGQ*KV5c!t)}`?bC= zSsTFdaEqt)<#R`W|EsugGTeHFBg_7{_1F0u&L2}^D5w*xsjok6(eV6_F4OPBJ3q5e zRsFEfD1P?xeRUUi*2KqtzoE2Z{`q;PuOeqYziYU7XYn<^xAQK>rr%HB7ME#URlMkr z=BQ&J?>5r>Hf4h;@H*CwRTnCHcs6$X{~hUyG8SqFP=FwbMK6+r`Mm^ zwCEp5`1Z>a_c^MJL+>10^haabM9cWVuXgh~Q>$KWPA%T%b~Js3@#n-9^{M~7&T~!|b6neBLZ@m1Ha_0K|mp8DU|#j$A4`}0SxJP&()`qSRJzO%P?EPb>}z3b+V zQ$P2JKCOQ9=3b9a@A9n0GkRCw$%(uAqo)5=XOh{vBD;LopLe(YTYqq}KAXb(ANI0y zFPY`^zdHCl;J)y*S3l4Hd#l7S;kXjR0Wb>Kz`+1PB05YA5X9QezyL-L2dSg%N5%U2 Z@jAZ_hH6bHdj!l344$rjF6*2UngDjdp_c#v diff --git a/src/cli/h2hdf/docs/usage.md b/src/cli/h2hdf/docs/usage.md index b4024818..a29ecf12 100644 --- a/src/cli/h2hdf/docs/usage.md +++ b/src/cli/h2hdf/docs/usage.md @@ -30,7 +30,7 @@ node main.js -n hello -n, drivername,例如:hello - -v, 可选参数,版本,默认为v4_1 + -v, 可选参数,版本,默认为4.1 -o, 可选参数,默认为当前目录,指定生成框架代码输出路径。 @@ -66,24 +66,25 @@ hellohdf ### 编译 -1.将hellohdf/Peripheral文件夹下的hello文件夹拷贝到源码drivers/peripheral目录下 +1.**拷目录:**将hellohdf/Peripheral文件夹下的hello文件夹拷贝到源码drivers/peripheral目录下 ``` -cp hellohdf/Peripheral/hello 源码/drivers/peripheral +cp hellohdf/Peripheral/hello 源码/drivers/peripheral -r ``` -将hellohdf/IdlInterface文件夹下的hello文件夹拷贝到源码drivers/interface目录下 +2.**拷目录:**将hellohdf/IdlInterface文件夹下的hello文件夹拷贝到源码drivers/interface目录下 ``` -cp hellohdf/IdlInterface/hello 源码/drivers/interface +cp hellohdf/IdlInterface/hello 源码/drivers/interface -r ``` -将hellohdf/HcsConfig/device_info.hcs中的内容拷贝到源码vendor/hihope/rk3568/hdf_config/uhdf/device_info.hcs文件中,如下所示: +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; @@ -97,12 +98,13 @@ cp hellohdf/IdlInterface/hello 源码/drivers/interface } } } + // 拷贝上述内容 ... } } ``` -2.配置产品:以rk3568为例,在源码vendor/hihope/rk3568/config.json文件中hdf子系统的components中增加以下内容: +4.**配置产品:**以rk3568为例,在源码vendor/hihope/rk3568/config.json文件中hdf子系统的components中增加以下内容: ``` { @@ -115,9 +117,9 @@ cp hellohdf/IdlInterface/hello 源码/drivers/interface } ``` -注意:drivers_interface_hello为drivers/interface/hello/v1_0/BUILD.gn中的part_name。drivers_peripheral_hello为drivers/peripheral/hello/bundle.json中的component。 +"drivers_interface_hello"中的"drivers_peripheral_"为固定格式,"drivers_interface_hello"即为生成的drivers/interface/hello/v1_0/BUILD.gn中的part_name。"drivers_peripheral_hello"的"drivers_peripheral_"为固定格式,"drivers_peripheral_hello"即为生成的drivers/peripheral/hello/bundle.json中的component。 -3.编译,在源码下执行以下命令进行编译: +5.**编译烧录:**在源码下执行以下命令进行编译: ``` ./build.sh --product-name rk3568 @@ -129,20 +131,20 @@ cp hellohdf/IdlInterface/hello 源码/drivers/interface #### 动态加载 -1.查看hostId:hdc连接开发板,进入/vendor/etc/init路径下,并查看hdf_devhost.cfg文件,使用hdc命令如下: +1.查看hostId:hdc连接开发板,查看hdf_devhost.cfg文件,使用hdc命令如下: ``` -cat hdf_devhost.cfg +cat vendor/etc/init/hdf_devhost.cfg ``` 根据hostName找到对应hostId,如本例的hostName为hello_host,对应找到“name”为“hello_host”那一项,查看“path”的第二个参数,则为hostName对应的hostId,即14,如下所示: ![image-20240724093743837](./figures/pic_show_hostid.png) -2.运行可执行文件hdf_devhost,手动拉起host:进入/vendor/bin路径下,运行可执行文件hdf_devhost,传入一个参数为hostId,第二个参数为hostName;运行命令如下所示: +2.运行可执行文件hdf_devhost,手动拉起host:运行可执行文件hdf_devhost,传入一个参数为hostId,第二个参数为hostName;运行命令如下所示: ``` -./hdf_devhost 14 hello_host +./vendor/bin/hdf_devhost 14 hello_host ``` ![image-20240903114845035](./figures/pic_show_exe.png) diff --git a/src/cli/h2hdf/src/main.js b/src/cli/h2hdf/src/main.js index ef2b7788..15138aa0 100644 --- a/src/cli/h2hdf/src/main.js +++ b/src/cli/h2hdf/src/main.js @@ -21,12 +21,12 @@ let ops = stdio.getopt({ // 输入driver name ,输入一个字符串,默认为hello 'drivername': { key: 'n', args: 1, description: 'driver name', default: 'hello' }, // 输入版本号 - 'version': { key: 'v', args: 1, description: 'source version', default: 'v4_1' }, + 'version': { key: 'v', args: 1, description: 'source version', default: '4.1' }, // 输出文件夹路径 'out': { key: 'o', args: 1, description: 'output directory', default: '' }, }); -const allowedVersion = ['v4_1']; +const allowedVersion = ['4.1']; let drivername = ops.drivername; let version = ops.version; @@ -40,6 +40,12 @@ if (drivername.trim().length !== 0 && checkInput(drivername)) { // 在这里读取cfg文件 let frameworkJsonPath = path.join(__dirname, './templete/framework.json'); let frameworkJson = getJsonCfg(frameworkJsonPath); + if (version === '4.1') { + version = 'v4_1'; + } else { + console.log('其他版本暂不支持...'); + return; + } // 然后再调用templete生成模板 main.genDriverFramework(drivername, frameworkJson, version, ops.out); -- Gitee From fa4212a48bf36de5ab8c02fcce772b2e75de92ec Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Sat, 14 Sep 2024 14:30:19 +0800 Subject: [PATCH 3/4] fix codecheck Signed-off-by: gou-jingjing --- src/cli/h2hdf/docs/figures/pic_show_dumpc.png | Bin 0 -> 4823 bytes src/cli/h2hdf/docs/figures/pic_show_dumph.png | Bin 0 -> 4252 bytes .../h2hdf/docs/figures/pic_show_hostid.png | Bin 3617 -> 4090 bytes src/cli/h2hdf/docs/usage.md | 42 +++++++++++------- .../DumpExampleTemplete/dumpCTemplete.gen | 2 +- 5 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 src/cli/h2hdf/docs/figures/pic_show_dumpc.png create mode 100644 src/cli/h2hdf/docs/figures/pic_show_dumph.png diff --git a/src/cli/h2hdf/docs/figures/pic_show_dumpc.png b/src/cli/h2hdf/docs/figures/pic_show_dumpc.png new file mode 100644 index 0000000000000000000000000000000000000000..e563e26996fe48b539f4bbe3cc52052ee92e275f GIT binary patch literal 4823 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 literal 0 HcmV?d00001 diff --git a/src/cli/h2hdf/docs/figures/pic_show_hostid.png b/src/cli/h2hdf/docs/figures/pic_show_hostid.png index 7faaa1dbfd96a47ed8a1745b242428d0c458756e..76317e5c51cb1b8c750df1d5b3597e6107a46c37 100644 GIT binary patch literal 4090 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 literal 3617 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 WzmK*X$44?990@#ru=-EYfBP57nv}@^ diff --git a/src/cli/h2hdf/docs/usage.md b/src/cli/h2hdf/docs/usage.md index a29ecf12..f4618807 100644 --- a/src/cli/h2hdf/docs/usage.md +++ b/src/cli/h2hdf/docs/usage.md @@ -20,7 +20,7 @@ npm i stdio -3.在napi_generator/src/cli/h2hdf/src下执行以下命令生成ts声明文件: +3.在napi_generator/src/cli/h2hdf/src下执行以下命令: ``` node main.js -n hello @@ -66,25 +66,25 @@ hellohdf ### 编译 -1.**拷目录:**将hellohdf/Peripheral文件夹下的hello文件夹拷贝到源码drivers/peripheral目录下 +1. **拷目录:** 将hellohdf/Peripheral文件夹下的hello文件夹拷贝到源码drivers/peripheral目录下 ``` cp hellohdf/Peripheral/hello 源码/drivers/peripheral -r ``` -2.**拷目录:**将hellohdf/IdlInterface文件夹下的hello文件夹拷贝到源码drivers/interface目录下 +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文件中,如下所示: +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; @@ -98,13 +98,13 @@ cp hellohdf/IdlInterface/hello 源码/drivers/interface -r } } } - // 拷贝上述内容 + // 增加上述内容 ... } } ``` -4.**配置产品:**以rk3568为例,在源码vendor/hihope/rk3568/config.json文件中hdf子系统的components中增加以下内容: +4. **配置产品:** 以rk3568为例,在源码vendor/hihope/rk3568/config.json文件中hdf子系统的components中增加以下内容: ``` { @@ -117,31 +117,29 @@ cp hellohdf/IdlInterface/hello 源码/drivers/interface -r } ``` -"drivers_interface_hello"中的"drivers_peripheral_"为固定格式,"drivers_interface_hello"即为生成的drivers/interface/hello/v1_0/BUILD.gn中的part_name。"drivers_peripheral_hello"的"drivers_peripheral_"为固定格式,"drivers_peripheral_hello"即为生成的drivers/peripheral/hello/bundle.json中的component。 +"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.**编译烧录:**在源码下执行以下命令进行编译: +5. **编译:** 在源码下执行以下命令进行编译: ``` ./build.sh --product-name rk3568 ``` -编译成功后,将源码下out/rk3568/packages/phone/image镜像烧录在dayu200开发板上 +编译成功后,镜像位置在out/rk3568/packages/phone/image目录下 ### 验证 #### 动态加载 -1.查看hostId:hdc连接开发板,查看hdf_devhost.cfg文件,使用hdc命令如下: +1.查看hostId:镜像烧录后,在vendor/etc/init/hdf_devhost.cfg文件里查看hostId ``` cat vendor/etc/init/hdf_devhost.cfg ``` -根据hostName找到对应hostId,如本例的hostName为hello_host,对应找到“name”为“hello_host”那一项,查看“path”的第二个参数,则为hostName对应的hostId,即14,如下所示: - ![image-20240724093743837](./figures/pic_show_hostid.png) -2.运行可执行文件hdf_devhost,手动拉起host:运行可执行文件hdf_devhost,传入一个参数为hostId,第二个参数为hostName;运行命令如下所示: +2.加载hello_host,命令如下: ``` ./vendor/bin/hdf_devhost 14 hello_host @@ -171,13 +169,25 @@ ps -A | grep host ![image-20240724093543096](./figures/pic_show_host.png) -使用hidumper查看更多信息 +对特定的SA执行命令:对特定的SA执行-a参数后的命令,-a后的命令由用户自己定义,在生成的hellohdf/Peripheral/hello/hal/hello_dump.c中定义如下: + +![image-20240724093543096](./figures/pic_show_dumpc.png) + +本例中,-h为自定义的help,显示参数定义, -c为自定义的用于打印helloworld的参数 + +``` +hidumper -s HdfDeviceServiceManager -a "-host hello_host -h" +``` + +-h:打印dump help信息 + +![image-20240724093543096](./figures/pic_show_dumph.png) ``` hidumper -s HdfDeviceServiceManager -a "-host hello_host -c" ``` -打印出Hello, World! +-c:打印出Hello, World! ![image-20240724093535915](./figures/pic_show_dump.png) diff --git a/src/cli/h2hdf/src/templete/PeripheralTemplete/DumpExampleTemplete/dumpCTemplete.gen b/src/cli/h2hdf/src/templete/PeripheralTemplete/DumpExampleTemplete/dumpCTemplete.gen index b3f17584..9254a340 100644 --- a/src/cli/h2hdf/src/templete/PeripheralTemplete/DumpExampleTemplete/dumpCTemplete.gen +++ b/src/cli/h2hdf/src/templete/PeripheralTemplete/DumpExampleTemplete/dumpCTemplete.gen @@ -26,7 +26,7 @@ static const char *g_dumpHelp = " usage:\n" " -h, --help: dump help\n" - " -c, --channel: dump the [driver_name] channel info\n"; + " -c, --hello: dump the helloworld info\n"; static uint32_t ShowHelloworldInfo(struct HdfSBuf *reply) { -- Gitee From e7d62cc9f51d710cb5fc5a71db859296a1b42c67 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Sat, 14 Sep 2024 15:23:06 +0800 Subject: [PATCH 4/4] fix codecheck Signed-off-by: gou-jingjing --- src/cli/h2hdf/docs/usage.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/cli/h2hdf/docs/usage.md b/src/cli/h2hdf/docs/usage.md index f4618807..a2dae64f 100644 --- a/src/cli/h2hdf/docs/usage.md +++ b/src/cli/h2hdf/docs/usage.md @@ -161,7 +161,7 @@ ps -A | grep host 4.使用hidumper查看更多细节信息: -查询所有正在运行的host +通过DeviceServiceManager查询用户空间的设备信息 ``` hidumper -s HdfDeviceServiceManager -a "-query" @@ -169,11 +169,7 @@ ps -A | grep host ![image-20240724093543096](./figures/pic_show_host.png) -对特定的SA执行命令:对特定的SA执行-a参数后的命令,-a后的命令由用户自己定义,在生成的hellohdf/Peripheral/hello/hal/hello_dump.c中定义如下: - -![image-20240724093543096](./figures/pic_show_dumpc.png) - -本例中,-h为自定义的help,显示参数定义, -c为自定义的用于打印helloworld的参数 +通过DeviceServiceManager查询hello_host提供什么功能 ``` hidumper -s HdfDeviceServiceManager -a "-host hello_host -h" @@ -183,6 +179,8 @@ hidumper -s HdfDeviceServiceManager -a "-host hello_host -h" ![image-20240724093543096](./figures/pic_show_dumph.png) +通过DeviceServiceManager查询hello_host提供的helloworld功能 + ``` hidumper -s HdfDeviceServiceManager -a "-host hello_host -c" ``` @@ -191,6 +189,10 @@ hidumper -s HdfDeviceServiceManager -a "-host hello_host -c" ![image-20240724093535915](./figures/pic_show_dump.png) +其中,-h、-c定义在生成的hellohdf/Peripheral/hello/hal/hello_dump.c中: + +![image-20240724093543096](./figures/pic_show_dumpc.png) + #### 静态加载 // todo 待补充 -- Gitee