LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3805|回复: 1

mtd分区的问题

[复制链接]
发表于 2006-7-11 17:04:02 | 显示全部楼层 |阅读模式
先介绍一下我的板子,是基于S3C2410的开发板,1M的nor flash, 64M的nand flash。

这块板子更新系统的方法是
1. 使用NFS启动系统
2. 使用bk命令对flash进行分区,并烧写bootloader和kernel
3. 重启后使用bs命令对flash进行格式化,并安装根文件系统

bk的脚本如下:
/bin/imagewrite /dev/mtd/0 -part 0 192k 1216k
/bin/imagewrite /dev/mtd/0 vivi:0
/bin/imagewrite /dev/mtd/0 zImage:192k

bs的脚本如下:
/bin/mkyaffs /dev/mtdblock/0
/bin/mount /dev/mtdblock/0 /mnt
cd /mnt
/bin/tar xzvf /fa-yaffs-v5.tgz

bk的脚本好理解,对flash进行分区,分成了3个区
1. 一个192k的存放vivi的分区
2. 1M存放kernel
3. 剩下的flash一个区

这是在2.4内核/drivers/mtd/nand/smc2410.c里面对mtd分区的描述:
static struct mtd_partition smc_partitions[] = {
       {
               name:           "kernel",
               size:           0x000c0000,
               offset:         0x0,
               mask_flags:     MTD_WRITEABLE,  /*force read-only */
       }, {
               name:           "root",
               size:           0x00a00000,
               offset:         MTDPART_OFS_APPEND,
               mask_flags:     MTD_WRITEABLE,  /* force read-only */
       }
};

看到这里问题就出现了!
在这个文件中mtd被分为了两个区,一个是kernel一个是root,这两个分区的大小和地址都和前面bk脚本的不一样,而且更新系统执行到bs脚本时,他的第一条命令是格式化flash,这样不就把vivi和kernel删除了吗?
但是按照这种步骤走下来系统是能正确启动的,进入linux后,执行

[root@fa /]# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 04000000 00004000 "Samsung K9D1208V0M" (mtd设备只有一个)

[root@fa /]# cat /proc/partitions
major minor #blocks name

(分区信息为空)

看到这些我就晕了,想不出怎么解释这种分区情况,难道是系统把nor flash看成是字符设备存储器,nand flash是块设备存储器,在bk脚本的第一句分区信息是给1M的nor flash分区,然后把vivi和kernel烧录到上面,然后再执行bs脚本时格式化快设备存储器,即格式化nand flash是自然就不会删除vivi和kernel。但这样解释有几点还是搞不明白
1. 如何在1M的nor flash上进行这样的分区 0 192k 1216k,已经超出了存储范围
2. smc2410.c中tmd分区结构体中的分区划分不管大小还是地址都和上边的猜测不符
3. 为什么/proc/mtd分区设备只有一个
4. 为什么分区信息/proc/partitions为空

我是初学,说得不对大家可八要笑话我。

希望大虾能给我解除这个困惑!!谢谢!!
发表于 2010-7-10 10:56:57 | 显示全部楼层
内核配置的时候没用固定的mtd分区表, 起始位置和大小是从loader传进来的..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表