码迷,mamicode.com
首页 > 其他好文 > 详细

u-boot-2015.04 在tq2440上的移植(使用spl引导u-boot)

时间:2015-05-31 12:18:21      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

本次移植跟以往的不同之处是采用了spl来引导u-boot,参考了博客http://blog.csdn.net/fulinus/article/details/42738641

下载链接:http://pan.baidu.com/s/1bnlRKgn

 

使用方法:

1、 编译

  make tq2440_defconfig

  make

2、 然后会在u-boot根目录下生成u-boot.bin,在spl目录下会生成u-boot-spl.bin,目前的分区是:

 

u-boot-spl.bin

(1M)

u-boot.bin

(1M)

kernel

(3M)

rootfs

(剩余)

   

自己可以改动,在arch/arm/lib/crt0.S中:

  #if defined(CONFIG_SPL_BUILD)
      /* Read u-boot from Nandflash to SDRAM address $CONFIG_SYS_TEXT_BASE */
      ldr r0, =CONFIG_UBOOT_MTD_ADDR               /*u-boot镜像在NandFlash中存储地址*/
      ldr r1, =CONFIG_SYS_TEXT_BASE                /*u-boot在内存中的加载地址*/
      ldr r2, =CONFIG_UBOOT_LENGTH                 /*u-boot镜像的大小*/

      bl  copy_code_to_sdram

      ldr pc, =CONFIG_SYS_TEXT_BASE
  #else
      bl    board_init_f
  #endif

3、目前支持NandFlash和DM9000。

4、为什么要用spl来引导u-boot?

  对于tq2440,采用的是S3C2440,当从NandFlash启动时,上电时S3C2440内部固化的程序自动把NandFlash的前4KB程序拷贝到片内SRAM,然后执行IRAM中的程序,同时要保证这4KB中的程序是位置无关码,在这4KB程序完成了内存的初始化,栈的设置,NandFlash的初始化,将u-boot镜像从NandFlash中拷贝到内存中,将PC跳转到内存中执行。

  随着u-boot的更新,在u-boot的前4K已经无法完成上面这些事,在前4KB会执行位置相关码,导致u-boot无法正常运行。

  为了解决这个问题,u-boot提供了SPL,用spl来引导u-boot,spl的体积很小,只完成将u-boot从NandFlash中拷贝到内存中,然后跳转到内存。

5、可能存在的问题:

  由于从NandFlash启动的时候,IRAM被映射到了0地址处,现在是用spl引导u-boot,所以IRAM中是spl,如果有中断发生,PC执行的是spl中程序,而不是u-boot中的,可以考虑u-boot启动后,在将u-boot的前4KB拷贝到IRAM中。

 

完!

 

u-boot-2015.04 在tq2440上的移植(使用spl引导u-boot)

标签:

原文地址:http://www.cnblogs.com/pengdonglin137/p/4541705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!