這種方法比較簡單,就是利用uboot自帶命令usbboot來實現啟動,也算是最粗糙的一種。
1.在配置檔案中新增一系列有關usb的支援。
uboot編譯啟動後輸入
usb start
usbboot 0x30800000 0:1
這裡的0是usb裝置0,1是第一分區
當然,這裡肯定會失敗,因為usb storage中還沒有必須的核心檔案呢。
2.usbboot是從指定分割槽的起始位置拷貝核心檔案到指定的位址。
因為沒有找到合適的拷貝工具,於是使用uboot自帶的usb命令進行複製。
先把核心拷貝到記憶體,再從記憶體拷貝到usb storage。
tftp 0x30800000 uimage_n35
usb write 0x30800000 0x1f80 0x1000
這裡要注意的一點是起始block和blknum都應該是16進製制,如果覺得麻煩,可以把do_usbboot中獲取引數的******_stroul改為10進製。
核心檔案準備完畢後,最終的啟動命令為:
usb start; usbboot 0x30800000 0:1; bootm 0x30800000 //因為usbboot會自動識別分割槽起始位置的核心頭,核心頭中指明了核心大小。
u boot中重定位
在學習 u boot的時候,對程式重定位不理解,不知道為什麼要進行重定位,在網上查詢資料學習了一下。首先,要了解一下乙個程式的生成的四個步驟 預處理 編譯 彙編 鏈結。經過這四步,最終才生成可執行檔案bin檔案。預處理主要是巨集定義的展開,編譯主要是進行語法此分析,如我們常見的語法錯誤,某些函式未定...
u boot中新增命令
看下ping命令實現的例子 檔案common cmd net.c static int do ping cmd tbl t cmdtp,int flag,int argc,char const argv printf host s is alive n argv 1 return 0 u boot ...
Uboot中 TEXT BASE的理解
都知道u boot分為兩個階段,第一 t階段是 cpu arm920t start.s中 在flash上執行 一般情況下 完成對硬體的初始化,包括看門狗,中斷快取等,並且負責把 搬移到sdram中 在搬移的時候檢查自身 是否在sdram中 然後完成c程式執行所需要環境的建立,包括堆疊的初始化等,最後...