全部博文(65)
分类: LINUX
2009-06-29 19:31:33
我这里的设备上,一般都是在NOR-Flash上跑U-boot,但有时候为了调试等的方便,要让u-boot在内存中跑。 Flash版本的u-boot是不能直接在内存中跑的(至少我这里的情况是这样)。
下面,主要按照我这的情况,简单说说内存版u-boot的制作。制作出来的u-boot,可以:
1)用仿真器下载到内存中运行;
2)通过设备中已经有的u-boot,用tftp下载到内存中,再用go 0xxxx运行。
内存版u-boot的制作简单地说,就是注释掉不需要运行的相关代码,主要是:
1)内存,flash的初始化
2)ARM的内存重映射
3)相关时钟初始化
这里,我是这样做的:
修改u-boot-1.0.2/cpu/arm940t/start.S,注释相关代码:
。。。。。。
reset:
//bl platformsetup
/*这里的platformsetup是具体设备的内存、Flash相关初始化;注释掉这个步骤,因为内存版u-boot运行时,内存、Flash已初始化好。*/
。。。。。。
。。。。。。
clbss_l:
str r2, [r0]
add r0, r0, #4
cmp r0, r1
bne clbss_l
ldr pc, _start_armboot
_start_armboot: .word start_armboot //跳到C程序start_armboot执行
。。。。。。
再注释board_init函数中调用的时钟初始化函数init_clk:
void init_clk(void)
{
icache_disable();
#if 0
PMUSetFCS(PLL_331776000);
PMUSetTurboMode(1); // 1: On, 0: Off
PMUSetPLL3();
#endif
icache_enable();
}