1、u-boot-2016.11的第一个启动的文件为arch\arm\lib\vectors.S,系统上电时,产生复位异常,从vectors.S中的reset跳转到start.S (arch\arm\cpu\arm920t),在该文件中修改系统时钟代码,并添加上icache的启动代码加快启动速度(添加到屏蔽IRQ中断代码之后):
/******************初始化系统时钟********************/
ldr r0,=0x4c000014
mov r1,#0x05 /*FCLK:HCLK:PCLK = 1:4:8 = 400M:100M:50M*/
str r1,[r0]
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0
ldr r0,=0x4c000004
ldr r1,=0x5c011
str r1,[r0]
/******************启动ICACHE********************/
mrc p15, 0, r0, c1, c0, 0@ read control reg
orr r0, r0, #(1<<12)
mcr p15, 0, r0, c1, c0, 0 @ write it back
注释掉Smdk2440.c(board\samsung\smdk2440)中的board_early_init_f函数中的时钟配置:
2、随后进入lowlevel_init.S(board\samsung\smdk2440)中的lowlevel_init配置初始化2440的存储控制器包括SDRAM初始化,将存储控制器13个寄存器的值替换为自己的寄存器的值:
3、编译,烧写到NORflash,输出乱码。查找下来是Speed.c(arch\arm\cpu\arm920t\s3c24x0)中的获取时钟函数get_HCLK有问题,没有配置CONFIG_S3C2440,到include\configs\smdk2440.h中去配置:
注意!不要使用如下注释方法,会报错。
再编译,烧写到NORflash,成功启动并打印出信息,识别出SDRAM大小,如图: