Uboot UBI 的移植

转载地址:http://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 启动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值