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
版權宣告:本文為博主原創文章,轉載請附上博文連結!