主题 : tiny6410的内核分区表与启动信息 疑惑中 复制链接 | 浏览器收藏 | 打印
2440
级别: 侠客
UID: 34266
精华: 0
发帖: 68
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 136 分
注册时间: 2010-12-13
最后登录: 2015-07-01
楼主  发表于: 2012-12-08 21:23

 tiny6410的内核分区表与启动信息 疑惑中

tiny6410使用2GB MLC的flash,内核启动信息:
NAND device: Manufacturer ID: 0xec, Chip ID: 0xd5 (Samsung NAND 2GiB 3,3V 8-bit)
Creating 3 MTD partitions on "NAND 2GiB 3,3V 8-bit":
0x000000000000-0x000000400000 : "Bootloader"
0x000000400000-0x000000c00000 : "Kernel"
0x000000c00000-0x000080000000 : "File System"

tiny6410使用1GB SLC的flash,内核启动信息:
NAND device: Manufacturer ID: 0xec, Chip ID: 0xd3 (Samsung NAND 1GiB 3,3V 8-bit)
Creating 3 MTD partitions on "NAND 1GiB 3,3V 8-bit":
0x000000000000-0x000000080000 : "Bootloader"
0x000000080000-0x000000580000 : "Kernel"
0x000000580000-0x000040000000 : "File System"


在内核中有这样的分区
/* Nand flash */
struct mtd_partition mini6410_nand_part[] = {
    {
        .name        = "Bootloader",
        .offset        = 0,
        .size        = (4 * 128 *SZ_1K),
        .mask_flags    = MTD_CAP_NANDFLASH,
    },
    {
        .name        = "Kernel",
        .offset        = (4 * 128 *SZ_1K),
        .size        = (5*SZ_1M) ,
        .mask_flags    = MTD_CAP_NANDFLASH,
    },
    {
        .name        = "File System",
        .offset        = MTDPART_OFS_APPEND,
        .size        = MTDPART_SIZ_FULL,
    }
};
也就是说SLC 1GB的核心板的启动信息和内核的分区定义一致,MLC 2GB的核心板的启动信息和内核里的的分区定义不一致
我想知道,内核中分区是写死的,不管是MLC 2GB还是SLC 1GB,应该启动信息是一样的都是按照内核分区表来的。为什么MLC 2GB的分区表不一样呢?并且不管我怎么修改内核分区表,MLC 2G核心板的启动信息总是不变。
[ 此帖被shift在2012-12-11 20:34重新编辑 ]
2440
级别: 侠客
UID: 34266
精华: 0
发帖: 68
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 136 分
注册时间: 2010-12-13
最后登录: 2015-07-01
1楼  发表于: 2012-12-10 20:16
有人知道不    
级别: 新手上路
UID: 54598
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2011-09-02
最后登录: 2012-12-11
2楼  发表于: 2012-12-10 22:26
没看明白问的是什么!

我用的是他今年4月份的代码,分区信息是放到驱动文件里面的,
好像是 drivers/mtd/nand 目录下的 s3c6410 的 nand 驱动文件里面的分区信息,
不是开发板目录下面的那个分区信息,
另外建议不要修改他的分区信息!
如果你自定义了分区信息,他所有的烧写启动工具都不能用了,而他的启动代码又是非常.....的不开源的!
2440
级别: 侠客
UID: 34266
精华: 0
发帖: 68
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 136 分
注册时间: 2010-12-13
最后登录: 2015-07-01
3楼  发表于: 2012-12-11 20:39
我用红色又标注了一下,你再看看。
上面那段分区代码是在板子文件mach-mini6410.c里的。按照正常的逻辑,内核就是使用这里的分区定义来识别nand分区的,但是MLC 2GB的核心板却不是这样的。不管我怎么改动分区表,它的分区信息总是不变。
2440
级别: 侠客
UID: 34266
精华: 0
发帖: 68
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 136 分
注册时间: 2010-12-13
最后登录: 2015-07-01
4楼  发表于: 2012-12-16 10:27
nand驱动里有判断,如果是SLC,就使用mach-mini6410.c定义的分区表,如果是MLC,就使用s3_nand.c中定义的。
位于s3c_nand.c的s3c_nand_probe
2440
级别: 侠客
UID: 34266
精华: 0
发帖: 68
金钱: 350 两
威望: 70 点
贡献值: 0 点
综合积分: 136 分
注册时间: 2010-12-13
最后登录: 2015-07-01
5楼  发表于: 2012-12-16 10:28
#ifdef CONFIG_MACH_MINI6410
static struct mtd_partition mini6410_nand_part_mlc[] = {
    {
        .name        = "Bootloader",
        .offset        = 0,
        .size        = (4 * SZ_1M),
        .mask_flags    = MTD_CAP_NANDFLASH,
    },
    {
        .name        = "Kernel",
        .offset        = (4 * SZ_1M),
        .size        = (8 * SZ_1M) ,
        .mask_flags    = MTD_CAP_NANDFLASH,
    },
    {
        .name        = "File System",
        .offset        = MTDPART_OFS_APPEND,
        .size        = MTDPART_SIZ_FULL,
    }
};
#endif