路由器系统的内存储布局
- 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进行压缩(推荐使用这种系统)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构