鸿蒙移植指南:打包刷机与设备调试

描述

上一篇我们为大家解惑了 OpenHarmony 移植为什么这么难?这篇我们将分享打包刷机与简单设备调试。

 

打包 boot.img 镜像

    boot.img 打包流程如下:

内核+设备树打包出带设备树的内核

设备树内核+bootimg.cfg+ramdisk.img 打包成 boot.img

①修改内核启动参数

修改 boot.img 大小:原解压出的大小是 8m 多,我们的内核因为把模块编译进内核的缘故,容量会增大,导致使用原有配置文件会无法成功打包,所以我们增大到 16m,小米 6 的 boot 分区有 64m 不会影响 boot.img 的刷入。

 

bootsize = 0x1000000

 

修改并添加内核启动参数:

 

cmdline = clk_ignore_unused console=tty1 console=ttyGS0,115200 no_console_suspend hardware=sagit default_boot_device=1da4000.ufshc ohos.required_mount.system=/dev/block/platform/soc/1da4000.ufshc/by-name/system@/usr@ext4@ro,barrier=1@wait,required ohos.required_mount.vendor=/dev/block/platform/soc/1da4000.ufshc/by-name/cust@/vendor@ext4@ro,barrier=1@wait,required

 

其中 hardware 和 default_boot_device 为 OH 初始化时用于识别设备的参数,实测不配置也不影响启动。

 

hardware=sagit default_boot_device=1da4000.ufshc
 

 

ohos.required_mount.system 和 ohos.required_mount.vendor 是 OH 启动必须挂载的两个分区,必须进行配置。

 

ohos.required_mount.system=/dev/block/platform/soc/1da4000.ufshc/by-name/system@/usr@ext4@ro,barrier=1@wait,required ohos.required_mount.vendor=/dev/block/platform/soc/1da4000.ufshc/by-name/cust@/vendor@ext4@ro,barrier=1@wait,required
  console=tty1 是为启动日志输出到屏幕,后续可以进行观察 OH 的渲染框架是否接管屏幕 console=ttyGS0,115200 为开启串口控制台,后续方便进行输入命令,进行 debug 调试等。 其他可按需配置,启动参数参考标准 Linux。

 

②打包带设备树的内核

命令如下,直接用 cat 命令,把内核和设备树二进制文件直接输出成 Image.gz-dtb。

 

cat ${KERNEL_IMAGE_FILE} ${DTB} > "${OUT_PKG_DIR}/Image.gz-dtb"
   

 

③打包 boot.img

命令如下,使用 abootimg 工具,--create 指定进行 boot.img 创建的位置,-f 指定 bootimg.cfg 位置,-k 指定带设备树内核的位置,-r 指定 ramdisk.img 的位置。

 

abootimg --create "${OUT_PKG_DIR}/boot.img" -f ${BOOTCFG} -k "${OUT_PKG_DIR}/Image.gz-dtb" -r "${OUT_PKG_DIR}/ramdisk.img"
    OH 的编译框架已经帮我们打包好了 system.img 和 vendor.img,在 out/packages/phone/images 中,复制 boot.img,system.img 和 vendor.img 到电脑中,准备进行刷机工作。

 

注意:刷机会格式化手机,请使用备用机进行刷机,刷机前有需要的话请把手机的数据复制到电脑,刷机有风险,请自行判断,变砖概不负责!!!

刷入镜像

①TWRP 刷入镜像

按音量键上+电源开机进入 TWRP,这时 TWRP 会进入 MTP 模式,把刷机镜像复制进手机。

内核

选择安装:

内核

内核

选择刷入镜像,这时才会显示我们的刷机文件:

内核

选择 boot.img,选择 boot 分区:

内核

滑动确认刷入:

内核

按两次返回,选择 system.img,选择 system 分区:

内核

同样按两次返回,选择 vendor.img,选择 vendor 分区: 内核 回到主页,选择清除,选择格式化 Data 分区:

内核

输入 yes,格式化完成后重启:

内核

②fastboot 刷入镜像

按音量键下+开机键进入 fastboot 模式,连接电脑,装好驱动,使用以下命令进行刷机:

 

fastboot flash boot (boot.img的路径)
fastboot flash system (system.img的路径)
fastboot flash vendor (vendor.img的路径)
fastboot erase userdata
fastboot reboot
     

 

简单调试经验分享

①设备不断重启

上篇文章中我们配置了 usb 串口,如果内核驱动正常的话手机使用 usb 连接电脑会自动识别为 com 设备,这时我们使用 xshell,mobaxterm 等工具查看串口日志。 内核 比如一般不断重启是因为 render_service 的崩溃,渲染服务是关键服务,OH 设置了崩溃会自动重启:

内核

为了调试我们先更改一下设置,让它不自动重启,找到渲染服务的配置,把 critical 第一个参数从 1 改成 0,这样就不会自动重启了。

内核

②使用 modetest 测试 DRM 驱动

要使 OH 能顺利点亮,我们首先要确认内核 DRM 驱动是否正常工作,这里我使用的是 modetest 进行测试。 modetest 的代码已经存在 libdrm 的仓库中,但是没有加入 OH 的编译框架,有需要的同学可以参考我移植树莓的 board 仓,里面的 test 文件夹中有写好的配置。

编译好 modetest 之后直接运行是没有效果的,因为 OH 的渲染服务占用了显卡,我们先把渲染服务关闭:

 

service_control stop render_service
   

 

关闭渲染服务之后,我们运行 modetest,modetest 会遍历设备所有的显卡,并打印出信息:

 

modetest
   

 

查看 log:

 

......
trying to open device 'msm'...done
Encoders:
id    crtc    type    possible crtcs  possible clones 
31    81  DSI 0x00000001  0x00000001

Connectors:
id    encoder status      name        size (mm)   modes   encoders
32    31  connected   DSI-1           64x114      1   31
  modes:
    index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
  #0 1080x1920 60.00 1080 1200 1216 1256 1920 1924 1926 1930 145444 flags: ; type: preferred, driver
  ......
    我们可以找到,我们的驱动模块名为 msm,Connector id 为 32,mode 名为 1080x1920。

 

查看 modetest 支持的命令,配置这两个参数:

 

-M module use the given driver
-s [,][@]:[#][-][@] set a mode
   

 

我的命令简化为:

 

modetest -M msm -s 32:1080x1920
    运行命令后,手机屏幕显示出颜色条纹,即为 DRM 驱动工作正常:

 

内核

③OH 渲染框架调试

配置 hilog 打印等级,启动屏幕调试 hilog 打印:

内核

内核

使用命令启动渲染服务,并过滤只显示 display 相关的内容:

 

hilog -D 0xD001400 & service_control start render_service
    打通串口并能显示 log 信息之后就是各种调试代码了,这部分操作就跟开发板差不多了,接下去就是对照 log 跟代码不断拉扯了,教程只能到这里了,祝各位调试顺利。  

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分