OpenWrt开发板使用16M的flash作为存储设备,系统将flash分为4个主要分区,分别是 u-boot、 u-boot-env、 factory、 firmware.
u-boot:存放系统引导uboot固件
u-boot-env:存放uboot中设置的环境变量
factory:存放有线网络、wifi的mac地址和wifi射频校准数据.
firmware:细分kernel和rootfs两个分区,kernel即linux系统,由于OpenWrt是使用buildroot构建的根文件系统,这里rootfs就是buildroot文件系统.
其中rootfs划分了一部分分区作为rootfs_data,在rootfs中包含了集成的常用的软件以及配置文件等,划分的rootfs_data可以用来存放用户数据.
[ 0.680405] Creating 4 MTD partitions on "spi0.0":[ 0.689942] 0x000000000000-0x000000030000 : "u-boot"[ 0.702696] 0x000000030000-0x000000040000 : "u-boot-env"[ 0.714684] 0x000000040000-0x000000050000 : "factory"[ 0.727803] 0x000000050000-0x000001000000 : "firmware"[ 0.739537] 2 uimage-fw partitions found on MTD device firmware[ 0.751364] Creating 2 MTD partitions on "firmware":[ 0.761215] 0x000000000000-0x00000021f407 : "kernel"[ 0.771050] mtd: partition "kernel" doesn't end on an erase/write block -- force read-only[ 0.790570] 0x00000021f407-0x000000fb0000 : "rootfs"[ 0.800484] mtd: partition "rootfs" doesn't start on an erase/write block boundary -- force read-only[ 0.819961] mtd: device 5 (rootfs) set to be root filesystem[ 0.832363] 1 squashfs-split partitions found on MTD device rootfs[ 0.844708] 0x0000007b0000-0x000000fb0000 : "rootfs_data"
root@Togetek:/# cat /proc/mtddev: size erasesize namemtd0: 00030000 00010000 "u-boot"mtd1: 00010000 00010000 "u-boot-env"mtd2: 00010000 00010000 "factory"mtd3: 00fb0000 00010000 "firmware"mtd4: 0021f407 00010000 "kernel"mtd5: 00d90bf9 00010000 "rootfs"mtd6: 00800000 00010000 "rootfs_data"
手机使用久了会变卡,通过恢复出厂设置的方式可以让手机系统像新的一样.OpenWrt中也是用了这种overlay机制,在忘记路由器的密码时候使用卡针按下reset按钮数秒后,路由器恢复出厂设置,可以重新设置路由器.
前面说了在rootfs分区中会划分一部分作为rootfs_data,这部分保存用户自己安装的软件以及文件,另外的一部分作为rootfs_rom.
在使用sysupgrade命令升级的时候将固件拷贝到/tmp目录,以使用的OpenWrt开发板为例配置16M flash,64M
内存.系统实际可用的flash容量比如为5M,而固件的大小为8M,flash是放不下固件.从64M的内存中分配部分挂载到/tmp目录,来存放固件,这样就可以升级了.
root@Togetek:/# df -hFilesystem Size Used Available Use% Mounted on/dev/root 5.8M 5.8M 0 100% /romtmpfs 28.1M 228.0K 27.8M 1% /tmp/dev/mtdblock6 8.0M 372.0K 7.6M 5% /overlayoverlayfs:/overlay 8.0M 372.0K 7.6M 5% /tmpfs 512.0K 0 512.0K 0% /dev/dev/sda1 14.8G 40.8M 14.8G 0% /mnt/sda1
root@Togetek:/# lsbin etc lib overlay rom sbin tmp vardev init mnt proc root sys usr www