Note: 我的S5PV210板子的磁碟是emmc版本,不是nandflash版本。
1. SD卡內燒錄uboot映象,然後作為啟動盤來啟動emmc中的核心映象和根檔案系統。
只要破壞emmc內的uboot映象,就可以使其從sd2啟動 (因為emmc內沒了完整的uboot,自然就無法啟動核心)
然後使用SD卡燒錄的工具軟體在SD卡內燒錄uboot映象,啟動盤就製作好了。
有了啟動盤,就可以把uboot程式跑起來,
而uboot的作用是支援多種方式升級核心,例如tftp升級、SD卡升級,等等。
2. Uboot內使用tftp 升級核心
先設定好三個環境變數
之後在uboot內去ping PC windows主機
登入uboot後,網線連線板子與PC機,PC主機windows上ipconfig,乙太網介面卡有可能會顯示:媒體已斷開連線。實際上不要緊的,板子仍然可以ping通PC機windows的。
我們需要windows的IP地址。
要獲取windows的IP地址,網線連線好,讓板子先進到linux系統,再在windows上ipconfig就可以看到IP地址了(乙太網介面卡 乙太網),然後重新進入uboot去ping。
只要ping後顯示host 是alive的資訊即表示ping成功。
3. 保證能ping通後,執行下載或燒錄(或叫升級也行)新的核心
實測該tftp升級核心命令是搬移到記憶體DDR去,而不是磁碟emmc去。測試方法是搬移到DDR的核心映象,在整機斷電後重啟就會失效。
之後執行bootm 30008000 或者 bootm 30008000 zImage
PS:bootm由boot和m構成,這裡m指的就是memory,即ddr記憶體,
所以當使用bootm時,若ddr中沒有核心映象,則會啟動失敗。
可見啟動新核心成功了。
然後遺憾的是現在還不能稱之為升級新核心成功,因為只要現在的板子一斷電,重新上電,uboot自動載入的核心依然是emmc內的舊核心。而我們已有的tftp只是把核心從PC主機上搬到了Linux板子上的DDR裡,並沒有覆蓋寫入到板載emmc的舊核心的位置。
我們可以通過uboot內的mmc或者movi指令來將DDR內的核心燒寫到emmc內去。
重新進入uboot,
在uboot內執行help movi, 可以瞭解下movi命令的用法
和之前一樣,先用tftp把zImage搬到DDR
現在,即使整機斷電重啟,啟動的核心也是新的核心了。
看到這裡可能會有疑問,為什麼在執行movi命令時,也不指定將DDR裡的kernel燒寫到emmc的哪個起始地址去呢?
因為uboot裡面有個分割槽表,uboot的分割槽表和核心的分割槽表是一樣的,已經記錄了磁碟emmc內的分割槽資訊了。所以我們在使用movi命令燒寫kernel時就不需要再指定emmc的地址了。
換句話說: uboot內部知道kernel分割槽在磁碟emmc中的具體地址,而我們命令中只需要告訴現在燒寫進去的是kernel這個分割槽即可。
4. 將emmc上的kernel映象載入到DDR,如下圖所示
5. 九鼎SD卡升級介紹
進入uboot
既然uboot已經啟動了,uboot程式已經在跑了,這時候就可以把出SD卡拔出來,
然後建立個x210資料夾,裡面放置uboot、核心、根檔案系統映象。
插上SD卡,執行上圖該命令,應該就可以一次性完成升級uboot、核心和根檔案系統映象了。
九鼎科技相關文件如下圖
.