UBOOT-2012-10在OK6410平台的移植(十一)从SD卡启动

时间:2021-04-01 16:35:37

首先必须弄清楚S3C6410关于SD启动的整个过程。

再来谈移植:

1.把movi.h文件放在include目录下。

2.把movi_boot.c放在/nand_spl目录下并创建链接,把链接放到/nand_spl/board/samsung/smdk6410目录下并修改该目录下的Makefile

    2.1 增加movi_boot.o

 COBJS    = nand_boot.o nand_ecc.o s3c64xx.o smdk6410_nand_spl.o nand_base.o movi_boot.o

   2.2 指明movi_boot.c路径

  $(obj)movi_boot.c:
  @rm -f $@
  @ln -s $(TOPDIR)/nand_spl/movi_boot.c $@

3.增加宏定义#define CONFIG_MOVINAND到smdk6410.h(include/configs)

4.Start.s在程序中nand_boot这里添加movi_boot的代码,如下:

#ifdef CONFIG_NAND_SPL
   #ifdef CONFIG_MOVINAND
       ldr sp, _TEXT_PHY_BASE
       blmovi_bl2_copy
       bafter_copy 
after_copy:
       ldr pc,_TEXT_PHY_BASE
   #endif
      ldrsp, =(CONFIG_SYS_INIT_SP_ADDR)
      bicsp, sp, #7 /* 8-byte alignment for ABI compliance */
      ldr r0,_nand_boot
      mov pc, r0
_nand_boot: .word nand_boot
#else

......

#endif

编译可能提示movi_bl2_copy没有定义,我是把它声明在include目录下的nand.h里面:

#ifdef CONFIG_MOVINAND
void movi_bl2_copy(void);//__attribute__((noreturn))
#endif

也可以把它放在common.h里面。

OK,编译应该可以通过了,接下来制作u-boot-mmc.nb0用于烧录到SD卡中:

5.u-boot-mmc.nb0的制作方法

 5.1先制作一个512K的u-boot.bin,这个就是用在SDRAM中运行的,因此原材料自然就是主目录下的

u-boot.bin. 可能我们编译好的u-boot.bin并没有512K这么大,那么可以采用“复制”或“拼接”的方法做一个512k的bin:

       cat u-boot.bin >> temp
       cat u-boot.bin >> temp
       cat u-boot.bin >> temp
       cat movi-env-zero-16k.bin >> temp
       split -b 512k temp
       mv xaa u-boot_512k.bin

 5.2 再制作一个8k的u-boot.bin,这个是BL1阶段运行的,所以原料必须是在nand_spl下u-boot_spl-16k.bin

      cat nand_spl/u-boot-spl-16k.bin >> temp
      cat movi-env-zero-16k.bin >> temp
      split -b 8k temp
      mv xaa u-boot_8k.bin

 5.3我们还需要一个16K的"空白"bin,就是上面出现的那个movi-env-zero-16k.bin

 5.4把这几个bin合并起来就是u-boot-mmc.nb0啦:

       cat u-boot_512k.bin >> u-boot_mmc.nb0
       cat movi-env-zero-16k.bin >> u-boot_mmc.nb0
       cat u-boot_8k.bin >> u-boot_mmc.nb0

  嫌上面步骤多手工输入麻烦?那么,就在主目录下建立一个文件,随便命名比:u2mmc

  编辑这个文件内容如下:

#!/bin/sh
rm -rf u-boot_mmc.bin
cat u-boot.bin >> temp
cat u-boot.bin >> temp
cat u-boot.bin >> temp
cat movi-env-zero-16k.bin >> temp
split -b 512k temp
mv xaa u-boot_512k.bin
rm -f temp x*

cat nand_spl/u-boot-spl-16k.bin >> temp
cat movi-env-zero-16k.bin >> temp
split -b 8k temp
mv xaa u-boot_8k.bin
rm -f temp x*

cat u-boot_512k.bin >> u-boot_mmc.bin
cat movi-env-zero-16k.bin >> u-boot_mmc.bin
cat u-boot_8k.bin >> u-boot_mmc.bin

rm -rf u-boot_512k.bin u-boot_8k.bin

这样我们每次

root@ubuntu:/home/my/u-boot-2012.10# make
完后再

root@ubuntu:/home/my/u-boot-2012.10# ./u2mmc

就制作好u-boot_mmc.nb0文件了,把它烧录到SD卡中,然后从SD启动试试看你的U-boot有没有运行起来.

最后说明一下为什么第一个u-boot是512K,中间为何有个16K的“0X00”?其实这2个都是根据系统的配置而定的,也就是说,系统配置不同,这两个地方的大小就会不同。

其中512K是这样来的:

(include/movi.h)#define PART_SIZE_BL        (512 * 1024)

而16K的"0x00"是这个:

(include/configs/smdk6410.h)#define CONFIG_ENV_SIZE        0x4000


UBOOT-2012-10在OK6410平台的移植(十一)从SD卡启动 movi_boot.zip   






阅读(5) | 评论(0) | 转发(0) |
0

上一篇:UBOOT-2012-10在OK6410平台的移植(十)MLC NAND驱动(硬件8位ECC)

下一篇:UBOOT-2012-10在OK6410平台的移植(十二)移植结束

相关热门文章 给主人留下些什么吧!~~ 评论热议