路由器系统的内存储布局
- FLash存储布局
- RAW FLASH:闪存芯片直接连接到CPU上
- FTL FLASH:闪存芯片通过其它芯片连接到CPU上
- 【】一般嵌入式系统中的芯片都是raw,因为都是直接连接到cpu上
- 【】存储分区由MTD与文件系统来控制,传统用MBR或PBR来控制,嵌入式设备中用linux kernel即内核来控制(有时候单独由bootloader来控制)。
- 例子:TP-LINK WR1043ND的flash布局
-
TP-Link WR1043ND Flash Layout Layer0 m25p80 spi0.0: m25p64 8192KiB Layer1 mtd0 u-boot 128KiB mtd5 firmware 8000KiB mtd4 art 64KiB Layer2 mtd1 kernel 1280KiB mtd2 rootfs 6720KiB mountpoint /
filesystem mini_fo Layer3 mtd3 rootfs_data 5184KiB Size in KiB 128KiB 1280KiB 1536KiB 5184KiB 64KiB Name u-boot kernel rootfs_data art mountpoint none none /rom
/overlay
none filesystem none none SquashFS JFFS2 none -
-
第0层Layer0: 对应Flash芯片,8MiB大小, 焊接在PCB上,连接到CPU(SoC)SoC – 通过SPI (Serial Peripheral Interface Bus)总线.
-
第1层Layer1: 我们把存储空间"分区"为 mtd0 给 bootloader, mtd5 给 firmware/固件使用, 并且, 在这个例子中, mtd4给ART (Atheros Radio Test/Atheros电波测试) - 它包含MAC地址和无线系统的校准信息(EEPROM). 如果该部分的信息丢失或损坏,
ath9k
(无线驱动程序) 就彻底罢工了. -
第2层Layer2: 我们把mtd5 (固件) 进一步分割为 mtd1 (kernel/内核) and mtd2 (rootfs); 在固件的一般处理流程中 (参考obtain.firmware.generate) Kernel 二进制文件 先由LZMA打包, 然后用gzip压缩 之后文件被 直接写入到raw flash (mtd1)中 而不mount到任何文件系统上!
-
第3层Layer3: 我们把rootfs更进一步分割成 mtd3 (rootfs_data) 和剩下的 未命名 部分 - 未来用来容纳SquashFS-分区.
-
- 文件系统:
- mini_fo:迷你散列覆盖文件系统
- SquashFS:压缩过的只读文件系统,一般通过LZMA打包,然后由gzip压缩,直接写入flash,比jffs2小20%~30%,修改的话,要copy一份新的到第二分区,浪费空间。
- JFFS2:可读写的压缩文件格式,带有日志和平均擦写技术,用LZMA进行压缩(推荐使用这种系统)