Uboot UBI 的移植

來源:互聯網
上載者:User

 

作者 :longfeey

http://blog.csdn.net/longfeey/archive/2010/09/15/5887007.aspx

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:0x100000@0x0(u-boot),0x300000@0x120000(kernel),0x7b00000@0x420000(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:0x100000@0x0(u-boot),0x300000@0x120000(kernel),0x7b00000@0x420000(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 啟動。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.