如果你是通过uboot的内核命令行给MTD层传递MTD分区信息,这种情况下,内核读取到的分区信息始终和u-boot中的保持一致(推荐的做法)
如果你是把分区信息写在内核源代码MTD里定义好的方法,那最好保证它和u-boot中的保持一致,即同步修改uboot及内核的相关部分。
例如:以下是uboot环境变量和分区情况
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),4m(kernel),-(root)
要想使内核和根文件系统能够正确引导:内核中分区应该是
static struct mtd_partition smdk_default_nand_part[] = {
[0] = { .name = "bootloader", .offset = 0, .size = SZ_256K, }, [1] = { .name = "params", .offset = SZ_256K, .size = SZ_128K, }, [2] = { .name = "kernel", .offset = SZ_256K + SZ_128K, .size = SZ_4M, }, [3] = { .name = "root", .offset = SZ_256K + SZ_128K + SZ_4M, .size = SZ_256M - SZ_256K - SZ_128K - SZ_4M, } };
当然也可以是
static struct mtd_partition smdk_default_nand_part[] = {
[0] = { .name = "bootloader", .offset = 0, .size = SZ_256K, }, [1] = { .name = "kernel", .offset = SZ_256K + SZ_128K, .size = SZ_4M, }, [2] = { .name = "root", .offset = SZ_256K + SZ_128K + SZ_4M, .size = SZ_256M - SZ_256K - SZ_128K - SZ_4M, } };
但这里bootargs中的root应该是/dev/mtdblock2,