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: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 启动。
--------------------- 
作者:longfeey 
来源:CSDN 
原文:https://blog.csdn.net/longfeey/article/details/5887007 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/kunkliu/article/details/83685128