Uboot UBI 的移植

来源:互联网 发布:p2p网络摄像机管理软件 编辑:程序博客网 时间:2024/05/18 20:45

作者 :longfeey

1.1        Uboot UBI的移植

关于ubootUBI的移植几乎没有说明介绍,移植首先要保证你的flash驱动能够跑起来,我是在nand flash 上跑的UBI。刚开始的时候我也没有什么头绪,只能够从ubootreadme开始查找一些蛛丝马迹。

- 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会增大到300KB,在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 */ 

这里使用0x60000384K)大小,已经足够,如果实际有变化,可以进行相应调节。如果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.binnand flash了。操作步骤如下:

1)         下载u-boot.bin 到内存

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

2)         擦除u-boot分区

nand erase u-boot

3)         烧写u-bootnand 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目录即可生成的PCUBIFS文件系统镜像制作工具。操作步骤如下:

1)       制作根文件系统

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

root目录为整合android rootsystem文件系统后的目录,应当能够通过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 启动。

原创粉丝点击