码迷,mamicode.com
首页 > 其他好文 > 详细

OpenWRT新框架的flash layout

时间:2014-07-18 08:31:47      阅读:1178      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   strong   

唔,新框架下,同时支持了一个只读的文件系统(SquashFS)和一个可读写的文件系统(jffs2)。所以,这些是怎么处理的,需要进一步了解。

 

关于flash

在大多数嵌入式系统中,flash是其主要的程序和data的存储空间。因为flash的速度原因,在系统运行时,这些程序和data还要再被搬移到RAM中去,运行时,CPU事实上是从RAM中取程序和data。著名的uboot就是专门负责把操作系统搬移到RAM中去的,至于存储在文件系统中的data和其他程序,则是由操作系统负责去加载。

根据其内部结构不同,flash有两种:NandFlash,NorFlash。以前大家比较倾向于使用NorFlash,因为其没有坏块,所以使用也相对的容易一点,OpenWRT对NorFlash的支持已经很完美。不过,因为大容量的NandFlash价格很有优势,所以,现在许多需要大容量Flash的设备(> 32M Bytes)都选择NandFlash;缺点是,它会有坏块。很遗憾的时,OpenWRT对NandFlash的支持并不好,如果非要使用的话,可以使用UBIFS来支持Nandflash。

然后,根据其连接到CPU的方式不同,我们使用的驱动类型也有不同,主要有:Raw flash和FTL flash。Raw flash是指那些直接连接到soc(CPU)的,可以直接通过地址线寻址就可读出数据的挂载方式。而FTL flash则是通过一块额外的控制器来连接到系统的Flash,比如USB,SSD,MMC, eMMC, SD, CompactFlash等。这个时候,我们需要一个FTL (Flash Translation Layer)来获取flash中的数据。

 

Flash中文件系统的Partitioning

上一段我们提到uboot,kernel,filesystem什么的。这里主要是讲讲OpenWRT中,这些是怎样被组织在flash设备内的。我们可以通过一张图,来这个问题有一个整体的了解。通常情况下,OpenWRT设备中,具体的配置都是大同小异,可以相互参考的:

bubuko.com,布布扣

上面的图中,我们可以看到。flash被分成了5大块,分别存放着不同的信息,他们分别是:u-boot, kernel, SquashFS, JFFS2, art。

从图里面我们可以明显区分的时,这几部分,都是放在不同的mtd块下面,那么,什么是MTD?MTD是media technology device的缩写,从操作系统来看,它是为raw flash设备提供的一个抽象映射,使得内核可以对这些设备进行统一操作。目前知道的是,mtd已经是标准内核的一部分,api在“include/linux/mtd/mtd.h”中可以看到,同时提供character(/dev/mtdXX)和block(/dev/mtdblockXX)两种设备驱动,另外,还有一个用户空间的shell工具mtd(比如,烧写flash:mtd -r write linux.trx linux)。

所以,为了让结构更加的清晰,我们可以分层来考虑整个的存储映射:

1. Layer0:也就是我们的整块Flash,这里是一块8MB的m25Q64,它是通过spi接口与我们的soc相连。

2. Layer1:我们把整个flash分区为三大区,第一个是用来存放uboot的mtd0,第二个是用来存放真个“Firmware”的mtd5,第三个是用来存放Atheros Radio测试数据的mtd4。其中,mtd0中除了存放uboot外,还有一个数据空间,存放有Wi-Fi的MAC和WPS-PIN等信息,如果没有在这里设置MAC,Wi-Fi将无法正常工作;ART测试数据如果不完整,设备也无法正常工作,但是,似乎和具体设备无关,只要是一类设备,该数据是可以通用的。

3. Layer2:我们又把整个mtd5分为mtd1(kernel)和mtd2(rootfs)。kernel被编译出来后,现实经过lazma压缩,得到的文件再经过gzip压缩,然后mtd1放到的就是最终得到的文件了。

4. Layer3:虽然,我们把真个mtd2当做是系统的rootfs,但是,其实它又是被分成两块不同的部分被挂载的。唔,我们可以看出,这里其实是打了个擦边球。首先,SquashFS被放在mtd2开始的地方,所以,在系统启动的时候,SquashFS被当做是rootfs挂载;我们不要忘了,SquashFS是只读文件系统,那么它的大小是固定的,所以,用来放置SquashFS的mtd2上其实还有一块大小固定的空间,然后,这块大小固定的空间被命名为mtd3. mtd3上挂载了jffs2格式的文件包,即上面说的rootfs_data。

 

手上的系统

ok,了解了上面的分布,我们来看看手上系统是怎样进行分区的。首先是查看/proc/mtd:

# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 00020000 00010000 "u-boot"
mtd1: 000fc144 00010000 "kernel"
mtd2: 006d3ebc 00010000 "rootfs"
mtd3: 00140000 00010000 "rootfs_data"
mtd4: 00010000 00010000 "art"
mtd5: 007d0000 00010000 "firmware"

另外,还可以在启动信息中找到如下信息(可以用dmesg来“回放”):

[    0.490000] 5 tp-link partitions found on MTD device spi0.0
[    0.490000] Creating 5 MTD partitions on "spi0.0":
[    0.500000] 0x000000000000-0x000000020000 : "u-boot"
[    0.500000] 0x000000020000-0x00000011c144 : "kernel"
[    0.510000] mtd: partition "kernel" must either start or end on erase block boundary or by
[    0.520000] 0x00000011c144-0x0000007f0000 : "rootfs"
[    0.530000] mtd: partition "rootfs" must either start or end on erase block boundary or by
[    0.540000] mtd: device 2 (rootfs) set to be root filesystem
[    0.540000] 1 squashfs-split partitions found on MTD device rootfs
[    0.550000] 0x0000006b0000-0x0000007f0000 : "rootfs_data"
[    0.560000] 0x0000007f0000-0x000000800000 : "art"
[    0.560000] 0x000000020000-0x0000007f0000 : "firmware"

然后,我们再看看,哪些文件是被放在squashFS的,哪些是被放在jffs2下的:

# cd /
root@Easy-link:/# ls rom
bin      etc      mnt      proc     root     sys      usr      www
dev      lib      overlay  rom      sbin     tmp      var
root@Easy-link:/# ls overlay/
etc   mnt   root
root@Easy-link:/# cd overlay/etc/
root@Easy-link:/overlay/etc# ls
config        ethers        rc.d          uci-defaults
dropbear      init.d        samba

所以,这里,我们能够编辑和修改的目录,只有etc下的几个特定目录(主要是为了系统配置),mnt,以及root。而其他的文件,全部是被编译到SquashFS里面的,在SquashFS被完成后,我们是无法进行修改的。

 

参考:

1. http://wiki.openwrt.org/doc/techref/flash.layout

2. http://www.linux-mtd.infradead.org/doc/general.html

3. http://www.osslab.com.tw/Hardware/Open_Embedded_System/MIPS/Atheros/WR-703N

OpenWRT新框架的flash layout,布布扣,bubuko.com

OpenWRT新框架的flash layout

标签:style   blog   http   color   使用   strong   

原文地址:http://www.cnblogs.com/pied/p/3850721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!