了解更多开源请访问:开源基础软件社区https://ost.51cto.com1.packageboot.imgimageboot.img打包过程:1.Kernel+devicetree将内核与devicetree打包2.Devicetreekernel+bootimg.cfg+ramdisk.img打包成boot.img1,修改内核启动参数(1)修改boot.img的大小。原始解压大小超过8m。因为模块被编译进了内核,所以我们内核的容量会增加。导致原来的配置文件无法打包成功,所以我们将大小增加到16m,小米6的boot分区有64m,不影响boot.img的刷写。bootsize=0x1000000(2)修改并添加内核启动参数cmdline=clk_ignore_unusedconsole=tty1console=ttyGS0,115200no_console_suspendhardware=sagitdefault_boot_device=1da4000.ufshcohos.required_mount.system=/dev/block/shc0sh/1daf0/by-name/system@/usr@ext4@ro,barrier=1@wait,requiredohos.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=sagitdefault_boot_device=1da4000.ufshcohos.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,requiredohos.required_mount.vendor=/dev/block/platform/soc/1da4000.ufshc/by-name/cust@/vendor@ext4@ro,barrier=1@wait,requiredconsole=tty1是将启动日志输出到屏幕上,然后可以观察是否OH渲染框架takeoverthescreenconsole=ttyGS0,115200是打开串口控制台,方便后面输入命令和调试。其他可以根据需要配置,启动参数参考标准Linux。2、将内核和设备树打包的命令如下,直接使用cat命令直接输出内核和设备树的二进制文件为Image.gz-dtb。cat${KERNEL_IMAGE_FILE}${DTB}>"${OUT_PKG_DIR}/Image.gz-dtb"3.打包boot.img的命令如下,使用abootimg工具,--create指定boot.img的位置创建,-f指定bootimg.cfg的位置,-k指定kernelwithdevicetree的位置,-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复制到电脑中,准备刷机。注意:刷机会格式化手机,请使用备用机刷机,如有需要刷机前请将手机数据复制到电脑,刷机有风险,请自行判断,刷机概不负责!二、刷入镜像1、刷入TWRP镜像按音量键+开机进入TWRP。此时TWRP会进入MTP模式,将flash镜像复制到手机中。选择安装:选择刷入镜像,然后会显示我们刷入的文件。选择boot.img,选择启动分区。滑动以确认滑入。按Return两次,选择system.img,然后选择系统分区。同样按两次返回,选择vendor.img,选择vendor分区。回到首页,选择清除,选择格式化数据分区。输入yes,格式化完成后重启。2.将fastboot刷入镜像中。按音量键+电源键进入fastboot模式,连接电脑,安装驱动,使用以下命令刷机。Fastboot需要额外的userdata.img。OHbeta5默认生成的userdata是f2fs格式,build需要修改/ohos/images/mkimage/userdata_image_conf.txt,将--fs_type=f2fs中的f2fs改为ext4,然后重新编译。fastbootflashboot(boot.img路径)fastbootflashsystem(system.img路径)fastbootflashcust(vendor.img路径)#网络【何小帅解说】提醒正确fastbooteraseuserdatafastbootflashuserdata(userdata.img)img路径)#网络【何小帅解说】这里提醒纠正fastboot重启3.简单调试经验分享2.刷入镜像1.设备一直重启。上一篇我们配置了usb串口。如果内核驱动正常,手机使用usb连接电脑会自动识别为com设备。这时我们使用xshell、mobaxterm等工具查看串口日志。比如不断重启一般是因为render_service崩溃了。渲染服务是关键服务。OH设置为在崩溃时自动重启。为了调试,我们先修改设置让它不自动重启,找到渲染服务的配置,把critical的第一个参数从1改成0,这样就不会自动重启了。2.使用modetest测试DRM驱动。要让OH顺利点亮,首先要确认内核DRM驱动是否正常工作。这里我使用modetest进行测试。libdrm仓库中已经存在modetest的代码,只是OH没有添加。编译框架。需要的同学可以参考我移植Raspberry的板库。里面的test文件夹里面有写好的配置。编译好modetest后直接运行没有效果,因为OH的渲染服务占用显卡,我们先关闭渲染服务:service_controlstoprender_service关闭渲染服务后,我们运行modetest,modetest会遍历所有显卡的设备,并打印出信息。modetest查看日志:......尝试打开设备“msm”...doneEncoders:idcrtc类型可能的crtcs可能的克隆3181DSI0x000000010x00000001Connectors:id编码器状态名称大小(mm)模式编码器3231已连接DSI-164x114131模式:索引名称刷新(Hz)hdisphsshsehtotvdispvssvsevtot)#01080x192060.0010801200121612561920192419261930145444我们可以找到标志:verred;type:dri...,我们的驱动模块名为msm,Connectorid为32,modename为1080x1920。查看modetest支持的命令,配置这两个参数。-M模块使用给定的驱动程序-s
