本帖最后由 z913457894 于 2021-7-24 15:14 編輯
我們這里說的fastboot/uboot模式,準(zhǔn)確的說只能叫uboot模式(在嵌入式領(lǐng)域都稱為bootloader模式,你可以理解為平常電腦的bios),而fastboot是運(yùn)行在uboot模式之上的一種協(xié)議,這種協(xié)議是可以通過USB或以太網(wǎng)與引導(dǎo)加載程序通信的機(jī)制,我們這里只針對這種模式來講,不談協(xié)議。 下面是我手上的兩個盒子進(jìn)入fastboot/uboot模式的終端輸出,也就是你們俗稱跑碼。 第一個 天邑TY1208-Z,可以看到上面顯示是Uboot
1.png (82.42 KB, 下載次數(shù): 117)
下載附件
保存到相冊
2021-7-24 14:55 上傳
第二個是廣電九聯(lián)科技HDC2100k,上面顯示為fastboot
2.png (65.02 KB, 下載次數(shù): 132)
下載附件
保存到相冊
2021-7-24 14:55 上傳
以上不管是fastboot還是uboot,源代碼都是由芯片廠商提供,和芯片廠商提供的刷機(jī)工具(比如海思的hitool)是配套的,后期盒子廠家會在fastboot/uboo代碼基礎(chǔ)上適配自己的其他基礎(chǔ)硬件,網(wǎng)卡,wifi等,但和上層的刷機(jī)工具通信的協(xié)議是不會改變的。 看完這個你就會明白為什么我一直在花力氣進(jìn)這個模式的原因,離開了這個模式刷機(jī)工具啥都干不了。 本來這里是準(zhǔn)備通過我的盒子HDC2100k修改fastboot環(huán)境變量,加入ctrl+c的bootdelaykey,hitool就可以正常備份刷寫固件的案列,來證明fastboot模式對刷機(jī)工具h(yuǎn)itool的重要性,加入證明讓帖子變得變得難以讓人看懂,之后會再寫一篇帖子帖子------hdc2100k如何支持hitool工具。 這種模式各個廠家的指令大同小異,都是類似的,因為他們的代碼都是仿照開源uboot代碼寫的,我這里以手上的HDC2100K介紹下fastboot/uboot下指令的用法,看懂了,其它的基本也就都會了。 我們現(xiàn)在就演示下fastboot下各個指令是如何使用。串口終端我推薦SecureCRT。
我們首先輸入指令help,回車來看看你有哪些指令可以用,我只是簡單的列舉了幾個常用指令。
3.png (128.06 KB, 下載次數(shù): 122)
下載附件
保存到相冊
2021-7-24 14:55 上傳
環(huán)境變量相關(guān) 我們輸入指令printenv回車查看一下環(huán)境變量,可以看到tftp的ip設(shè)置,設(shè)備的mac地址,啟動信息等
4.png (41.72 KB, 下載次數(shù): 115)
下載附件
保存到相冊
2021-7-24 14:55 上傳
我們還可以修改環(huán)境變量,以修改加載kenel等待時間為例,輸入setenv bootdely 1 回車,然后在輸入 saveenv回車 很好理解設(shè)置完,保存,如果不保存,就是重啟無效。 傳輸相關(guān) 傳輸就是上載和下載,電腦到機(jī)頂盒內(nèi)存,機(jī)頂盒內(nèi)存到電腦,這里都是以機(jī)頂盒內(nèi)存為中間橋梁,這里很重要,必須要理解,就拿我們現(xiàn)在要刷系統(tǒng)的某個分區(qū),我們必須分兩步走,一是系統(tǒng)分區(qū)文件從電腦傳輸?shù)綑C(jī)頂盒內(nèi)存,二是再從機(jī)頂盒內(nèi)存到emmc或者其它存儲芯片。 傳輸方式有很多,串口,網(wǎng)口,usb都可以。 串口傳輸 輸入指令loady 0x1FFBFC0 后面1FFBFC0是內(nèi)存地址,同樣你可以通過指令getinfo ddrfree獲取空閑地址。 如果用的是SecureCRT的話,直接選擇 傳輸->發(fā)送Ymodem,選擇你要發(fā)送的文件點(diǎn)擊確定就行了。 如果是上載到電腦的,輸入指令uploadx 0x1FFBFC0 , SecureCRT上直接選擇 傳輸->接收Xmodem,保存文件就可以了。這里Xmodem和Ymodem是兩個不同協(xié)議,根據(jù)具體指令選擇,loadx就是Xmodem,loady就是ymodem。
5.png (117.67 KB, 下載次數(shù): 115)
下載附件
保存到相冊
2021-7-24 14:55 上傳
網(wǎng)絡(luò)傳輸 速度比較快,適合大文件傳輸,但我們需要在電腦上有一個tftp的服務(wù)器工具。 首先我們設(shè)置環(huán)境變量IP地址信息,指令 setenv serverip 192.168.0.119 setenv ipaddr 192.168.0.139 setenv gatewayip 192.168.0.250 ping 192.168.0.119 都很好理解,設(shè)置服務(wù)器ip,自己的ip,網(wǎng)關(guān)地址,ping下服務(wù)器,根據(jù)自己情況設(shè)置。
電腦打開tftp的服務(wù)器工具,下載的文件改名file.bin,放到程序同級目錄,準(zhǔn)備好之后輸入指令 tftp 0x1FFBFC0 file.bin ,等待傳輸完成就行
上傳之需要在上面指令多加一個參數(shù),上傳字節(jié)數(shù),比如我們需要上傳0x400字節(jié) tftp 0x1FFBFC0 file.bin 0x400 ,等待傳輸完成后,程序目錄就會生成文件file.bin
usb傳輸 我不太想講,要看具體盒子支持些什么指令,天邑Ty1208-z支持USB_burning指令,可以直接文件放到U盤(格式化成fast32)里面,然后直接文件寫入emmc分區(qū),這個盒子沒這個指令,顯得有點(diǎn)復(fù)雜,我簡單把指令列出來,有興趣自己嘗試。 usb start 打開初始化usb usb storage 列舉出已經(jīng)插入的usb設(shè)備 fatls 展開usb設(shè)備中文件列表 fatload 將文件加載到內(nèi)存
內(nèi)存操作相關(guān) 下載完數(shù)據(jù),如何查看數(shù)據(jù)是不是正確的,顯示內(nèi)存數(shù)據(jù),輸入指令md.b 0x1FFBFC0 0x400 md.b 按單字節(jié)顯示; md.w按雙字節(jié)顯示;md.l 按四字節(jié)顯示 第二個參數(shù)和第三個參數(shù)分別是內(nèi)存地址和顯示字節(jié)數(shù),顯示字節(jié)數(shù)是以前面指令模式為單位的,md.l就會顯示4倍的顯示字節(jié)數(shù)。
修改內(nèi)存nm.b nm.w nm.l
查看空閑內(nèi)存地址getinfo ddrfree 這里面的地址范圍可以用在上面所有和內(nèi)存相關(guān)的地方
Emmc讀取寫入相關(guān) emmc寫入,輸入指令mmcwrite 0 0x1FFBFC0 0x1000 2 Write 后第一個參數(shù)0是指的設(shè)備0,有的設(shè)備mmcwrite沒有這個參數(shù); 第二個0x1FFBFC0上面已經(jīng)提過了內(nèi)存地址; 第三個0x1000是扇區(qū)號,就是寫入的扇區(qū)地址,一個扇區(qū)0x200(512)字節(jié),比如我們要寫入偏移地址0x200000,我只需要偏移地址除以扇區(qū)大小0x200就可以得到扇區(qū)地址0x1000; 第四個2就是寫入兩個扇區(qū)1024字節(jié)
emmc讀取,輸入指令mmcread 0 0x1FFBFC0 0x1000 2 參數(shù)跟前面mmc write一致。
總結(jié) 上面介紹的東西基本已經(jīng)覆蓋了百分之九十的常用指令,用這些最基本的指令,我們就可以完成固件讀取,寫入的操作,Hitool 刷機(jī)軟件的所有功能也都是建立在這些指令之上的,你要是會寫軟件,基本上也可以寫一個hitool 出來。作為一名程序開發(fā)者,從程序猿角度科普下,希望刷機(jī)的朋友們不只單單知道有包就可以刷,而真正去理解程序是怎么運(yùn)作的。
|