轉自:http://topeetboard.com 硬件:迅為iTop 4412精英版 & TF卡 軟件:系統自帶終端即可 首先,我們應該清楚TF/SD卡可以看作一張完全空白的“白紙”,之所以有分區、分區格式的區別不過(guò)是在在這張“白紙”的某些特定位置寫(xiě)入了一些數據來(lái)指示分區、分區格式。 其次,我們還應該清楚,在TF/SD啟動(dòng)模式下,exynos 4412一上電,內部iROM會(huì )從TF/SD的第1個(gè)Block(第512個(gè)字節開(kāi)始)讀取8KB的數據到內部iRAM,然后從內部iRAM的0地址開(kāi)始運行。 原理搞清楚了,那么首先需要把TF/SD低級格式化-所有Block全部寫(xiě)0x00。 1、連接TF/SD卡,打開(kāi)終端 使用ls /dev/sd* 命令查看所有連接到電腦上磁盤(pán)。 問(wèn)題:在這里為什么不用df命令? 原因是假設你的TF/SD卡只有一個(gè)分區但這個(gè)分區已損壞,或者有多個(gè)分區但是沒(méi)有一個(gè)可以識別的分區,那么此時(shí)df命令無(wú)法查看到tf/sd卡,所以說(shuō)直接列出dev下所有sd開(kāi)頭的設備,是終極方案。 (1)假設你的tf/sd卡只有一個(gè)分區,無(wú)論這個(gè)分區是否損壞,現象應該是類(lèi)似這樣的: 插上tf/sd卡之前: ![]() 插上tf/sd卡之后: ![]() 很明顯多出的/dev/sdb就是本文后續操作的對象。 (2)假設你的tf/sd卡已有多個(gè)分區,無(wú)論這些分區是否損壞,現象應該是類(lèi)似這樣的: 插上tf/sd卡之前: ![]() 插上tf/sd卡之后: ![]() 這里多出5個(gè)設備,但是我們仍然將/dev/sdb作為本文后續操作的對象。 注意:我這里是/dev/sdb,但是還有可能是/dev/sdc等等其它符號,必須根據你實(shí)際出現的設備名稱(chēng)進(jìn)行以下操作,否則有可能損壞系統分區,非常重要,切記。! 2、使用16進(jìn)制模式打開(kāi)TF卡查看數據(可跳過(guò)) 我們使用linux自帶命令hexdump查看tf/sd卡中的數據: 命令為: sudo hexdump -n 1048576 /dev/sdb 其中-n 1048576代表打印出前1M=1024*1024=1048576字節的數據。 執行結果(部分)如下: ![]() *代表內容為0x00,為了節省空間故作省略。 3、清空TF卡上前1MB的數據 由于4412的uboot大小基本在幾百kB的量級,所以清空前1MB空間足夠用,注意這里的清空不是格式化,而是填充0x00。 我們利用系統/dev下的zero設備,清零tf/sd卡前1MB。 執行結果如下: ![]() 這里的count=2000代表清空2000個(gè)block,一個(gè)block=512B,2000個(gè)正好為1MB。 再次hexdump查看tf/sd卡數據,發(fā)現: ![]() 前1MB空間成功清0x00。 4、燒寫(xiě)uboot啟動(dòng)文件 在這里,我們待燒寫(xiě)的文件為 u-boot-iTOP-4412.bin 這個(gè)文件。 終端執行命令: ![]() if代表輸入文件地址,以你u-boot-iTOP-4412.bin 這個(gè)文件的實(shí)際地址為準,of代表輸出地址,以你tf/sd卡的實(shí)際設備號為準。 到這里,就可以將tf/sd卡插入開(kāi)發(fā)板上電啟動(dòng)了,為了證明我們燒寫(xiě)無(wú)誤,我們執行后續操作。 5、確認燒寫(xiě)正確(可跳過(guò)) 我們需要確定從tf/sd卡的第一個(gè)block開(kāi)始處,確實(shí)正確燒寫(xiě)了u-boot-iTOP-4412.bin這個(gè)文件,下面我們對比一下,用到的命令同樣還是hexdump。 在這里,我們?yōu)榱孙@示方便,只打印前5KB數據,發(fā)現bin文件被正確的復制到了sd卡的512字節處: ![]() 6、將TF卡接到開(kāi)發(fā)板上,撥碼開(kāi)關(guān)選擇TF啟動(dòng),上電: ![]() Done。 |