1,前言
几年前买了一块讯为的开发板,后来吃灰了好久,近期准备换工作了,所以拿出来玩玩,熟悉下驱动和内核开发,第一步是准备从uboot移植开始,因为这板子买的早,现在讯为基本不发pop板子了,网上移植的最新uboot比如2017,2011的都是在SCP 1G板子上移植的,烧录到pop没有效果,所以在他们的基础上修改了下,让pop 1G DDR可以工作
2,准备
移植的版本是别人移植好的
iTop-4412精英版的u-boot-2017.11移植教程
3,测试
通过点灯测试发现itop4412-spl.bin可以正常工作,只是没有串口显示(串口初始化竟然没有打印OK!)
pop和scp主要的差别就是DDR的区别,pop是DDR2,scp是DDR3,通过原始的lowlevel_init.S文件的对比就可以发现
我们加入一段代码,测试DDR是否可以工作
void mem_test(void)
{
volatile unsigned long i = 0;
volatile unsigned long * ram;
volatile unsigned long * GPL2CON;
volatile unsigned long * GPL2DAT;
GPL2CON = (volatile unsigned long *)0x11000100;
GPL2DAT = (volatile unsigned long *)0x11000104;
ram = (volatile unsigned long *)0x43E00000;
*GPL2CON = 1;
*GPL2DAT = 0;
*ram = 1;
while (1)
{
*GPL2DAT = *ram;
*ram ^= 1;
for(i = 0;i < 500000;i++);
}
}
测试发现led灯不会闪烁,一直在亮,说明未成功向SDRAM写入数据
4,修复
我们知道原始uboot程序的DDR初始化代码在
我们将cpu_init_pop.S文件拷贝到新uboot的arch\arm\mach-exynos\下面,同时修改Makefile文件
再添加一些头文件,调用mem_ctrl_asm_init()后测试,板子led已经可以闪烁了,板子也有打印信息了
需要声明下这个函数
extern void mem_ctrl_asm_init(void);
我们后续看下怎么优化不能识别kernel的问题
不足之处,敬请指出