admin管理员组文章数量:1630557
在大多数系统中,闪存不像RAM一样可以直接执行指令,所以闪存中的数据和指令需要拷贝到RAM中执行,比如存放在flash中的kernel需要bootload的帮忙,将kernel拷贝到RAM里面才能运行。
我们常接触的闪存主要有两种:NOR flash 和NAND flash。如果闪存芯片和SOC直接连接并且又linux直接寻址,我们将它称作raw flash; 如果在SOC和flash芯片间有多加一个外部控制芯片,我们称它作“FTL (Flash Translation Layer) flash”。我们大多数嵌入式系统都是用raw flash,很少用SSD和USB这样的FTL flash。
老的router上用nor flash多,但是新的router上很多开始用nand flash和emmc等;一般nor flash有4/8/16/32M,相对nand flash来说存储量较小,价格更贵,但是它的优点是不会坏块, nand flash一般都是32~256M或者更大,但是它容易坏块,openwrt系统中squashFS的一个致命弱点是不能很好的处理坏块问题,一旦坏块就好重新烧写系统了,一个可选择的方式就是使用UBIFS文件系统。当然当前也有另外一种方案,就是使用emmc,坏块问题交由外部处理器完成。
There is a generic problem when running SquashFS on NAND: The issue is that SquashFS has no bad block management at all and requires all blocks on order; but for proper NAND bad block management you also need to be able to skip bad blocks and occasionally relocate blocks (see squashfs and NAND flash). That's why raw SquashFS is a bad idea on NAND (it works if you use a FTL like UBIFS).
如果使用的是raw flash,openwrt将会将这个寻址空间看作MTD,我们可以通过在bootload或者kernel中对这块存储空间进行分区的划分,我们通常描述为"partitionkernel
starts at offsetx
and ends at offsety
". 一般我们都会对每个分区进行命名,方便更好的操作。
一般我们都会对flash进行如下分区的划分,从左到右分别存放bootloader,bootloader相关参数,kernel,文件系统,用户数据等.
下面是一些router的flash划分状况:
layer0 表示这个flash一共有8M
layer1表示这个flash总共划分了4个部分,分别存放uboot, uboot-env, factory参数(MAC,PIN)和FW;命名为MTD0,1,2,3
layer2表示firmware又分成两个部分,分别是kernel和rootfs,命名为MTD4,5
layer3表示rootfs分成两个部分/dev/root和rootfs_data
需要注意的是,mtd3和mtd4的起始位置是一样的,只是大小不一样。openwrt将文件系统分成两类,/dev/root分区使用squash FS,rootfs_data分区使用JFFS2;我们知道squash FS是只读不可写的,但是JFFS2可读可写,所以我们修改系统文件以后,一般保存在rootfs_data分区。
当前系统flash分区的划分信息可以在开机log中找到,也可以在/proc/mtd中查看:
本文标签: 学习笔记flashOpenWRTSystemfile
版权声明:本文标题:Openwrt学习笔记(二)——Flash Layout and file system 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729027706a1183442.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论