Hi3516開發(fā)板燒錄總結(jié)
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
上周在研究Hi3861平臺(tái)的軟總線組件,周末的時(shí)候,購買的Hi3516開發(fā)板到貨,就著手研究了一下Hi3516開發(fā)板。
在Linux下的DevEco新建Hi3516工程并通過HPM下載代碼,一鍵build,out目錄有三個(gè)重要文件:
OHOS_Image.bin(size 5M)、rootfs.img(size 14M)、userfs.img(size 50M),加上 //vendor/hisi/hi35xx/hi3516dv300/uboot/out/boot/u-boot-hi3516dv300.bin(size 231K)共計(jì)4個(gè)文件,可以燒錄到開發(fā)板上。
在動(dòng)手燒錄之前,一定要先仔細(xì)研究一下官網(wǎng)的“Hi3516系列開發(fā)板燒錄”說明。
去潤和官網(wǎng)下載windows下的串口驅(qū)動(dòng)(“USB-to-Serial Comm Port”+”PL2303_Prolific_DriverInstaller_v1_12_0”)并安裝起來。
這里還有一個(gè)Hi3516-HiTool工具可以用來在windows下燒錄,不需要的話可不下載。
這里往后翻一下,還有一個(gè)HiUSBBurnDriver驅(qū)動(dòng)可以下載,通過USB口來燒錄需要安裝這個(gè)驅(qū)動(dòng)。
1. USB轉(zhuǎn)串口線連接開發(fā)板與虛擬機(jī)里的DevEco
開發(fā)板配送的USB轉(zhuǎn)串口線,默認(rèn)是直接接到windows主機(jī)上的,要切換連接到Linux虛擬機(jī)里去,如下圖,選擇“連接(與主機(jī)斷開連接)”。
在Linux的DevEco,Hi3516工程的配置中的“upload_port”選中對(duì)應(yīng)的設(shè)備即可將開發(fā)平臺(tái)與DevEco連接在一起了。
2. 不推薦串口燒錄
上面的upload_protocol 選擇“hiburn-serial”模式就可以啟動(dòng)串口燒錄了,這種模式下,開發(fā)板只要連接電源線和USB轉(zhuǎn)串口線(接入Linux虛擬機(jī)DevEco),按官網(wǎng)提供的步驟操作燒錄就可以了。
但是非常不推薦串口燒錄,速度太慢了,燒錄一次半個(gè)小時(shí)以上,迫不得已的燒錄辦法。
3. USB燒錄還沒成功
官網(wǎng)上說只需要連接USB線(包含了供電)和串口線即可,按照官方文檔操作,中間需要給平臺(tái)“重啟開發(fā)板(下電再上電)”,這總不能拔掉USB線再插上吧,開發(fā)板串口線座子邊上倒是有一個(gè)SW3按鍵(原理圖上是UPDATE_MODE),但目前實(shí)際按下去是沒有反應(yīng)的,估計(jì)是還需要先做一些配置。
所以目前還沒有成功通過USB進(jìn)行燒錄,先放下,待后面再研究一下。
4. 網(wǎng)口燒錄
虛擬機(jī)的網(wǎng)絡(luò)設(shè)置成橋接模式,可以讓虛擬機(jī)、windows主機(jī)、Hi3516開發(fā)板三者并列位于當(dāng)前局域網(wǎng)環(huán)境中,開發(fā)板需要通過網(wǎng)線接入當(dāng)前局域網(wǎng),這樣操作起來會(huì)比較簡單。【NAT模式我還沒試過,不知道行不行】
如上上圖,upload_protocol 選擇“hiburn-net”模式,這時(shí)DevEco會(huì)自動(dòng)生成:
分別是虛擬機(jī)的IP地址、掩碼、網(wǎng)關(guān)和將要為Hi3516開發(fā)板分配的IP(這個(gè)可以自己改成別的地址,不與局域網(wǎng)內(nèi)的設(shè)備產(chǎn)生沖突就可以了)。
至此,Hi3516開發(fā)板連接有電源線、網(wǎng)線接入局域網(wǎng)、USB轉(zhuǎn)串口線連入Linux虛擬機(jī)。
先看下一節(jié)“不要燒錄fastboot”,去掉燒錄fastboot的燒錄后,按官方操作說明進(jìn)行操作即可,要是燒錄不成功,可能需要先看看網(wǎng)絡(luò)配置是否正常。
網(wǎng)口燒錄一般在兩三分鐘內(nèi)就可以燒錄完成,缺點(diǎn)是需要網(wǎng)絡(luò)。
5. 不要燒錄fastboot
平常開發(fā)沒有修改到fastboot的話,就沒必要去燒錄fastboot了。
要是用Windows下的Hi3516-HiTool工具來燒錄,不要勾選fastboot就可以了。
要是通過Linux下的DevEco來燒錄,就要手動(dòng)刪掉這個(gè)fastboot。
DevEco創(chuàng)建并通過HPM下載安裝Hi3516工程時(shí),默認(rèn)是勾選燒錄fastboot的,這是一個(gè)坑。
可以在Hi3516工程的配置里的“hi3516dv300”標(biāo)簽下的“upload_partitions”項(xiàng)目里,把“partition:hi3516dv300_fastboot”刪除掉,這樣左手邊的“PROJECT TASKS”下就沒有“hi3516dv300_fastboot”的燒錄選項(xiàng)了,一鍵燒錄時(shí)就避免燒錄fastboot了。需要燒錄的時(shí)候,再加上去就可以了。
要是不刪除“partition:hi3516dv300_fastboot”,那燒錄時(shí),就不要點(diǎn)擊“Upload”進(jìn)行一鍵燒錄,可以通過下面的kernel/rootfs/userfs標(biāo)簽單獨(dú)燒錄某個(gè)partition就可以了。
6. 燒錄fastboot之后
要是修改了uboot代碼,必須要燒錄fastboot,或者誤燒錄了fastboot,之后的開機(jī)會(huì)停留在:
- Hit any key to stopautoboot: 0
- ## Error:"distro_bootcmd" not defined
- hisilicon #
這一步,需要重新設(shè)置bootcmd和bootargs。
可以參考官方說明進(jìn)行操作,需要特別注意的是:
- setenv bootcmd "mmc read 0x0 0x80000000 0x800 0x4800; go 0x80000000";
我們之前已經(jīng)將OHOS_Image.bin燒寫到FLASH(emmc)中去了(燒寫地址是和大小就是下圖中的Address和Length)。
這條 bootcmd 是 uboot 引導(dǎo)啟動(dòng)鴻蒙內(nèi)核的指令,意思就是:從FLASH(emmc)地址為 0x800(單位為512B,即1MByte)的地方開始,讀取大小為 0x4800(單位為512B,即9MByte)的內(nèi)容(包含了整個(gè)OHOS_Image.bin和部分空余空間)到地址為0x80000000的內(nèi)存(DDR)里去,并從內(nèi)存的0x80000000地址開始執(zhí)行指令,由此進(jìn)入?yún)R編代碼引導(dǎo)LiteOS-A內(nèi)核啟動(dòng)階段(見《鴻蒙系統(tǒng)的啟動(dòng)流程》第二階段)。
這里的 0x4800 的大小(9MB)與 DevEco 中所填寫的 OHOS_Image.bin 文件大小(注意不是實(shí)際大小,而是下面的Length )必須相同。如下:
如本文開頭所述,編譯出來的OHOS_Image.bin(size 5M),這里給的9M空間足夠了,不要隨便修改。
未來如果修改內(nèi)核編譯出來的OHOS_Image.bin超過9M大小,那就需要修改這里的Length參數(shù)里,具體可在“New Option”中選擇“partition_length”再進(jìn)行設(shè)置,改了這個(gè)之后,后面的rootfs/userfs的起始地址也必須要跟著往后挪相應(yīng)的值。
- setenv bootargs "console=ttyAMA0,115200n8 root=emmc fstype=vfat rootaddr=10M rootsize=15M rw";
表示設(shè)置啟動(dòng)參數(shù),輸出模式為串口輸出,波特率為115200,數(shù)據(jù)位8,rootfs掛載于emmc器件,文件系統(tǒng)類型為vfat,“rootaddr=10M rootsize=15M rw”處對(duì)應(yīng)填入rootfs.img的燒寫起始位置與長度,此處與DevEco中填寫的 rootfs.img 文件大小必須相同。
前面 fastboot 占了1M空間,kernel占了9M空間(雖然OHOS_Image.bin實(shí)際只用了5M),所以rootfs的起始地址就從10M處開始,size 的話,按DevEco的配置(0x1400000),這里的rootsize=15M 是要改成rootsize=20M的,如下圖:
本文開頭rootfs.img(size 14M),實(shí)際只占用了這20M中的前面14M,暫沒有必要修改這個(gè)參數(shù)。
以后修改系統(tǒng)代碼,增加了一些庫文件等等,rootfs超過了20M,也需要修改Length參數(shù),同時(shí)會(huì)影響到后面的userfs的起始地址。
目前userfs默認(rèn)50M,其余也都先按默認(rèn)值來處理就可以了。
確認(rèn)無誤后,執(zhí)行:
- saveenv
- reset
進(jìn)行保存設(shè)置和重啟,應(yīng)該就可以正常啟動(dòng)了。
要是仍然沒法正常啟動(dòng),那就需要看log分析是到哪一步出現(xiàn)了異常。
7. uboot命令行 hisilicon#
uboot啟動(dòng)到
- Hit any key to stopautoboot: 2
在這一步時(shí),按任意鍵可以中斷Uboot對(duì)鴻蒙系統(tǒng)內(nèi)核的引導(dǎo),進(jìn)入uboot命令行模式【uboot引導(dǎo)鴻蒙系統(tǒng)內(nèi)核出現(xiàn)異常如上一節(jié),也會(huì)導(dǎo)致進(jìn)入uboot的命令行模式】。
在hisilicon# 下,敲入“?”或者“help”,可以查看支持的指令。
8. Windows Hi3516-HiTool燒錄
上面說到的都是在Linux虛擬機(jī)的DevEco上燒錄的,這里我們也可以在windows下用Hi3516-HiTool來進(jìn)行燒錄。
需要先做一些準(zhǔn)備工作:Linux下按照上一節(jié)的操作進(jìn)入uboot的命令行,寫入指令:
- setenv serverip 192.168.1.114
- setenv ipaddr 192.168.1.55
- saveenv
windows主機(jī)作為server端,它的ip地址是 192.168.1.114,Hi3516開發(fā)板地址為 192.168.1.55。
然后拷貝linux編譯出來的OHOS_Image.bin、rootfs.img、userfs.img、u-boot-hi3516dv300.bin到windows目錄下。
再按第一節(jié)中描述的,斷開USB轉(zhuǎn)串口與linux的連接,回到windows主機(jī)的 com6 口。
Windows下打開Hi3516-HiTool,確認(rèn)下面的配置與實(shí)際相符,特別是四個(gè)文件的起始地址和大小,一定要與上面setenv bootcmd、setenv bootargs 的參數(shù)匹配,否則燒錄后重啟,會(huì)啟動(dòng)失敗的。確認(rèn)無誤后,點(diǎn)擊燒寫,開發(fā)板斷電再重新上電即可開始燒寫。
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)