1、加入nand读写函数文件:

对于nand的读写我们需要特定的函数,之前写最小bootloader的时候曾写过nand.c文件,我们需要用到它。为了避免混淆,我们先将其改名为init.c,然后拷贝到:board\samsung\smdk2440目录下。并在本目录的Makefile文件中将COBJS   := smdk2410.o修改为:COBJS   := smdk2410.o init.o。另外我们将init.c文件里面里的nand_init全部改为nand_init_ll,nand_read全部改为nand_read_ll。

2、拷贝代码:

将arch/arm/cpu/arm920t/start.S里的下列代码
/* Set stackpointer in internal RAM to call board_init_f */
call_board_init_f:
ldr
sp, =(CONFIG_SYS_INIT_SP_ADDR)
bic
sp, sp, #7 /* 8-byte alignment for ABI compliance */
ldr
r0,=0x00000000
bl
board_init_f
修改为:
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */

    bl nand_init_ll
    mov r0 , #0
    ldr r1 ,  _TEXT_BASE
    ldr r2 ,  _bss_start_ofs
    bl copy_to_sdram
    bl clear_bss
    ldr pc , =call_board_init_f
/* Set stackpointer in internal RAM to call board_init_f */
call_board_init_f:

ldr
r0,=0x00000000
bl
board_init_f

并且在include/configs/smdk2440.h文件里面将:
#define CONFIG_SYS_TEXT_BASE 0x0
修改为:#define CONFIG_SYS_TEXT_BASE 0x33f00000

3、清BSS段

修改Init.c文件里面的clear_bss函数为:
void clear_bss()
{
    extern int __bss_start,__bss_end__;
    int *p = &__bss_start;

    for(;p<&__bss_end__;p++)
        *p=0;
}

4、去除重定位代码

将arch/arm/lib/board.c文件里的board_init_f函数最后的relocate_code(addr_sp, id, addr);注释掉
并 start.S文件里面的clear_bss和relocate_code代码去掉
在board_init_f函数里面将:
        addr -= gd->mon_len;
        addr &= ~(4096 - 1);
修改为:
addr = _TEXT_BASE;

5、第二阶段代码:

首先在arch/arm/lib/board.c文件里的board_init_f数最后的添加:return (unsigned int)id;
并将函数名改为:unsigned int board_init_f(ulong bootflag)

将include/common.h文件的:
voidboard_init_f  (ulong) __attribute__ ((noreturn));
voidboard_init_r  (gd_t *, ulong) __attribute__ ((noreturn));
修改为:
unsigned int board_init_f  (ulong) ;
voidboard_init_r  (gd_t *, ulong) ;

在arch/arm/cpu/arm920t/start.S文件里的:
blboard_init_f
后面添加:
ldr r1 , = _TEXT_BASE
bl board_init_r

6、去掉-pie选项

 vi arch/arm/config.mk 
注释掉://LDFLAGS_u-boot += -pie

7、修改连接脚本

vi arch/arm/cpu/u-boot.lds 
将:
        .text :
        {
                __image_copy_start = .;
                CPUDIR/start.o (.text)
                *(.text)
        }
修改为:
        .text :
        {
                __image_copy_start = .;
                CPUDIR/start.o (.text)
                board/samsung/smdk2440/libsmdk2440.o (.text)
                *(.text)
        }







文章参照:http://liu1227787871.blog.163.com/blog/static/205363197201271103621960/

版权声明:本文为博主原创文章,未经博主允许不得转载。

