一、移植环境
-
主 机:VMWare–Fedora 9
-
开发板:Mini2440–64MB Nand,Kernel:2.6.30.4
-
编译器:arm-linux-gcc-4.3.2.tgz
-
u-boot:u-boot-2009.08.tar.bz2
二、移植过程
4)预备进入u-boot的第二阶段(在u-boot中增加对咱们开发板上Nor Flash的支撑)。
一般,在嵌入式bootloader中,有两种方法来引导发动内核:从Nor Flash发动和从Nand Flash发动。u-boot中默许是从Nor Flash发动,再从上一节这个运转成果图中看,还发现几个问题:榜首,我开发板的Nor Flash是2M的,而这儿显现的是512kB;第二,呈现Warning – bad CRC, using default environment的正告信息。不是u-boot默许是从Nor Flash发动的吗?为什么会有这些错误信息呢?这是由于咱们还没有增加对咱们自己的Nor Flash的支撑,u-boot默许的是其他类型的Nor Flash,而咱们的Nor Flash的类型是SST39VF1601。别的怎样将指令行提示符前面的SMDK2410变成我自己界说的呢?
下面咱们一一来处理这些问题,让u-boot彻底对咱们Nor Flash的支撑。首要咱们修正头文件代码如下:
#gedit include/configs/my2440.h //修正指令行前的姓名和Nor Flash参数部分的界说 |
#define CONFIG_SYS_PROMPT “[MY2440]#” //将指令行前的姓名改成[MY2440] /*———————————————————————– #defineCONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */ #ifdef CONFIG_AMD_LV800 |
然后增加对咱们mini2440开发板上2M的Nor Flash(类型为SST39VF1601)的支撑。在u-boot中对Nor Flash的操作别离有初始化、擦除和写入,所以咱们首要修正与硬件密切相关的三个函数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函数如下: for(j = 0; j < flash_info[i].sector_count; j++){ // /* 2nd and 3rd are both 8 KB */ // /* 4th 32 KB */ flash_info[i].start[j]= flashbase + j * MAIN_SECT_SIZE; //修正flash_print_info函数如下: case(AMD_MANUFACT & FLASH_VENDMASK): case(AMD_ID_LV800B & FLASH_TYPEMASK): //修正flash_erase函数如下: ///* 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函数如下: ///* 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中运转成果如下图:
从运转成果图看,Nor Flash的巨细能够正确检测到了,指令行前面的姓名也由本来的SMDK2410改成我自己界说的[MY2440]了,可是还会呈现bad CRC的正告信息,其实这并不是什么问题,仅仅还没有将环境变量设置到Nor Flash中,咱们履行一下u-boot的:saveenv指令就能够了。如下图:
再从头下载u-boot.bin文件到RAM中运转,能够观察到不会呈现正告信息了,这时候u-boot现已对咱们开发板上的Nor Flash彻底支撑了。如下: