当前位置: 技术问答>linux和unix
nand flash 分区问题??
来源: 互联网 发布时间:2016-05-27
本文导语: 我在进行分区时有几件事不明白 1.使用uBOOt时,是不是uBOOt本身没有分区信息,但是可以通过传递参数进行分区??? 2.内核中的分区信息:移植linux2.6.14.1时需要在arch/arm/mach-s3c2410/devs.c中添加如下分区信息: static s...
我在进行分区时有几件事不明白
1.使用uBOOt时,是不是uBOOt本身没有分区信息,但是可以通过传递参数进行分区???
2.内核中的分区信息:移植linux2.6.14.1时需要在arch/arm/mach-s3c2410/devs.c中添加如下分区信息:
static struct mtd_partition partition_info[] ={
{
name: "loader",
size: 0x00020000,
offset: 0,
}, {
name: "param",
size: 0x00010000,
offset: 0x00020000,
}, {
name: "kernel",
size: 0x001c0000,
offset: 0x00030000,
}, {
name: "root",
size: 0x00200000,
offset: 0x00200000,
mask_flags: MTD_WRITEABLE,
}, {
name: "user",
size: 0x03af8000,
offset: 0x00400000,
}
};
这与在MTD中分区信息如果你还有一块NAND区,那么你可能有如下的分区表(au1550nd.c):
const static struct mtd_partition partition_info[] = {
{
.name = "NAND FS 0",
.offset = 0,
.size = 8*1024*1024
},
{
.name = "NAND FS 1",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL
}
};
有什么关联?????
1.使用uBOOt时,是不是uBOOt本身没有分区信息,但是可以通过传递参数进行分区???
2.内核中的分区信息:移植linux2.6.14.1时需要在arch/arm/mach-s3c2410/devs.c中添加如下分区信息:
static struct mtd_partition partition_info[] ={
{
name: "loader",
size: 0x00020000,
offset: 0,
}, {
name: "param",
size: 0x00010000,
offset: 0x00020000,
}, {
name: "kernel",
size: 0x001c0000,
offset: 0x00030000,
}, {
name: "root",
size: 0x00200000,
offset: 0x00200000,
mask_flags: MTD_WRITEABLE,
}, {
name: "user",
size: 0x03af8000,
offset: 0x00400000,
}
};
这与在MTD中分区信息如果你还有一块NAND区,那么你可能有如下的分区表(au1550nd.c):
const static struct mtd_partition partition_info[] = {
{
.name = "NAND FS 0",
.offset = 0,
.size = 8*1024*1024
},
{
.name = "NAND FS 1",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL
}
};
有什么关联?????
|
1.使用uBOOt时,是不是uBOOt本身没有分区信息,但是可以通过传递参数进行分区???
//不太明白,但是uboot确实没有分区,而uboot占用的flash是固定的block,参数只传给内核
2.内核中的分区信息:移植linux2.6.14.1时需要在arch/arm/mach-s3c2410/devs.c
//只看这个源码mtd分区是把这个整个nand flash分成几大块,而后面的是把两个nand flash分区合在一起.
3.传给kernel启动参数(root=/dev/mtdblock2)时,kernel如何知道mtdblock2是什么设备?(文件系统还没有加载呢)
//kernel会直接找/dev/目录下的mtdblock2入口,因为加载了mtd成功,这个设备节点是存在的;
如果该位置没有文件系统那就oops了,也就是不能启动文件系统
//不太明白,但是uboot确实没有分区,而uboot占用的flash是固定的block,参数只传给内核
2.内核中的分区信息:移植linux2.6.14.1时需要在arch/arm/mach-s3c2410/devs.c
//只看这个源码mtd分区是把这个整个nand flash分成几大块,而后面的是把两个nand flash分区合在一起.
3.传给kernel启动参数(root=/dev/mtdblock2)时,kernel如何知道mtdblock2是什么设备?(文件系统还没有加载呢)
//kernel会直接找/dev/目录下的mtdblock2入口,因为加载了mtd成功,这个设备节点是存在的;
如果该位置没有文件系统那就oops了,也就是不能启动文件系统
|
每一个MTD设备都可以有自己的分区表。devs.c中定义的是norflash的分区表,后一个则是nand设备的分区表。
|
内核启动时会先把这个字符串保存在一个临时的位置,在加载文件系统的驱动后再分析这个字符串。
|
你可以在devs.c里面找partition_info,这个变量必然是用来初始化一个描述设备的结构体的成员的,比如*_flash_data,而这个*_flash_data又是从属于一个platform_device,最后把它向系统注册。