5

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区-51CTO.COM

 1 year ago
source link: https://ost.51cto.com/posts/20924
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试 原创 精华

1,打包boot.img镜像

boot.img打包流程:

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

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

1.1 修改内核启动参数
1.1.1 修改boot.img大小

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

bootsize = 0x1000000
1.1.2 修改并添加内核启动参数
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。

1.2 打包带设备树的内核

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

cat ${KERNEL_IMAGE_FILE} ${DTB} > "${OUT_PKG_DIR}/Image.gz-dtb"
1.3打包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到电脑中,准备进行刷机工作。

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

2,刷入镜像

2.1 TWRP刷入镜像

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

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区
OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区
OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

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

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

选择boot.img,选择boot分区

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

滑动确认刷入

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

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

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

同样按两次返回,选择vendor.img,选择vendor分区

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

回到主页,选择清除,选择格式化Data分区

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

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

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区
2.2 fastboot刷入镜像

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

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

2,简单调试经验分享

2.1 设备不断重启

上篇文章中我们配置了usb串口,如果内核驱动正常的话手机使用usb连接电脑会自动识别为com设备,这时我们使用xshell,mobaxterm等工具查看串口日志

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

比如一般不断重启是因为render_service的崩溃,渲染服务是关键服务,OH设置了崩溃会自动重启

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

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

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区
2.2 使用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 <connector_id>[,<connector_id>][@<crtc_id>]:[#<mode index>]<mode>[-<vrefresh>][@<format>] set a mode

我的命令简化为:

modetest -M msm -s 32:1080x1920

运行命令后,手机屏幕显示出颜色条纹,即为DRM驱动工作正常

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区
2.3 OH渲染框架调试

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

OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区
OpenHarmony富设备移植指南(5)打包刷机与简单设备调试-开源基础软件社区

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

hilog -D 0xD001400 & service_control start render_service

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


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK