上一篇我們為大家解惑了OpenHarmony 移植為什么這么難?這篇我們將分享打包刷機與簡單設備調試。
打包 boot.img 鏡像
boot.img 打包流程如下:
內核+設備樹打包出帶設備樹的內核
設備樹內核+bootimg.cfg+ramdisk.img 打包成 boot.img
①修改內核啟動參數
修改 boot.img 大小:原解壓出的大小是 8m 多,我們的內核因為把模塊編譯進內核的緣故,容量會增大,導致使用原有配置文件會無法成功打包,所以我們增大到 16m,小米 6 的 boot 分區有 64m 不會影響 boot.img 的刷入。
bootsize=0x1000000
修改并添加內核啟動參數:
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 初始化時用于識別設備的參數,實測不配置也不影響啟動。
hardware=sagitdefault_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,requiredohos.required_mount.vendor=/dev/block/platform/soc/1da4000.ufshc/by-name/cust@/vendor@ext4@ro,barrier=1@wait,requiredconsole=tty1 是為啟動日志輸出到屏幕,后續可以進行觀察 OH 的渲染框架是否接管屏幕 console=ttyGS0,115200 為開啟串口控制臺,后續方便進行輸入命令,進行 debug 調試等。 其他可按需配置,啟動參數參考標準 Linux。
②打包帶設備樹的內核
命令如下,直接用 cat 命令,把內核和設備樹二進制文件直接輸出成 Image.gz-dtb。
cat${KERNEL_IMAGE_FILE}${DTB}>"${OUT_PKG_DIR}/Image.gz-dtb"
③打包 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 到電腦中,準備進行刷機工作。
注意:刷機會格式化手機,請使用備用機進行刷機,刷機前有需要的話請把手機的數據復制到電腦,刷機有風險,請自行判斷,變磚概不負責!!!
刷入鏡像
①TWRP 刷入鏡像
按音量鍵上+電源開機進入 TWRP,這時 TWRP 會進入 MTP 模式,把刷機鏡像復制進手機。
選擇安裝:
選擇刷入鏡像,這時才會顯示我們的刷機文件:
選擇 boot.img,選擇 boot 分區:
滑動確認刷入:
按兩次返回,選擇 system.img,選擇 system 分區:
同樣按兩次返回,選擇 vendor.img,選擇 vendor 分區: 回到主頁,選擇清除,選擇格式化 Data 分區:
輸入 yes,格式化完成后重啟:
②fastboot 刷入鏡像
按音量鍵下+開機鍵進入 fastboot 模式,連接電腦,裝好驅動,使用以下命令進行刷機:
fastbootflashboot(boot.img的路徑) fastbootflashsystem(system.img的路徑) fastbootflashvendor(vendor.img的路徑) fastbooteraseuserdata fastbootreboot
簡單調試經驗分享
①設備不斷重啟
上篇文章中我們配置了 usb 串口,如果內核驅動正常的話手機使用 usb 連接電腦會自動識別為 com 設備,這時我們使用 xshell,mobaxterm 等工具查看串口日志。 比如一般不斷重啟是因為 render_service 的崩潰,渲染服務是關鍵服務,OH 設置了崩潰會自動重啟:
為了調試我們先更改一下設置,讓它不自動重啟,找到渲染服務的配置,把 critical 第一個參數從 1 改成 0,這樣就不會自動重啟了。
②使用 modetest 測試 DRM 驅動
要使 OH 能順利點亮,我們首先要確認內核 DRM 驅動是否正常工作,這里我使用的是 modetest 進行測試。 modetest 的代碼已經存在 libdrm 的倉庫中,但是沒有加入 OH 的編譯框架,有需要的同學可以參考我移植樹莓的 board 倉,里面的 test 文件夾中有寫好的配置。
編譯好 modetest 之后直接運行是沒有效果的,因為 OH 的渲染服務占用了顯卡,我們先把渲染服務關閉:
service_controlstoprender_service
關閉渲染服務之后,我們運行 modetest,modetest 會遍歷設備所有的顯卡,并打印出信息:
modetest
查看 log:
...... tryingtoopendevice'msm'...done Encoders: idcrtctypepossiblecrtcspossibleclones 3181DSI0x000000010x00000001 Connectors: idencoderstatusnamesize(mm)modesencoders 3231connectedDSI-164x114131 modes: indexnamerefresh(Hz)hdisphsshsehtotvdispvssvsevtot) #01080x192060.0010801200121612561920192419261930145444flags:;type:preferred,driver ......我們可以找到,我們的驅動模塊名為 msm,Connector id 為 32,mode 名為 1080x1920。
查看 modetest 支持的命令,配置這兩個參數:
-Mmoduleusethegivendriver -s[, ][@ ]:[# ] [- ][@ ]setamode
我的命令簡化為:
modetest-Mmsm-s32:1080x1920運行命令后,手機屏幕顯示出顏色條紋,即為 DRM 驅動工作正常:
③OH 渲染框架調試
配置 hilog 打印等級,啟動屏幕調試 hilog 打印:
使用命令啟動渲染服務,并過濾只顯示 display 相關的內容:
hilog-D0xD001400&service_controlstartrender_service打通串口并能顯示 log 信息之后就是各種調試代碼了,這部分操作就跟開發板差不多了,接下去就是對照 log 跟代碼不斷拉扯了,教程只能到這里了,祝各位調試順利。
審核編輯:湯梓紅
-
內核
+關注
關注
3文章
1382瀏覽量
40421 -
移植
+關注
關注
1文章
383瀏覽量
28192 -
調試
+關注
關注
7文章
589瀏覽量
34061 -
鴻蒙
+關注
關注
57文章
2392瀏覽量
43048 -
OpenHarmony
+關注
關注
25文章
3744瀏覽量
16575
原文標題:鴻蒙移植指南:打包刷機與設備調試
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論