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:
ldrsp, =(CONFIG_SYS_INIT_SP_ADDR)
bicsp, sp, #7 /* 8-byte alignment for ABI compliance */
ldrr0,=0x00000000
blboard_init_f

修改为:
ldrsp, =(CONFIG_SYS_INIT_SP_ADDR)
bicsp, 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:
ldrr0,=0x00000000
blboard_init_f

并且在include/configs/smdk2440.h文件里面将:
#define CONFIG_SYS_TEXT_BASE0x0
修改为:#define CONFIG_SYS_TEXT_BASE0x33f00000

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/

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

转载于:https://www.cnblogs.com/otaku-lip/p/4764992.html

u-boot-2012.04.01移植笔记——支持NAND启动相关推荐

  1. uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

  2. uboot研读笔记 | 04 - 移植uboot 2012.04到JZ2440(支持Nor Flash读写)

    项目开源地址:https://github.com/Mculover666/uboot-jz2440 0. 教程完整目录 00 - 嵌入式Linux系统中Bootloader的作用和基本运行原理 01 ...

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

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

  4. 移植u-boot.2012.04.01

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

  5. u-boot-2012.04.01移植到TQ2440(八):支持烧写yaffs文件系统

    一.支持yaffs烧写文件系统 先直接烧写试一下 TQ2440 # nand write.yaffs32000000 rootfs $filesize NAND write: device 0 off ...

  6. 移植u-boot-2012.04.01到jz2440开发板之修改代码支持NAND启动

    上一篇文章我们已经修改了uboot源码使其能够正常打印输出了,但是输出停到了nand启动那里,所以这篇文章就来记录如何修改源码使uboot支持NAND启动. 原来的代码在链接时加了"-pie ...

  7. u-boot-2012.04.01移植到TQ2440

    u-boot-2012.04.01移植到TQ2440(一):建立自己的开发板 到官网http://ftp.denx.de/pub/u-boot/下载u-boot-2012.04.01.tar.bz2 ...

  8. (2012.01.12-2012.04.01)八十二天的学习小记

    (2012.01.12-2012.04.01)八十二天的学习小记   哈哈,原来又是过了八十二个日子了,真快啊~这次发的学习小记日期记录时间有点长,回看1月份的东西,原来已经隔了八十多个日子了,对于这 ...

  9. u-boot-2012.04.01移植到TQ2440(七):添加分区信息并启动jffs2文件系统

    一.添加分区信息并启动jffs2文件系统 烧写之前的内核看输出分区信息 TQ2440 # tftp 32000000uImage dm9000 i/o: 0x20000000, id:0x90000a ...

  10. u-boot-2012.04.01移植(七)提供nor flash支持

    无论系统从NOR启动还是从NAND启动,都会打印相同的错误信息 Flash:*** failed *** ### ERROR ### Please RESET the board 正常的打印信息应该是 ...

最新文章

  1. Linux Shell 脚本限制ssh最大用户登录数
  2. DotNetNuke(DNN)网站发布、部署、迁移和重建
  3. 使用C++实现Socket编程传输协议文件(包括大文件)
  4. MongodDB数据库安装和简单使用
  5. 彻底理解 Spring 容器和应用上下文
  6. 【maven插件】maven-help-plugin
  7. 在java.library.path中找不到允许在生产环境中实现最佳性能的基于APR的Apache Tom.....
  8. Buildroot构建指南——Linux内核
  9. 《那些年啊,那些事——一个程序员的奋斗史》转载1到7
  10. Transformer太深不行?NUS字节发现注意力坍缩,提出重注意机制!
  11. W3C中meta标签详解
  12. Hibernate Criteria示例教程
  13. idea插件sonar安装使用教程
  14. 【入门一】一些简单的C程序及VS2015/Code:Blocks的使用
  15. Java实现大数操作
  16. 无法进入一个空框_DeNoise AI无法从Photoshop作为插件启动?
  17. 建议电脑电源标准逐步去掉-12V、3.3V
  18. matlab 小波分析实例,小波分析MATLAB实例
  19. atmega168p与328p_ATMEGA328P-MU产品说明
  20. 【小飞兔整站下载】整站下载器哪个好用_整站下载工具哪个好

热门文章

  1. 让一个.sh文件一直运行_想做AI鉴黄工具?这有一个内含20多万张“不可描述”图片的数据集...
  2. pythonweb程序设计_Python编程实现的简单Web服务器示例
  3. refprop用matlab,Matlab 调用 REFPROP(64位)下载即可用
  4. java消息头_java中怎么进行头消息校验
  5. 阿里云Kubernetes Service Mesh实践进行时(7): 可观测性分析服务Kiali
  6. Java并发系列—并发编程基础
  7. 使用 Vim 的 jump list 看代码
  8. ArcGIS API for JavaScript 打印
  9. servlet中web.xml配置
  10. 叫醒你的是闹钟,还是梦想?