核心啟動全攻略——小白學ARM(九)
- 網絡環境搭建
- 下載下傳核心
- 啟動核心
- 記憶體與NAND
網絡環境搭建
上一篇部落格這塊寫的有些亂,這裡重寫:
要啟動核心,得先下載下傳核心,核心下載下傳離不開uboot,用uboot自帶的tftp網絡下載下傳功能,可以将核心下載下傳到闆上。
怎麼搭建tftp環境呢,
- 用普通網線将mini2440連接配接到路由器的LAN口,即圖上黃色接口。
- 確定你連上的路由器是可以上網的(其實不能上網也沒事)
- 筆記本電腦連上該路由器的wifi,這樣你的闆子和電腦就在同一個網段了。(桌上型電腦連上該路由器拉出的網線)
- 確定闆子和電腦可以互相ping通:進入uboot指令行模式(不知道怎麼進入該模式參考上篇部落格),輸入
可以檢視闆子的IP位址,如圖,ipaddr就是闆子的ip位址,一般預設的ip不正确,需要修改 運作cmd,輸入指令print
ipconfig
,檢視電腦的ip位址,如圖所示,電腦ip位址為192.168.1.100,那麼我們就将闆子的位址改為192.168.1.120,保證前三段一緻,這個“120”是我随便設的,隻要不是100就行。
修改方法為:在uboot指令行下輸入:
修改好闆子IP,再修改伺服器ip,修改為電腦的ip
完了之後再儲存一下
saveenv
這樣修改的内容就儲存到nand裡了,掉電不丢失,否則隻是修改了記憶體中的環境變量,再上電會發現修改的内容又變回去了。
至此,tftp環境基本搭建完成,可以在uboot指令行中輸入,ping電腦的ip
可以看到最後一句:host 192.168.1.100 is alive
說明闆子和電腦可以通過網絡通信了。
下載下傳核心
這步比較簡單,電腦先安裝一個小軟體:Tftpd64
打開大概是這樣的
上面的路徑裡,存放着你要用TFTP傳輸的檔案,這裡我們吧uImage.bin檔案放進去,
這個uImage.bin檔案就是傳說中的核心。
確定這個軟體打開,IP位址欄選擇本機的ip
進入uboot指令行,確定闆子ip和伺服器IP都修改正确後
輸入:
tftp 0x31000000 uImage
稍等片刻,可以看到uImage正在傳輸,待傳輸完成,核心就下載下傳到闆子裡了。
啟動核心
緊接着,在uboot指令行中輸入:(注意,位址與上面下載下傳位址“0x31000000”要一緻)
可以看到核心自行啟動。
至此核心啟動完成。
如果啟動過程卡在“starting kernel…”
很可能是你下載下傳的核心與闆子不比對,或者核心規定的下載下傳位址并不是“0x31000000”。
記憶體與NAND
為甚講這個呢,因為tftp下載下傳到闆子的資料,并不是直接存儲在nand裡,更不是nor flash裡,而是存在記憶體裡,是會斷電丢失的,這也就能解釋為什麼下載下傳時需要指定一個“0x31000000”這樣的記憶體位址。
mini2440的nand flash 分區如下圖所示,代碼部分說明各分區起始位址和分區大小。
目前我們的uboot,即圖上bootloader,是存放在nor flash中,友善我們下載下傳其他檔案。
核心檔案我們下載下傳到記憶體中,都沒有放到flash對應位置,等學會了核心剪裁,uboot編譯,驅動編寫後,最後成品,也即交給使用者的産品是要按下圖所示分區存放的,這裡隻是擴充一下,以防要素過多,搞不清各資料到底存放在哪裡。
static struct mtd_partition friendly_arm_default_nand_part[] = {
[0] = {
.name = "supervivi",
.size = 0x00040000,
.offset = 0,
},
[1] = {
.name = "param",
.offset = 0x00040000,
.size = 0x00020000,
},
[2] = {
.name = "Kernel",
.offset = 0x00060000,
.size = 0x00500000,
},
[3] = {
.name = "root",
.offset = 0x00560000,
.size = 1024 * 1024 * 1024, //
},
[4] = {
.name = "nand",
.offset = 0x00000000,
.size = 1024 * 1024 * 1024, //
}
};