uboot分区和内核MTD分区

本文介绍了如何在U-Boot和内核中保持MTD分区信息的一致性,确保系统的正常引导。内容包括U-Boot环境变量的设置,如`bootargs`和`mtdparts`,以及内核源代码中`mtd_partition`结构体的配置。正确配置的关键在于确保bootloader、params、kernel和root分区在两个阶段都匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 如果你是通过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,





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值