如何在U-boot中添加mtdparts支持及Linux的分区设置

1、U-boot中添加mtdparts支持2、Linux系统的分区设置随着嵌入式系统的不断发展,开启MTD分区功能2. CONFIG_CMD_MTDPARTS:

随着嵌入式系统的不断发展,越来越多的嵌入式设备采用了闪存作为存储介质。而对于闪存的分区,一般采用MTD(Memory Technology Device)驱动进行管理。

本文将介绍如何在U-boot中添加mtdparts支持以及Linux系统中对闪存进行分区设置。

U-boot中添加mtdparts支持

首先我们需要了解什么是mtdparts。它是MTD驱动提供的一个功能,可以将一个物理设备划分成多个逻辑设备,并为每个逻辑设备指定相应的大小和名称。

在U-boot中,如果要使用mtdparts功能,则需要配置以下三个参数:

1. CONFIG_MTD_PARTITIONS:开启MTD分区功能

2. CONFIG_CMD_MTDPARTS:开启MTDPARTS命令

3. CONFIG_SYS_MAX_FLASH_SECT:定义最大闪存扇区数

下面以imx6ull为例,介绍具体操作步骤:

1. 修改u-boot/include/configs/imx6ull.h文件,在文件末尾加上以下代码:

#define CONFIG_MTD_PARTITIONS

#define CONFIG_CMD_MTDPARTS

#define CONFIG_SYS_MAX_FLASH_SECT 512

2. 修改u-boot/board/freescale/imx6ull/mx6ull_evk.c文件,在init_misc函数里添加以下代码:

mtdparts=mtdparts=spi0.0:256k(bootloader),768k(kernel),6M(rootfs),-(data)

3. 编译U-boot并烧写到设备中。

4. 在U-boot命令行中输入以下命令,查看分区情况:

如何在U-boot中添加mtdparts支持及Linux的分区设置

=> mtdparts

可以看到,我们成功地将闪存划分成了bootloader、kernel、rootfs和data四个逻辑设备,并为每个设备指定了相应的大小和名称。

Linux系统的分区设置

在Linux系统中,一般采用ubi(Unsorted Block Images)驱动对闪存进行管理。而对于ubi驱动来说,需要先将MTD分区转换成UBI卷才能使用。

1. 在uboot环境下执行nand scrub all命令擦除nandflash所有数据;

2. 在uboot环境下执行nand write.trimffs ubi.img 0x800000 ubi.img 是制作好的ubi镜像文件,0x800000 是固件存放地址;

3. 在uboot环境下执行setenv bootargs ‘console=ttymxc0,115200 earlyprintk rootfstype=ubifs root=/dev/ubi0_1’ 设置内核启动参数;

4. 启动linux后,在控制台上输入以下命令进行UBI卷创建和挂载:

# modprobe ubi

# ubiattach /dev/ubi_ctrl -m 1

# ubimkvol /dev/ubi0 -N rootfs -s 100MiB

5. 在控制台上输入以下命令进行挂载:

# mount -t ubifs /dev/ubi0_0 /mnt

6. 至此,我们成功地将闪存划分成了rootfs和data两个逻辑设备,并为rootfs设备创建了一个UBI卷并将其挂载到/mnt目录下。

本文介绍了如何在U-boot中添加mtdparts支持以及Linux系统中对闪存进行分区设置。通过本文的学习,相信读者对于MTD和UBI驱动的使用有了更深入的理解。

同时,也要注意到,在实际应用中还需根据具体情况进行调整和优化。希望读者能够在实践中不断积累经验,并进一步完善自己的技术体系。