上一篇我們?yōu)榇蠹医饣罅?a target="_blank">OpenHarmony 移植為什么這么難?這篇我們將分享打包刷機(jī)與簡(jiǎn)單設(shè)備調(diào)試。
打包 boot.img 鏡像
boot.img 打包流程如下:
內(nèi)核+設(shè)備樹(shù)打包出帶設(shè)備樹(shù)的內(nèi)核
設(shè)備樹(shù)內(nèi)核+bootimg.cfg+ramdisk.img 打包成 boot.img
①修改內(nèi)核啟動(dòng)參數(shù)
修改 boot.img 大?。涸鈮撼龅拇笮∈?8m 多,我們的內(nèi)核因?yàn)榘涯K編譯進(jìn)內(nèi)核的緣故,容量會(huì)增大,導(dǎo)致使用原有配置文件會(huì)無(wú)法成功打包,所以我們?cè)龃蟮?16m,小米 6 的 boot 分區(qū)有 64m 不會(huì)影響 boot.img 的刷入。
bootsize=0x1000000
修改并添加內(nèi)核啟動(dòng)參數(shù):
cmdline=clk_ignore_unusedconsole=tty1console=ttyGS0,115200no_console_suspendhardware=sagitdefault_boot_device=1da4000.ufshcohos.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,required
其中 hardware 和 default_boot_device 為 OH 初始化時(shí)用于識(shí)別設(shè)備的參數(shù),實(shí)測(cè)不配置也不影響啟動(dòng)。
hardware=sagitdefault_boot_device=1da4000.ufshc
ohos.required_mount.system 和 ohos.required_mount.vendor 是 OH 啟動(dòng)必須掛載的兩個(gè)分區(qū),必須進(jìn)行配置。
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 是為啟動(dòng)日志輸出到屏幕,后續(xù)可以進(jìn)行觀察 OH 的渲染框架是否接管屏幕 console=ttyGS0,115200 為開(kāi)啟串口控制臺(tái),后續(xù)方便進(jìn)行輸入命令,進(jìn)行 debug 調(diào)試等。 其他可按需配置,啟動(dòng)參數(shù)參考標(biāo)準(zhǔn) Linux。
②打包帶設(shè)備樹(shù)的內(nèi)核
命令如下,直接用 cat 命令,把內(nèi)核和設(shè)備樹(shù)二進(jìn)制文件直接輸出成 Image.gz-dtb。
cat${KERNEL_IMAGE_FILE}${DTB}>"${OUT_PKG_DIR}/Image.gz-dtb"
③打包 boot.img
命令如下,使用 abootimg 工具,--create 指定進(jìn)行 boot.img 創(chuàng)建的位置,-f 指定 bootimg.cfg 位置,-k 指定帶設(shè)備樹(shù)內(nèi)核的位置,-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 的編譯框架已經(jīng)幫我們打包好了 system.img 和 vendor.img,在 out/packages/phone/images 中,復(fù)制 boot.img,system.img 和 vendor.img 到電腦中,準(zhǔn)備進(jìn)行刷機(jī)工作。
注意:刷機(jī)會(huì)格式化手機(jī),請(qǐng)使用備用機(jī)進(jìn)行刷機(jī),刷機(jī)前有需要的話請(qǐng)把手機(jī)的數(shù)據(jù)復(fù)制到電腦,刷機(jī)有風(fēng)險(xiǎn),請(qǐng)自行判斷,變磚概不負(fù)責(zé)?。?!
刷入鏡像
①TWRP 刷入鏡像
按音量鍵上+電源開(kāi)機(jī)進(jìn)入 TWRP,這時(shí) TWRP 會(huì)進(jìn)入 MTP 模式,把刷機(jī)鏡像復(fù)制進(jìn)手機(jī)。
選擇安裝:
選擇刷入鏡像,這時(shí)才會(huì)顯示我們的刷機(jī)文件:
選擇 boot.img,選擇 boot 分區(qū):
滑動(dòng)確認(rèn)刷入:
按兩次返回,選擇 system.img,選擇 system 分區(qū):
同樣按兩次返回,選擇 vendor.img,選擇 vendor 分區(qū): 回到主頁(yè),選擇清除,選擇格式化 Data 分區(qū):
輸入 yes,格式化完成后重啟:
②fastboot 刷入鏡像
按音量鍵下+開(kāi)機(jī)鍵進(jìn)入 fastboot 模式,連接電腦,裝好驅(qū)動(dòng),使用以下命令進(jìn)行刷機(jī):
fastbootflashboot(boot.img的路徑) fastbootflashsystem(system.img的路徑) fastbootflashvendor(vendor.img的路徑) fastbooteraseuserdata fastbootreboot
簡(jiǎn)單調(diào)試經(jīng)驗(yàn)分享
①設(shè)備不斷重啟
上篇文章中我們配置了 usb 串口,如果內(nèi)核驅(qū)動(dòng)正常的話手機(jī)使用 usb 連接電腦會(huì)自動(dòng)識(shí)別為 com 設(shè)備,這時(shí)我們使用 xshell,mobaxterm 等工具查看串口日志。 比如一般不斷重啟是因?yàn)?render_service 的崩潰,渲染服務(wù)是關(guān)鍵服務(wù),OH 設(shè)置了崩潰會(huì)自動(dòng)重啟:
為了調(diào)試我們先更改一下設(shè)置,讓它不自動(dòng)重啟,找到渲染服務(wù)的配置,把 critical 第一個(gè)參數(shù)從 1 改成 0,這樣就不會(huì)自動(dòng)重啟了。
②使用 modetest 測(cè)試 DRM 驅(qū)動(dòng)
要使 OH 能順利點(diǎn)亮,我們首先要確認(rèn)內(nèi)核 DRM 驅(qū)動(dòng)是否正常工作,這里我使用的是 modetest 進(jìn)行測(cè)試。 modetest 的代碼已經(jīng)存在 libdrm 的倉(cāng)庫(kù)中,但是沒(méi)有加入 OH 的編譯框架,有需要的同學(xué)可以參考我移植樹(shù)莓的 board 倉(cāng),里面的 test 文件夾中有寫(xiě)好的配置。
編譯好 modetest 之后直接運(yùn)行是沒(méi)有效果的,因?yàn)?OH 的渲染服務(wù)占用了顯卡,我們先把渲染服務(wù)關(guān)閉:
service_controlstoprender_service
關(guān)閉渲染服務(wù)之后,我們運(yùn)行 modetest,modetest 會(huì)遍歷設(shè)備所有的顯卡,并打印出信息:
modetest
查看 log:
...... tryingtoopendevice'msm'...done Encoders: idcrtctypepossiblecrtcspossibleclones 3181DSI0x000000010x00000001 Connectors: idencoderstatusnamesize(mm)modesencoders 3231connectedDSI-164x114131 modes: indexnamerefresh(Hz)hdisphsshsehtotvdispvssvsevtot) #01080x192060.0010801200121612561920192419261930145444flags:;type:preferred,driver ......我們可以找到,我們的驅(qū)動(dòng)模塊名為 msm,Connector id 為 32,mode 名為 1080x1920。
查看 modetest 支持的命令,配置這兩個(gè)參數(shù):
-Mmoduleusethegivendriver -s[, ][@ ]:[# ] [- ][@ ]setamode
我的命令簡(jiǎn)化為:
modetest-Mmsm-s32:1080x1920運(yùn)行命令后,手機(jī)屏幕顯示出顏色條紋,即為 DRM 驅(qū)動(dòng)工作正常:
③OH 渲染框架調(diào)試
配置 hilog 打印等級(jí),啟動(dòng)屏幕調(diào)試 hilog 打?。?/p>
使用命令啟動(dòng)渲染服務(wù),并過(guò)濾只顯示 display 相關(guān)的內(nèi)容:
hilog-D0xD001400&service_controlstartrender_service打通串口并能顯示 log 信息之后就是各種調(diào)試代碼了,這部分操作就跟開(kāi)發(fā)板差不多了,接下去就是對(duì)照 log 跟代碼不斷拉扯了,教程只能到這里了,祝各位調(diào)試順利。
審核編輯:湯梓紅
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1360瀏覽量
40185 -
移植
+關(guān)注
關(guān)注
1文章
376瀏覽量
28096 -
調(diào)試
+關(guān)注
關(guān)注
7文章
571瀏覽量
33870 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2302瀏覽量
42687 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3635瀏覽量
16059
原文標(biāo)題:鴻蒙移植指南:打包刷機(jī)與設(shè)備調(diào)試
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論