UBOOT-2012-10在OK6410平臺的移植(十一)從SD卡啓動

首先必須弄清楚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
       bl movi_bl2_copy
       b after_copy 
after_copy:
       ldr pc,_TEXT_PHY_BASE
   #endif
      ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
      bic sp, 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


zip.gif movi_boot.zip   






<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
閱讀(5) | 評論(0) | 轉發(0) |
給主人留下些什麼吧!~~
評論熱議
發佈了28 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章