<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于cortex-A8的Bootloader設計

基于cortex-A8的Bootloader設計

作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò ) 收藏

該函數實(shí)現對Nand Flash發(fā)送命令或者地址。

③ int (*dev_ready)(struct mtd_info *mtd);

該函數實(shí)現檢測Nand Flash設備狀態(tài)。

最后將成員ecc.mode設置為NAND_ECC_SOFT,即ECC軟件校驗。

配置文件中相應的宏定義如下所示:

#define CONFIG_NAND_S5PV210 /* 告訴Makefile編譯Nand模塊 */

#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* 指定設備數量 */

#define CONFIG_SYS_NAND_BASE 0xB0E00000 /* Nand Flash 控制器的基址 */

3.2 支持網(wǎng)卡

支持nfs或tftp網(wǎng)絡(luò )下載會(huì )極大的方便我們從Linux服務(wù)器上下載文件或鏡像到硬件平臺上。所以使能網(wǎng)卡在U-Boot移植過(guò)程中也顯得非常重要。以網(wǎng)卡dm9000為例,U-Boot已經(jīng)抽象出一套完整的關(guān)于dm9000的驅動(dòng)代碼(其源碼路徑為driversnetdm9000x.c)。用戶(hù)只需要根據具體的硬件電路配置相應的宏即可。U-Boot中 dm9000網(wǎng)卡初始化函數的調用關(guān)系為:

board_init_r()->eth_initialize()->board_eth_init()->dm9000_initialize()。

配置文件中相應的宏定義如下所示:

#define CONFIG_DRIVER_DM9000 /* DM9000網(wǎng)卡模塊加入編譯 */

#define CONFIG_DM9000_BASE (0x88001000) /* 基地址 */

#define DM9000_IO (CONFIG_DM9000_BASE) /* IO口地址 */

#define DM9000_DATA (CONFIG_DM9000_BASE + 0x300C) /* 數據口地址 */

3.3.支持環(huán)境變量的保存和修改

為了方便用戶(hù)配置,U-Boot將一部分變量,如串口波特率、ip地址、內核參數、啟動(dòng)命令等存在Flash或SD卡上,這部分數據稱(chēng)為環(huán)境變量。每次上電啟動(dòng)時(shí),U-Boot會(huì )檢查Flash或SD卡上是否存放有環(huán)境變量。如果有則將其讀取出來(lái)并使用,如果沒(méi)有就使用默認的環(huán)境變量。默認的環(huán)境變量定義在 env_default.h中。用戶(hù)也可以隨時(shí)修改或保存環(huán)境變量到Flash或SD卡中。

對于環(huán)境變量的移植也非常簡(jiǎn)單。以Nand Flash為例,開(kāi)發(fā)人員在smdkv210.h源文件中只需要添加如下的宏定義即可:

#define CONFIG_ENV_IS_IN_NAND /* 告訴Makefile環(huán)境變量保存在Nand Flash中 */

#define CONFIG_ENV_OFFSET 0x80000 /* 環(huán)境變量保存的Nand Flash中的偏移地址 */

#define CONFIG_ENV_SIZE 0x20000 /* 環(huán)境變量的大小 */

#define CONFIG_ENV_OVERWRITE /* 規定環(huán)境變量和覆蓋 */

4. 測試結果

4.1. 測試U-Boot啟動(dòng)

測試平臺的軟硬件環(huán)境:

◆ 硬件平臺為友善之臂的smart210開(kāi)發(fā)板;

◆ Linux服務(wù)器版本為ubuntu9.0;

◆ U-Boot版本為2013-01;

◆ GCC交叉編譯工具鏈版本為4.3.2。

首先將修改后的源碼包放到裝有交叉編譯工具鏈的Linux服務(wù)器上,輸入命令make即可以編譯生成兩個(gè)二進(jìn)制文件。一個(gè)是smdkv210- spl.bin,即BL1代碼,存放在spl目錄下。另一個(gè)是u-boot.bin,即BL2代碼,存放在頂層目錄下。然后插入SD卡,執行 write2sd.sh腳本就可以把BL1和BL2分別燒寫(xiě)到SD卡的第1扇區和第49扇區。write2sd.sh腳本實(shí)現如下:

#!/bin/sh

sudo dd iflag=dsync oflag=dsync if=spl/smdkv210-spl.bin of=/dev/sdc seek=1

sudo dd iflag=dsync oflag=dsync if=u-boot.bin of=/dev/sdc seek=49

燒寫(xiě)完成之后將SD卡插入到smart210開(kāi)發(fā)板的SD卡槽中,連接好串口和網(wǎng)線(xiàn),上電啟動(dòng)。之后可以通過(guò)串口工具(本次測試使用的是SecureCRT)看到輸出信息如圖四所示,表示該U-Boot已經(jīng)成功運行在開(kāi)發(fā)板上。

圖四  測試U-Boot啟動(dòng)

圖四 測試U-Boot啟動(dòng)

4.2 測試Nand Flash和網(wǎng)卡。

在等待命令狀態(tài)下輸入“nfs 20000000 192.168.1.123:/work/nfs_root/uImage”,該命令表示從ip為192.168.1.123的Linux服務(wù)器上,通過(guò) nfs下載該服務(wù)器上“/work/nfs_root”目錄下的uImage,并存放在內存地址為0x20000000處。uImage為適配于 開(kāi)發(fā)板的Linux內核鏡像。等待一段時(shí)間后看到“Bytes transferred = 2127008 (2074a0 hex)”字樣,表示下載成功。

下載成功之后輸入命令“nand erase.part kernel”,該命令表示擦除Nand Flash上的kernel分區。接著(zhù)輸入命令“nand write 20000000 kernel”,該命令表示拷貝內存地址為0x20000000的內容,燒寫(xiě)到Nand Flash的kernel分區中。內存地址0x20000000存放的內容正是之前我們從Linux服務(wù)器上下載下來(lái)的uImage。kernel保存在環(huán)境變量mtdparts中,kernel規定了該分區的起始地址和大小。執行完這兩條命令后看到“4194304 bytes written: OK”字樣,表示系統內核已經(jīng)成功燒寫(xiě)到Nand Flash中,證明了Nand Flash和網(wǎng)卡均可以正常使用。其實(shí)驗結果如圖五所示:

圖五  測試Nand Flash和網(wǎng)卡

圖五 測試Nand Flash和網(wǎng)卡

4.3 測試引導內核啟動(dòng)

燒寫(xiě)完內核之后執行boot命令就可以啟動(dòng)該內核。boot命令實(shí)際上是執行環(huán)境變量bootcmd中的一條語(yǔ)句,其內容為“nand read 20000000 kernel; bootm 20000000”,該語(yǔ)句表示從Nand Flash的kernel分區中讀出內核并存放在內存地址為0x20000000處,然后跳轉在該地址執行內核鏡像。啟動(dòng)過(guò)程中可以看到串口打印出如圖六所示的信息,證明了該U-Boot已經(jīng)成功支持引導Linux操作系統。

圖六   測試引導內核啟動(dòng)

圖六 測試引導內核啟動(dòng)



關(guān)鍵詞: cortext-A8 Bootloader設計 s5pv210

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>