下面以ar9344 16M flash为例子:
uboot启动时传递给内核的参数为:
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART)
其中我们要关注的项为:
mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART)
升级完后查看分区:
[email protected]:/# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "u-boot" // 256k(u-boot)
mtd1: 00010000 00010000 "u-boot-env" // 64k (u-boot-env)
mtd2: 00630000 00010000 "rootfs" // 14528k (rootfs)
mtd3: 00400000 00010000 "rootfs_data"
mtd4: 00160000 00010000 "kernel" // 1408k (uImage)
mtd5: 00010000 00010000 "nvram" // 64k (mib0)
mtd6: 00010000 00010000 "art" // 64k (art)
当我们将所有的数据加起来时,发现大小已经超过了8M的容量。
所以肯定有些部分是相互包含在一起的。
借鉴恩山帖子http://www.right.com.cn/Forum/thread-171173-1-1.html 里面的介绍:
openwrt的分区结构是分层的,列出的各个区并不是依次排列在flash上。第一层包括 mtd1-u-boot, mtd2-firmware, mtd3-nvram, mtd4-art。 其中uboot的第二层包括u-boot 和 u-boot-env 。 而firmware的第二层又包括kernel 和rootfs。 rootfs的第三层又包括 rootfs和rootfs_data两个分区, 其中原始的rootfs的文件系统是只读文件系统SquashFS, 而rootfs_data是可写文件系统JFFS2。在第二层和第三层之间,OpenWRT采用了Overlay技术的overlayfs文件系统,将原始rootfs和rootfs_data合并成一个逻辑分区,挂载在/,对于系统可见的就这个逻辑的分区。而真实的原始rootfs是挂载在/rom下,rootfs_data挂载在/overlay下,可以通过df命令查看。
[email protected]:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 4096 276 3820 7% /
/dev/root 2304 2304 0 100% /rom
tmpfs 63160 56 63104 0% /tmp
/dev/mtdblock3 4096 276 3820 7% /overlay
overlayfs:/overlay 4096 276 3820 7% /
tmpfs 512 0 512 0% /dev
所以,对于8M falsh的布局依次列出来的话,应该是 uboot , firmware, nvram, art.
大小为: 256+64+14528+1408+64+64= 16384k (16M)