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