一个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内核镜像文件。
新手望轻喷!!!