http://www.76ku.cn
分类:
2007-06-10 01:38:30
uboot-1.1.6 H9200M(at91rm9200dk)
1.uboot源代码修改
1) include/configs/at91rm9200.h
A:加入 :#define CONFIG_SKIP_LOWLEVEL_INIT(跳过板子的自动初始化,否则死循环)
B:根据板子情况修改flash和SDRAM的大小定义
#define PHYS_FLASH_SIZE 0x400000 //4M FLASH
#define CFG_MAX_FLASH_SECT 71 //71 扇区
#define PHYS_SDRAM_SIZE 0x2000000 //32M SDRAM
2) board/at91rm9200dk/flash.c
A:加入flash驱动
OrgDef OrgMBM29LV320BE[] =
{
{ 8, 8*1024 }, /* 8* 8 kBytes sectors */
{ 63, 64*1024 }, /* 63 * 64 kBytes sectors */
};
B:flash验证信息
#define RESET 0xF0
/* Read Reset */
MEM_FLASH_ADDR1 = FLASH_CODE1;
MEM_FLASH_ADDR2 = FLASH_CODE2;
MEM_FLASH_ADDR1 = RESET;
...
替换:
/* Vendor type */
info->flash_id = FUJ_MANUFACT & FLASH_VENDMASK;
printf("FUJ and AMD\n");
...
加入:
else if((device_code & FLASH_TYPEMASK)==(AMD_ID_LV320B & FLASH_TYPEMASK))
{
info->flash_id |= AMD_ID_LV320B & FLASH_TYPEMASK;
printf("MBM29LV320B (32Mbit)\n");
}
...
C:flash初始化信息
在函数 ulong flash_init (void)中加入:
...
else if((flash_info[i].id & FLASH_TYPEMASK==(AMD_ID_LV320B & FLASH_TYPEMASK))
{
pOrgDef = OrgMBM29LV320BE;
flash_nb_blocks = sizeof (OrgMBM29LV320BE) / sizeof (OrgDef);
}
D:打印信息
在函数 void flash_print_info (flash_info_t * info)中加入:
...
case (FUJ_MANUFACT & FLASH_VENDMASK):
printf("FUJ");
break;
...
case (AMD_ID_LV320B & FLASH_TYPEMASK):
printf("MBM29LV320BE (32Mbit\n)");
break;
E:在函数 int flash_erase (flash_info_t * info, int s_first, int s_last)中加入:
if ((info->flash_id & FLASH_VENDMASK) != (FUJ_MANUFACT & FLASH_VENDMASK))
{
return ERR_UNKNOWN_FLASH_VENDOR;
}
3)board/at91rm9200/config.mk
TEXT_BASE = 0x21f00000
2.编译u-boot
mkdir /home/chen/abc
export BUILD_DIR=/home/chen/abc //BUILD_DIR是makefile中定义的变量
make distclean
make at91rm9200dk_config
make all
在abc下生成u-boot.bin u-boot u-boot.srec三个文件
3.启动片内 ROM 的程序
将H9200M的跳线J100的2-3短接,然后复位系统,打开超级终端(115200、8、无、1、无),在超级终端会出现 “CCCCCCCC…..” 此时AT91RM9200片内ROM的程序已开始运行.
4.下载 Uboot 到 SDRAM 运行
在超级终端,使用Xmodem协议,发送loader.bin文件,然后超级终端会出现下载Uboot的提示,并继续出现“CCCCCCCCC………”
继续使用Xmodem协议,发送uboot.bin文件,此时uboot.bin被发送到系统的SDRAM中,显示>U-Boot的提示符.