Uboot在S3C2440上的移植詳解(二)
主 機:VMWare--Fedora 9
本文引用地址:http://m.butianyuan.cn/article/201611/318065.htm開發(fā)板:Mini2440--64MB Nand,Kernel:2.6.30.4
編譯器:arm-linux-gcc-4.3.2.tgz
u-boot:u-boot-2009.08.tar.bz2
二、移植步驟
4)準(zhǔn)備進(jìn)入u-boot的第二階段(在u-boot中添加對我們開發(fā)板上Nor Flash的支持)。
通常,在嵌入式bootloader中,有兩種方式來引導(dǎo)啟動內(nèi)核:從Nor Flash啟動和從Nand Flash啟動。u-boot中默認(rèn)是從Nor Flash啟動,再從上一節(jié)這個運行結(jié)果圖中看,還發(fā)現(xiàn)幾個問題:第一,我開發(fā)板的Nor Flash是2M的,而這里顯示的是512kB;第二,出現(xiàn)Warning - bad CRC, using default environment的警告信息。不是u-boot默認(rèn)是從Nor Flash啟動的嗎?為什么會有這些錯誤信息呢?這是因為我們還沒有添加對我們自己的Nor Flash的支持,u-boot默認(rèn)的是其他型號的Nor Flash,而我們的Nor Flash的型號是SST39VF1601。另外怎樣將命令行提示符前面的SMDK2410變成我自己定義的呢?
下面我們一一來解決這些問題,讓u-boot完全對我們Nor Flash的支持。首先我們修改頭文件代碼如下:
#gedit include/configs/my2440.h //修改命令行前的名字和Nor Flash參數(shù)部分的定義 |
#define CONFIG_SYS_PROMPT "[MY2440]#" //將命令行前的名字改成[MY2440] /*----------------------------------------------------------------------- #defineCONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */ #ifdef CONFIG_AMD_LV800 |
然后添加對我們mini2440開發(fā)板上2M的Nor Flash(型號為SST39VF1601)的支持。在u-boot中對Nor Flash的操作分別有初始化、擦除和寫入,所以我們主要修改與硬件密切相關(guān)的三個函數(shù)flash_init、flash_erase、write_hword,修改代碼如下:
#gedit board/samsung/my2440/flash.c |
//修改定義部分如下: //#define MAIN_SECT_SIZE 0x10000 //#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x00000555 << 1))) //修改flash_init函數(shù)如下: // /* 2nd and 3rd are both 8 KB */ // /* 4th 32 KB */ flash_info[i].start[j]= flashbase + j * MAIN_SECT_SIZE; //修改flash_print_info函數(shù)如下: case(AMD_MANUFACT & FLASH_VENDMASK): case(AMD_ID_LV800B & FLASH_TYPEMASK): //修改flash_erase函數(shù)如下: ///* wait until flash is ready */ // if (!chip // if (!chip //MEM_FLASH_ADDR1 = CMD_READ_ARRAY; //if (chip == ERR) { //if (chip == TMO) { if(*addr & 0x80) //修改write_hword函數(shù)如下: ///* wait until flash is ready */ // if (!chip && ((result & 0x80) == (data & 0x80))) // if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) { // if ((result & 0x80) == (data & 0x80)) //*addr = CMD_READ_ARRAY; //if (chip == ERR || *addr != data) if((*addr & 0x80)==(data & 0x80)) |
修改完后重新編譯u-boot,下載到RAM中運行結(jié)果如下圖:
從運行結(jié)果圖看,Nor Flash的大小可以正確檢測到了,命令行前面的名字也由原來的SMDK2410改成我自己定義的[MY2440]了,但是還會出現(xiàn)bad CRC的警告信息,其實這并不是什么問題,只是還沒有將環(huán)境變量設(shè)置到Nor Flash中,我們執(zhí)行一下u-boot的:saveenv命令就可以了。如下圖:
再重新下載u-boot.bin文件到RAM中運行,可以觀察到不會出現(xiàn)警告信息了,這時候u-boot已經(jīng)對我們開發(fā)板上的Nor Flash完全支持了。如下:
評論