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

发布者:ShimmeringStar最新更新时间:2022-05-28 来源: eefocus关键字: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 (archarmcpuarm920t)


Board.c (archarmlib)

Init.c (boardsamsungsmdk2440)


Smdk2440.h (includeconfigs)

(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启动,启动成功!

关键字:S3C2440  移植  NAND启动 引用地址:06-S3C2440学习之移植2012u-boot到S3C2440(移植过程二)支持NAND启动

上一篇:06-S3C2440学习之移植2012u-boot到S3C2440(移植过程三)支持NorFlash
下一篇:06-S3C2440学习之移植2012u-boot到S3C2440(移植过程一)新建单板+修改时钟+SDRAM+UART

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved