第五章:基于九鼎X210开发板移植2014.10版U-boot之初始化内存

2019-07-12 14:24发布

 走到现在,停下来想一下,uboot的bl1阶段最大的使命就是初始化ddr,好让后面的大部队有充足的内存可以挥霍,所以下一步就需要好好看看和ddr相关的东西。  接着定位到lowlevel_init,看完之后发现里面有一个internal_ram_init,这个是DDR初始化?往下看发现,代码就那么几行,心里就大概清楚肯定不是DDR初始化了。  (ps:嵌入式开发中,内存的硬件设计和软件设计应该是最难的了,软件这里要和硬件一起搞,才能配置好很多寄存器,我们公司DDR寄存器配置的参数都是硬件设的)。DDR初始化不是我现在这种水平能搞定的,所以决定移植开发板配套的DDR。  拷贝samsung-uboot/cpu/s5pc11x/s5pc110目录下的cpu_init.S到我们现在修改的uboot的板级目录下u-boot-2014.10/board/Samsung/X210/。由于内存初始化也要放在BL1前面,所以我们要对cpu_init.S进行裁剪,把没用的部分删除掉,减少下空间(当然不裁剪也可以,理论上应该是够用的)
 Review一下cpu_init.S,发现需要用到好多宏,然后就需要包含开发板配套的uboot的头文件,这里拷贝samsung-uboot/include目录下的s5pc110.hu-boot-2014.10/include目录下即可,由于s5pc110.h又调用到了一些头文件,这里我嫌麻烦,就直接将需要的头文件的内容直接包含进了s5pc110.h。编译后发现还缺了一些DDR配置参数,从三星版本的smdkv210single.h中复制到include/configs/目录下的X210.h中。
   
 接着修改DDR的板级信息,将CONFIG_NR_DRAM_BANKS更改为2,然后删除PHYS_SDRAM_3PHYS_SDRAM_3_SIZE,并将1和2的大小设置为256M。
    之后在板级目录下出x210.c文件中修改,将dram_init中的PHYS_SDRAM_S_SIZE删除,将dram_init_banksize里面的bi_dram[2]删除。       然后在lowlevel_init.s中追加DDR初始化,初始化完成后打印一个-。
        修改完后,在主makefileuboot.lds文件中修改需要链接的cpu_init.o,具体修改方法上面说过了,和lowlevel_init如出一辙。编译后拷贝到sd卡再启动,打印出-,说明成功了。