RK3568------Openharmony 3.2-Release 文件系统打包
文章目录
前言
上一篇文章总结了如何在自己的板子上移植Openharmony 3.2-Release。适配自己的板子后,我准备调试硬件驱动,这里就会涉及到需要写一些测试程序(后续系统中需要的三方应用需要打包到文件系统中,同样适用此需求),在板子上验证外设驱动的功能是否正确。
一、遇到的问题
其实写测试程序很简单,我这里遇到的问题就是如何将这些测试程序放至自己的板子里。Ohos官方提供了一个工具hdc(https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-toolchain-hdc-guide.md),它可以收发文件至远端设备,但是在板子上使用有一个前提就是依赖USB的驱动,前面说了是移植过来自己的板子,USB的驱动还没调试,所以目前是无法使用hdc工具
二、解决思路
对于面临的问题,我能想到的思路有3种方式:
- 调试USB驱动
既然hdc工具依赖USB的驱动,而本身我的板子也需要调试USB驱动,那么在我的计划列表中只需将USB驱动优先级排在第一位即可,调通USB驱动就可以用hcd解决问题
- 将测试程序代码加入到Ohos体系中一起编译
通过阅读官方文档https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/quick-start/quickstart-pkg-3568-helloworld.md了解到我们可以添加一个应用程序到ohos中解决问题
- 重新打包文件系统镜像
在板子上查看/system/bin或/vendor/bin,我们可以看到很多可执行程序,从而思考这些可执行程序是如何产生的?如何存在在文件系统中的?我是否可以仿照此形式将我们的测试程序放到文件系统中,重新打包文件系统镜像解决问题
三、方案实现
针对3种解决问题的思路,我做了以下评估
- 方案一看似最简单直接,实际上与我面临的问题产生了鸡生蛋,蛋生鸡的矛盾。一方面不能直接上传测试程序,我只能通过反复修改编译烧写内核才能调试验证驱动,这样操作繁琐浪费时间。一方面hdc工具不是我目前所必须得工具。最后就是其他外设驱动的验证,我可以通过测试程序很快做验证。故此方案一我不作为解决问题的方式,不在此实现,留到后调试USB驱动时在考虑
- 方案二只需按照官方文档的Demo,添加自己的测试程序即可,好处是我需要学习掌握如何添加应用程序到ohos中,解决问题的同时掌握ohos构建规则。缺点是反复编译,烧录浪费时间
- 方案三只需把自己的测试程序Bin文件放进文件夹,重新编译打包文件系统镜像,单独烧写新镜像即可解决问题,好处是节省时间,缺点是需要仔细阅读ohos的编译脚本,打包脚本,知道ohos如何工作的
1. 通过新增子系统—部件—模块实现测试程序上传至板子
按照官方文档,添加子系统—部件—模块即可。官方文档说的很详细,节省篇幅我这里不做赘述,只展示一下我自己根据官方修改的地方
指定应用程序安装的位置(根据实际情况修改)
查看编译结果 //out/rk3568/packages/phone/vendor/bin
2. 通过重新打包文件系统镜像实现测试程序上传至板子
- 打包镜像流程分析
查看//build/ohos/images/build_image.py
这是一个python脚本,虽然我不懂python的语法,但是开发语言殊途同归,通过标记处可以看到调用mk_images来打包
查看 //build/ohos/images/mkimage/mkimages.py
这里通过文件类型来选择使用哪种脚本打包
查看 //build/ohos/images/mkimage/mkextimage.py
这里说明通过这两个函数格式化一个文件系统,然后将文件系统重新打包成镜像
分析到这里基本上我们已经知道ohos是如何打包的,接下来就是想办法知道函数里面的参数具体是什么,我是直接在脚本里加了两处打印,通过打印获取执行参数
这里我为什么要让他异常退出,是因为在正常执行的过程中,他是不打印的,只要报错才会打印,我怀疑是他执行脚本的时候输出重定向了,但是我没有找到证据。所以我直接采用简单粗暴的方式,让他异常退出
通过打印 我获取到了他的参数
mke2fs -I 256 -O ^has_journal -m 0 -L /vendor -M /vendor -t ext4 -b 4096 packages/phone/images/vendor.img 65535
out/rk3568/clang_x64/thirdparty/e2fsprogs/e2fsdroid -e -C build/ohos/images/mkimage/dac.txt -f out/rk3568/packages/phone/vendor -a /vendor out/rk3568/packages/phone/images/vendor.img
删除images中的vendor.img,然后执行mke2fs,格式化以后,在//out/rk3568/packages/phone/vendor/bin中,添加你想添加的文件,然后执行e2fsdroid 就会重新打包文件系统镜像了
总结
本人之前一直从事应用开发,借着这次电鸿的契机进行系统级开发的学习,将我在工作中的遇到的问题及解决思路记录并分享,希望可以与诸君共勉
目前网上技术讨论群大都是鸿蒙的应用开发,总结此类文章也是希望将同样进行鸿蒙设备开发的同僚召集到一起,一起讨论学习。如果有同样在进行鸿蒙设备开发的朋友,可以加我的联系方式,期待您的消息