u-boot-2016.11移植到S3C2440之第一阶段修改(2)

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函数中的时钟配置:

u-boot-2016.11移植到S3C2440之第一阶段修改(2)_第1张图片

2、随后进入lowlevel_init.S(board\samsung\smdk2440)中的lowlevel_init配置初始化2440的存储控制器包括SDRAM初始化,将存储控制器13个寄存器的值替换为自己的寄存器的值:

u-boot-2016.11移植到S3C2440之第一阶段修改(2)_第2张图片

3、编译,烧写到NORflash,输出乱码。查找下来是Speed.c(arch\arm\cpu\arm920t\s3c24x0)中的获取时钟函数get_HCLK有问题,没有配置CONFIG_S3C2440,到include\configs\smdk2440.h中去配置:


注意!不要使用如下注释方法,会报错。


再编译,烧写到NORflash,成功启动并打印出信息,识别出SDRAM大小,如图:

u-boot-2016.11移植到S3C2440之第一阶段修改(2)_第3张图片


你可能感兴趣的:(u-boot-2016.11)