u-boot-2012.04.01移植笔记——支持NAND启动的更多相关文章

  1. ok6410 u-boot-2012.04.01移植五支持DM9000

    继ok6410 u-boot-2012.04.01移植四后,开发板基本已支持MLC NAND,但还有一些细节地方修改,这节增加DM9000支持,通过网卡tftp程序到内存,接着通过NAND命令写到NA ...

  2. ok6410 u-boot-2012.04.01移植六完善MLC NAND支持

    继ok6410 u-boot-2012.04.01移植四.五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的n ...

  3. 移植u-boot.2012.04.01

    /*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...

  4. ok6410 u-boot-2012.04.01移植二修改源码支持单板

    继ok6410 u-boot-2012.04.01移植一后修改代码,对ok6410单板初始化,主要包括时钟.串口.NAND.DDR等初始化.这些工作在以前的裸板程序都写了,直接拿来用.我觉得先写裸板程 ...

  5. ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)

    继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND.DM9000等.但还需要完善比如环境变量.mtdpart分区.裁剪.制作补丁等.下面的工作就是完善移植的u-b ...

  6. uboot-2012.04.01移植编译前准备

    一:准备移植1.从下面的官网下载uboot-2012.04.012.建立sourceinsight工程 a.解压并在E:\colin weidongshan\transplant_u-boot-201 ...

  7. z-index总结【转载http://www.cnblogs.com/mind/archive/2012/04/01/2198995.html】

    元素位置重叠的背景常识 (x)html文档中的元素默认处于普通流(normal flow)中,也就是说其顺序由元素在文档中的先后位置决定,此时一般不会产生重叠(但指定负边距可能产生重叠).当我们用cs ...

  8. 移植u-boot-2012.04.01到JZ2440

    开发环境:Ubuntu 12.04 开发板:JZ2440  256M NandFlash  64M SDRAM 交叉编译器:arm-linux-gcc-4.3.2 u-boot:u-boot-2012 ...

  9. Linux学习 :移植U-boot_2012.04.01到JZ2440开发板

    一.下载U-boot源码:ftp://ftp.denx.de/pub/u-boot/ 二.uboot的启动过程: 部分硬件初始化——>加载完整uboot到RAM——>跳转到第二阶段入口开始 ...

随机推荐

  1. 上交oj1219 重要的逆序数对

    题意: https://acm.sjtu.edu.cn/OnlineJudge/problem/1219 思路: 在经典的归并排序求逆序数对算法基础上稍作修改. 实现: #include <io ...

  2. 如何配置TomCat

    1.先查看你自己java的jdk的版本号 2.通过jdk版本号确定下载的Tomcat版本 ,因为我的是jdk 1.8的,所以要下载Tomcat 8版本 附上下载官网http://tomcat.apac ...

  3. codevs 2600 13号星期几?

    时间限制: 1 s  空间限制: 8000 KB  题目等级 : 黄金 Gold 题目描述 Description 从1900年1月1日(星期一) 开始经过的n年当中,每个月的13号这一天是星期一.星 ...

  4. WEB前端JS与UI框架

    前端Js框架汇总 概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人 ...

  5. iview table的render()函数基本的用法

    render:(h,params) => { return h(" 定义的元素 ",{ 元素的性质 }," 元素的内容"/[元素的内容]) }

  6. python之路——内置函数和匿名函数

    阅读目录 楔子 内置函数 匿名函数 本章小结 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们 ...

  7. nodeJS和npm的环境配置

    1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL” ...

  8. DLL动态链接库的创建

    dll的创建主要有两种方法:一是使用 __declspec(dllexport) 创建dll,二是使用模块定义(.def)文件创建dll. 使用 __declspec(dllexport) 创建dll ...

  9. 两个乒乓球队进行比赛,各出三人。 甲队为a,b,c三人,乙队为x,y,z三人。 已抽签决定比赛名单。 有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比, 请编程序找出三队赛手的名单。

    题目:两个乒乓球队进行比赛,各出三人. 甲队为a,b,c三人,乙队为x,y,z三人. 已抽签决定比赛名单. 有人向队员打听比赛的名单. a说他不和x比,c说他不和x,z比, 请编程序找出三队赛手的名单 ...

  10. executeFind(XXX) is undefined for the type hibernateTemplate(大概是这个错误吧)

    两句话,jar包版本不一样,类中包含的方法可能有改变. 出错时用的是spring5.x版本,但是没有找到我的api.(不记得放在那里了),所以换了spring的版本(换成了spring3.x).问题解 ...