bon出错的完全明白了,感谢感谢!!
看来在supervivi源码不公开的情况下如果要修改nand分区要几个工作,
要求: vivi的MTD分区与linux的MTD分区要完全对应(是不是有这个要求?)
分区要求:
name : offset size flag
------------------------------------------------------------
vivi : 0x00000000 0x00040000 0
param : 0x00040000 0x00020000 0
kernel : 0x00060000 0x00200000 0
root : 0x00260000 03FDA 0000 0
usr : 0x4000 0000 0x4000 0000 0 为了方便测试后64mb空间是否能正常读写,故usr从0x4000 0000开始
1.
我用的光盘带的supervivi-128烧写后执行part show显示如下
//------------------
Supervivi> part show
Number of partitions: 4
name : offset size flag
------------------------------------------------------------
vivi : 0x00000000 0x00040000 0
param : 0x00040000 0x00020000 0
kernel : 0x00060000 0x00200000 0
root : 0x00260000 0x3fd80000 0
Supervivi>
//-------------
由0x3fd80000 +0x260000=0x3FFE 0000可见,supervivi默认识别为64MB(0x4000 0000)(最后一小段跑哪了?)
那我们先:
Supervivi> part del root
Supervivi> part add root 0x00260000 0x3fda0000 0
root: offset = 0x00260000, size = 0x3fda0000, flag = 0
Supervivi> part add usr 0x40000000 0x80000000 0
usr: offset = 0x40000000, size = 0x80000000, flag = 0
Supervivi> part show
Number of partitions: 5
name : offset size flag
------------------------------------------------------------
vivi : 0x00000000 0x00040000 0
param : 0x00040000 0x00020000 0
kernel : 0x00060000 0x00200000 0
root : 0x00260000 0x3fda0000 0
usr : 0x40000000 0x80000000 0 (可以完整分配到地址,而不像supervivi默认的那样最后少一小段)
Supervivi>
完成supervivi下分区
2. linux下分区
首先是friendly源码:
static struct mtd_partition friendly_arm_default_nand_part[] = {
[0] = {
.name = "supervivi",
.size = 0x00060000,
.offset = 0,
},
[1] = {
.name = "Kernel",
.offset = 0x00060000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00260000,
.size = 1024 * 1024 * 1024, //64U * 1024 * 1024 - 0x00260000,
},
[3] = {
.name = "nand",
.offset = 0x00000000, // 怎么能用0呢??
.size = 1024 * 1024 * 1024, //64U * 1024 * 1024 - 0x00260000,
}
};
然后是楼主所显示的信息:
[root@FriendlyARM /]# cat /proc/mtd
dev: size erasesize name (附带一问:ersesize是什么东西)
mtd0: 00060000 00020000 "supervivi"
mtd1: 00200000 00020000 "Kernel"
mtd2: 07da0000 00020000 "root"
mtd3: 08000000 00020000 "nand"
[root@FriendlyARM /]#
//-----------------------------
分析:
linux下"supervivi" 大小为0x0006 0000 ,可见supervivi下分的前两区:"vivi"和"param"加起来对应linux下的"supervivi"
"kernel"分区对应,没有问题
"root"大小为 0x07da0000 ,与源码中的1024*1024*1024=0x4000 0000不等,这是为何
//----------------------------------------
分区修改操作:
源码改为:
static struct mtd_partition friendly_arm_default_nand_part[] = {
[0] = {
.name = "supervivi",
.size = 0x00060000,
.offset = 0,
},
[1] = {
.name = "Kernel",
.offset = 0x00060000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00260000,
.size = 0x3FDA 0000,,
},
[3] = {
.name = "usr",
.offset = 0x40000000,
.size = 8000 0000,
};
};
//----------------------------
以上supervivi下的分区已操作,修改过的内核我还没编译,先写下来再验证.
同时在内核编译时开hardECC设置
并在usr分区尝试写数据.
请大家到一起给意见.