1. 程式人生 > >Uboot UBI 的移植

Uboot UBI 的移植

轉載地址:https://blog.csdn.net/longfeey/article/details/5887007

作者 :longfeey
1.1         Uboot UBI 的移植
關於 uboot 的 UBI 的移植幾乎沒有說明介紹,移植首先要保證你的 flash 驅動能夠跑起來,我是在 nand flash  上跑的 UBI 。剛開始的時候我也沒有什麼頭緒,只能夠從 uboot 的 readme 開始查詢一些蛛絲馬跡。

- MTD Support (mtdparts command, UBI support)

              CONFIG_MTD_DEVICE

              Adds the MTD device infrastructure from the Linux kernel.

              Needed for mtdparts command support.

              CONFIG_MTD_PARTITIONS

              Adds the MTD partitioning infrastructure from the Linux

              kernel. Needed for UBI support.

因此 , 要 UBI 支援首先得要 MTD 支援,因此在配置檔案中要新增以上兩項的定義。

要移植 UBI 還要新增 :

#define CONFIG_CMD_UBIFS           

#define CONFIG_CMD_UBI         

總的關於 UBI 的部分是以下幾個巨集 :

#define CONFIG_CMD_UBI

#define CONFIG_CMD_UBIFS

#define CONFIG_CMD_MTDPARTS

#define CONFIG_MTD_DEVICE

#define CONFIG_MTD_PARTITIONS

#define CONFIG_RBTREE

#define CONFIG_LZO  

同時要給 NAND 建立個預設的分割槽 , 方便以後操作。分割槽如下:

#define MTDIDS_DEFAULT "nand0=nand0"

#define MTDPARTS_DEFAULT "mtdparts=nand0:[email protected](u-boot),[email protected](kernel),[email protected](rootfs),-(reserved)"

#define MTD_ACTIVE_PART "nand0,2"

以上的配置都在 uboot_imx/include/configs/mx51_vdphone.h 檔案中進行配置。

需要注意的是增加 UBI 的支援之後 uboot 會增大到 300 多 KB ,在 NAND 中啟動,需要修改 以下檔案 uboot-imx/cpu/arm_cortexa8/mx51/mxc_nand_load.S  

      add r6, r0, #0x1E00

      ldr r5, =_end              /* Try get right image size */

      add r5, r2, #0x00060000 /* Fixme to get actual image size */ 

這裡使用 0x60000 ( 384K )大小,已經足夠,如果實際有變化,可以進行相應調節。 如果 uboot 傳給 Copy_Good_Blk  拷貝 的 uboot 的 大小 小於 uboot 的長度的話, uboot 跑不起來,移植的時候被這個問題 必須注意 。

這個時候就可以 make  了, 執行以下命令:

make clean

make mx51_vdphone_config

make all

如果 正常 的話會編譯出 u-boot.bin 在根目錄下。

1.2        u-boot 下 ubi 的使用
1.2.1         配置 u-boot nand 分割槽
通過 mtdpart 命令配置 u-boot 下的 nand 分割槽,本專案已經在配置標頭檔案裡面設定了預設 nand 分割槽,

#define MTDPARTS_DEFAULT "mtdparts=nand0:[email protected](u-boot),[email protected](kernel),[email protected](rootfs),-(reserved)"

如果需要修改,可以通過修改預設分割槽列表,也可以通過命令 mtdpart 進行重新分割槽。這裡使用預設分割槽,通過以下命令使預設分割槽生效:

       mtdpart default       // 設定預設分割槽

       saveevn             // 儲存分割槽資訊

 

 

1.2.2         nand u-boot 燒寫
通過以上的配置編譯,如果成功生成 u-boot.bin ,那就可以通過 SD 卡啟動,直接燒寫 u-boot.bin 到 nand flash 了。操作步驟如下:

1)          下載 u-boot.bin 到記憶體

tftp 0x90800000 /tftpboot/mx51/u-boot.bin

2)          擦除 u-boot 分割槽

nand erase u-boot

3)          燒寫 u-boot 到 nand flash 分割槽

nand write 0x90800000 u-boot 0x60000

使用分割槽名字

1.2.3         核心的燒寫
  核心的燒寫和平常燒寫方式一樣,只需用 nand 命令寫入 nand 即可 , 操作步驟如下:

1)        擦除 kernel 分割槽

nand erase kernel

2)        下載 kernel 到記憶體

tftp 0x90800000 /tftpboot/mx51/uImage   將核心通過 tftp 下載到記憶體中

3)        燒寫 kernel 到 nand kernel 分割槽

nand write 0x90800000 kernel 0x300000 

1.2.4         UBI 檔案系統的燒寫
本專案使用的檔案系統將根檔案系統和 system 檔案系統整合在一起。所以,只需要燒寫整合後的檔案系統即可。如果要使用 ubifs 檔案系統作為根檔案系統,在燒寫之前必須通過 mkfs.ubifs 工具將做好的檔案系統製作映象檔案。 mkfs.ubifs 工具是通過編譯 mtd-utils 工具下的 mkfs.ubifs 目錄即可生成的 PC 端 UBIFS 檔案系統映象製作工具。 操作步驟如下:

1)        製作根檔案系統

mkfs.ubifs -r root/ -m 2048 -e 129024 -c 2364 -o root-fs.img

root 目錄為整合 android root 和 system 檔案系統後的目錄,應當能夠通過 NFS 系統的

2)        擦除 root 分割槽

 nand erase root

3)        對 root 分割槽進行 ubi 格式化

 ubi part root

4)        將檔案系統下載到記憶體

 tftp 0x90800000 ubifs.img

5)        將檔案系統燒寫到 rootfs  中

ubi write 0x90800000 rootfs 0x339600

1.2.5           設定啟動引數
設定 bootargs :

setenv bootargs ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs console=ttymxc0,115200 wvga calibration init=/init rw

啟動撥碼開關 5,8 位置設定為 ON ,上電重新啟動,即可從 Nand flash 啟動。
--------------------- 
作者:longfeey 
來源:CSDN 
原文:https://blog.csdn.net/longfeey/article/details/5887007 
版權宣告:本文為博主原創文章,轉載請附上博文連結!