OpenHarmony富設備移植指南(五)打包刷機與簡單設備調(diào)試
一、打包boot.img鏡像
boot.img打包流程:
1.內(nèi)核+設備樹打包出帶設備樹的內(nèi)核
2.設備樹內(nèi)核+bootimg.cfg+ramdisk.img打包成boot.img
1、修改內(nèi)核啟動參數(shù)
(1)修改boot.img大小
原解壓出的大小是8m多,我們的內(nèi)核因為把模塊編譯進內(nèi)核的緣故,容量會增大,導致使用原有配置文件會無法成功打包,所以我們增大到16m,小米6的boot分區(qū)有64m不會影響boot.img的刷入。
(2)修改并添加內(nèi)核啟動參數(shù)
其中hardware和default_boot_device為OH初始化時用于識別設備的參數(shù),實測不配置也不影響啟動。
hardware=sagit default_boot_device=1da4000.ufshc
ohos.required_mount.system和ohos.required_mount.vendor是OH啟動必須掛載的兩個分區(qū),必須進行配置。
?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 是為啟動日志輸出到屏幕,后續(xù)可以進行觀察OH的渲染框架是否接管屏幕 console=ttyGS0,115200 為開啟串口控制臺,后續(xù)方便進行輸入命令,進行debug調(diào)試等。
其他可按需配置,啟動參數(shù)參考標準Linux。
2、打包帶設備樹的內(nèi)核
命令如下,直接用cat命令,把內(nèi)核和設備樹二進制文件直接輸出成Image.gz-dtb。
3、打包boot.img
命令如下,使用abootimg工具,--create指定進行boot.img創(chuàng)建的位置,-f指定bootimg.cfg位置,-k指定帶設備樹內(nèi)核的位置,-r指定ramdisk.img的位置。
OH的編譯框架已經(jīng)幫我們打包好了system.img和vendor.img,在out/packages/phone/images中,復制boot.img,system.img和vendor.img到電腦中,準備進行刷機工作。
二、刷入鏡像
1、TWRP刷入鏡像
按音量鍵上+電源開機進入TWRP,這時TWRP會進入MTP模式,把刷機鏡像復制進手機。
選擇安裝:
選擇刷入鏡像,這時才會顯示我們的刷機文件。
選擇boot.img,選擇boot分區(qū)。
滑動確認刷入。
按兩次返回,選擇system.img,選擇system分區(qū)。
同樣按兩次返回,選擇vendor.img,選擇vendor分區(qū)。
回到主頁,選擇清除,選擇格式化Data分區(qū)。
輸入yes,格式化完成后重啟。
2、fastboot刷入鏡像
按音量鍵下+開機鍵進入fastboot模式,連接電腦,裝好驅(qū)動,使用以下命令進行刷機,fastboot需要額外userdata.img,默認OHbeta5生成的userdata是f2fs格式的,需要修改build/ohos/images/mkimage/userdata_image_conf.txt,把--fs_type=f2fs中的f2fs修改成ext4,然后重新編譯。
三、簡單調(diào)試經(jīng)驗分享2,刷入鏡像
1、設備不斷重啟
上篇文章中我們配置了usb串口,如果內(nèi)核驅(qū)動正常的話手機使用usb連接電腦會自動識別為com設備,這時我們使用xshell,mobaxterm等工具查看串口日志。
比如一般不斷重啟是因為render_service的崩潰,渲染服務是關鍵服務,OH設置了崩潰會自動重啟。
為了調(diào)試我們先更改一下設置,讓它不自動重啟,找到渲染服務的配置,把critical第一個參數(shù)從1改成0,這樣就不會自動重啟了。
2、使用modetest測試DRM驅(qū)動
要使OH能順利點亮,我們首先要確認內(nèi)核DRM驅(qū)動是否正常工作,這里我使用的是modetest進行測試,modetest的代碼已經(jīng)存在libdrm的倉庫中,但是沒有加入OH的編譯框架,有需要的同學可以參考我移植樹莓的board倉,里面的test文件夾中有寫好的配置。
編譯好modetest之后直接運行是沒有效果的,因為OH的渲染服務占用了顯卡,我們先把渲染服務關閉:
關閉渲染服務之后,我們運行modetest,modetest會遍歷設備所有的顯卡,并打印出信息。
查看log:
我們可以找到,我們的驅(qū)動模塊名為msm,Connector id為32,mode名為1080x1920。
查看modetest支持的命令,配置這兩個參數(shù)。
-M module use the given driver
-s <connector_id>[,<connector_id>][@<crtc_id>]:[#<mode index>]<mode>[-<vrefresh>][@<format>] set a mode
我的命令簡化為:
運行命令后,手機屏幕顯示出顏色條紋,即為DRM驅(qū)動工作正常。
3、OH渲染框架調(diào)試
配置hilog打印等級,啟動屏幕調(diào)試hilog打印。
使用命令啟動渲染服務,并過濾只顯示display相關的內(nèi)容。
打通串口并能顯示log信息之后就是各種調(diào)試代碼了,這部分操作就跟開發(fā)板差不多了,接下去就是對照log跟代碼不斷拉扯了,教程只能到這里了,祝各位調(diào)試順利。