u-boot20130401移植到jz2440v2

2 篇文章 0 订阅

再次移植uboot,进度暂时为从nand启动进入hush交互

准备工作:

1.准备init.bin,用于openjtag初始化时钟,sdram,之后可以将uboot通过openocd直接写入内存运行

load_image init.bin 0

resume 0

halt

load_image u-boot.bin 0x30000000

resume 0x30000000


2.最小系统

类似单片机电路,先实现uboot的最小系统,即能从串口看到打印信息

2.1复制board目录,cpu目录,config.h什么的不说的

在board.cfg中复制smdk2410一行,改smdk2410为jz2440

复制include/configs/smdk2410.h 为jz2440.h

2.2裁剪uboot

将jz2440.h中,不必要的宏注释掉,可以将uboot从400多KB减少到120KB左右,大大加快用oflash烧写的速度

2.3 时钟

把uboot坑爹的时钟设置放到sdram初始化之前

ldr r0, =0x4c000014
mov r1, #5
str r1, [r0]

mrc p15, 0, r1, c1, c0, 0/* 读出控制寄存器 */
orr r1, r1, #0xc0000000 /* 设置为“asynchronous bus mode” */
mcr p15, 0, r1, c1, c0, 0/* 写入控制寄存器 */


ldr r0,= 0x4c000004
ldr r1,=((0x5c<<12)|(0x01<<4)|(0x01))
str r1, [r0] /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */

以上代码放到

#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif

之前

2.3 sdram

在cpu_init_crit中会调用lowlevel_init函数,该函数在board/samsung/jz2440/lowlevel_init.S中定义

修改lowlevle_init函数完成sdram初始化

2.4修改初始栈指针

修改jz2440.h中宏定义

#define CONFIG_SYS_INIT_SP_ADDR (0x30000000 + 0x4000000 - GENERATED_GBL_DATA_SIZE)

3 编译运行

make clean

make jz2440_config

make


这次的总结是,不管是移植uboot还是移植linux,都要熟悉他们的框架

学习驱动开发和一般的学科学习不同,要先掌握linux的驱动框架,如果一开始就往细了钻,基本上会被打击掉自信心,而且效率也不高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值