06-S3C2440学习之移植2012u-boot到S3C2440(移植过程二)支持NAND启动

说明:

原来的代码在链接时加了"-pie"选项, 使得u-boot.bin里多了"*(.rel*)","*(.dynsym)"(*(.rel*)","*(.dynsym)这些地址信息用于实现UBOOT可以被拷贝到任何地方,更新地址信息),但使得程序非常大,结构复杂,不利于从NAND启动(重定位之前的启动代码应该少于4K)。所提去掉了pie功能。

(1)使用一下之前写的init.c


拷贝到2440单板下:


修改init内容为:

/* NAND FLASH控制器 */
#define NFCONF (*((volatile unsigned long *)0x4E000000))
#define NFCONT (*((volatile unsigned long *)0x4E000004))
#define NFCMMD (*((volatile unsigned char *)0x4E000008))
#define NFADDR (*((volatile unsigned char *)0x4E00000C))
#define NFDATA (*((volatile unsigned char *)0x4E000010))
#define NFSTAT (*((volatile unsigned char *)0x4E000020))

/* GPIO */
#define GPHCON              (*(volatile unsigned long *)0x56000070)
#define GPHUP               (*(volatile unsigned long *)0x56000078)

/* UART registers*/
#define ULCON0              (*(volatile unsigned long *)0x50000000)
#define UCON0               (*(volatile unsigned long *)0x50000004)
#define UFCON0              (*(volatile unsigned long *)0x50000008)
#define UMCON0              (*(volatile unsigned long *)0x5000000c)
#define UTRSTAT0            (*(volatile unsigned long *)0x50000010)
#define UTXH0               (*(volatile unsigned char *)0x50000020)
#define URXH0               (*(volatile unsigned char *)0x50000024)
#define UBRDIV0             (*(volatile unsigned long *)0x50000028)

#define TXD0READY   (1<<2)


void nand_read_ll(unsigned int addr, unsigned char *buf, unsigned int len);


static int isBootFromNorFlash(void)
{

}

void copy_code_to_sdram(unsigned char *src, unsigned char *dest, unsigned int len)
{	

}

void clear_bss(void)
{

}

void nand_init_ll(void)
{

}

static void nand_select(void)
{

}

static void nand_deselect(void)
{

}

static void nand_cmd(unsigned char cmd)
{

}

static void nand_addr(unsigned int addr)
{

}

static void nand_wait_ready(void)
{

}

static unsigned char nand_data(void)
{

}

void nand_read_ll(unsigned int addr, unsigned char *buf, unsigned int len)
{

}
(2)使用 已经设置好栈,进行nand初始化、重定位等操作 

参考:


拷贝:


链接地址为:



为汇编 可能存到4K之外,所以改为这个,地址定死了。这就是程序的链接地址。


这个值要修改:(64M 中预留512K给uboot




Ofs就是大小,r0 r1 r2 分别是源  目的 大小

(3)清bss段


(4)从片内 跳转到SDRAM中。


(5)修改board_init_f,把relocate_code去掉


(6)删掉多余的清BSS

删除到:


(7)调用第二阶段

需要使用ID这个参数  上一个函数来返回这个值


(8)更新修改过的文件

start.S (arch\arm\cpu\arm920t)

Board.c (arch\arm\lib)

Init.c (board\samsung\smdk2440)

Smdk2440.h (include\configs)

(9)修改makefile

viboard/samsung/smdk2440/Makefile


(10)修改去掉"-pie"选项

      arch/arm/config.mk:75:LDFLAGS_u-boot +=-pie 去掉这行

viarch/arm/config.mk +75


(11)修改链接脚本: 把start.S, init.c, lowlevel.S等文件放在最前面



(12)make后会出现几个错误:

函数声明错误,改成有返回值的


函数名称已经修改




(13)计算大小



(14)预留了1M给uboot,make,生成反汇编

(15)到此,下载到nand 从nand启动,启动成功!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值