一、MTD框架
MTD设备通常可分为四层
上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。
![](https://i-blog.csdnimg.cn/blog_migrate/bf3de6826382642ebc96d59961167ca9.png)
二、MTD分区表的实现
在开机过程从console经常可以看到类似以下信息,
0x000000000000-0x000000100000 : "Bootloade"
0x000000100000-0x000002000000 : "Kernel"
0x000002000000-0x000003000000 : "User"
0x000003000000-0x000008000000 : "File System"
这就是MTD给我们一种最直观的表示形式,给我们展示了内存中各模块的分区结构,但这些分区是怎样实现的呢?分区表的实现方式有几种,下面进行分别说明:
注:分区表实现的前提是MTD设备驱动已经成功了,否则连驱动都没成功就无分区可说了。分区只是内核的概念!
1、内核中添加
在内核中添加这是一个比较经常使用的方法,随便一本驱动移植的书上应该都有,主要就是在平台设备里面添加mtd_partition(目录例:arch\arm\mach-s3c24xx\mach-mini2440.c),添加类似下面的信息
struct mtd_partition s3c_nand_part[] = {
{
.name = "Bootloader",
.offset = 0,
.size = (1 * SZ_1M),
.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "Kernel",
.offset = (1 * SZ_1M),
.size = (31 * SZ_1M) ,
.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "User",
.offset = (32 * SZ_1M),
.size = (16 * SZ_1M) ,
},
{
.name = "File System",
.offset = (48 * SZ_1M),
.size = (96 * SZ_1M),
}
};
static struct s3c_nand_set s3c_nand_sets[] = {
[0] = {
.name = "nand",
.nr_chips = 1,
.nr_partitions =