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

Diemit
发布于 2023-2-12 15:56
浏览
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需要额外userdata.img,默认OHbeta5生成的userdata是f2fs格式的,需要修改build/ohos/images/mkimage/userdata_image_conf.txt,把--fs_type=f2fs中的f2fs修改成ext4,然后重新编译。

fastboot flash boot (boot.img的路径)
fastboot flash system (system.img的路径)
fastboot flash cust (vendor.img的路径)#网友【贺小帅解说】提醒在此修正
fastboot erase userdata
fastboot flash userdata (userdata.img的路径) #网友【贺小帅解说】提醒在此修正
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跟代码不断拉扯了,教程只能到这里了,祝各位调试顺利。


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2023-2-14 08:33:45修改
9
收藏 5
回复
举报
10条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

阶段性的成功,楼主辛苦了

回复
2023-2-13 09:59:50
longlong899
longlong899

收藏了。感谢楼主

回复
2023-2-13 10:16:41
Diemit
Diemit

最新刷机镜像,用于尝鲜,使用twrp刷入

xiaomi6_ohos3.2beta5尝鲜固件.zip 280.8M 319次下载
已于2023-2-14 08:26:19修改
回复
2023-2-13 13:40:22
Whyalone
Whyalone 回复了 Diemit
最新刷机镜像,用于尝鲜,使用twrp刷入

66666666666

回复
2023-2-13 18:11:04
贺小帅解说
贺小帅解说

成功刷入

小米6没有vendor分区需要刷入到cust中

fastboot flash cust vendor.img

fastboot erase userdata导致data分区未格式化,刷入低包的userdata

fastboot flash userdata userdata.img

2
回复
2023-2-13 21:27:12
Diemit
Diemit 回复了 贺小帅解说
成功刷入小米6没有vendor分区需要刷入到cust中fastboot flash cust vendor.imgfastboot erase userdata导致data分区未格式化,刷入低包的userdatafastboot flash userdata userdata.img

感谢补漏,fastboot命令形式的刷机我还没来得及验证,最近实在是太忙了

回复
2023-2-14 08:25:40
westinyang
westinyang

现在的适配程度,可以用开发工具进行真机调试吗?


回复
2023-2-17 16:20:56
Diemit
Diemit 回复了 westinyang
现在的适配程度,可以用开发工具进行真机调试吗?

树莓派4可以了,米6usb驱动有问题,不能启用hdc进行连接电脑进行开发

下面这个是树莓派4连接电脑开发的固件和视频

​firmware-资源下载​

回复
2023-2-17 16:31:49
克拉丽丝
克拉丽丝

能不能efi启动的?

回复
2023-3-11 17:11:15
Diemit
Diemit 回复了 克拉丽丝
能不能efi启动的?

网上有x86已经启动了的视频,x86肯定是efi启动的

回复
2023-3-12 18:15:22
回复
    相关推荐