开发板通过u-boot和linux内核修改nand flash分区

一个MTD分区折磨了我好几天,现在搞明白了,跟大家分享以下。

目的:我的开发板默认的MTDkernel分区是2M,我现在需要将分区扩为4M。

硬件平台:JZ2440(芯片:S3C2440)

1.在UBOOT下的uboot/include/config/100ask24x0.h 中(开发板不一样,配置文件也不一样)修改,根据自己的情况修改大小。

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
                            "128k(params)," \
                            "4m(kernel)," \
                            "-(rootfs)"

然后编译 make 

2 然后在linux下:linux-3.4.2\arch\arm\mach-s3c24xx\Common-smdk.c 修改成与u-boot中相对应的参数。

static struct mtd_partition smdk_default_nand_part[] = {
	[0] = {
		.name	= "bootloader",
		.size	= SZ_256K,
		.offset	= 0,
	},
	[1] = {
		.name	= "params",
		.offset = MTDPART_OFS_APPEND,
		.size	= SZ_128K,
	},
	[2] = {
		.name	= "kernel",
		.offset = MTDPART_OFS_APPEND,
		.size	= SZ_4M,
	},
	[3] = {
		.name	= "rootfs",
		.offset	= MTDPART_OFS_APPEND,
		.size	= MTDPART_SIZ_FULL,
	}
};

static struct s3c2410_nand_set smdk_nand_sets[] = {
	[0] = {
		.name		= "NAND",
		.nr_chips	= 1,
		.nr_partitions	= ARRAY_SIZE(smdk_default_nand_part),
		.partitions	= smdk_default_nand_part,
	},
};

然后编译生成uImage:make uImage

3 把u-boot.bin下载到开发板后,设置参数,执行如下命令:mtdparts default

4 在UBOOT下,UBOOT优先使用params分区中的参数,再次使用100ask24x0.h中的,所以想要使用刚才所修改的分区,还需要把params的分区中的参数擦除掉:nand erase params,让uBOOT使用100ask24x0.h中我们所修改的参数。

5 在UBOOT下使用mtd命令查看分区情况。然后在UBOOT下使用print命令,打印环境变量,如果环境变量中的参数跟mtd下的参数对应,说明分区完全成功。

使用mtd命令查看分区情况:

使用print命令查看环境变量情况:

6 分区完全成功后,就需要重新下载文件系统和Linux内核镜像文件。

                                                       新手望轻喷!!!

猜你喜欢

转载自blog.csdn.net/qq_30592303/article/details/84777282
今日推荐