| partition | offset | size | size (KiB) | ||
|---|---|---|---|---|---|
| u-boot (mtd0) | 0x0 | 0x20000 | 128 | ||
| firmware (mtd5) | kernel (mtd1) | 0x20000 | 0x3D0000 0x7D0000 | 3904 8000 | |
| rootfs (mtd2) | [squashfs] /rom | ||||
rootfs_data (mtd3) /overlay | |||||
| art (mtd4) | 0x3F0000 0x7F0000 | 0x10000 | 64 | ||
- u-boot 固定 128 KiB,其中位址 0x1FC00 為 MAC Address、0x1FE00 為 PIN
- art 固定佔用最後的 64 KiB
- u-boot 跟 art 之間的區域就是 firmware,其 image 由 OpenWrt 的工具程式 mktplinkfw 產生,共由 header、kernel、rootfs 三個部份組成。
- header 固定為 512 (0x200) bytes,紀錄許多關於韌體資訊的欄位,mtd 分割併入 kernel。
- kernel 使用剩下的就是 rootfs 空間。kernel 可使用 gzip 或 lzma 壓縮,後者使用的空間較小,讓 rootfs 有更多空間,尤其是使用 4MiB Flash 的時候。
- 可能是 u-boot 不支援 lzma 壓縮的關係,lzma 壓縮的 kernel 其實會多一層 lzma-loader 載入,然後才能載入真正的 kernel,但整體來說使用的空間較小。例如我剛編譯的 kernel (vmlinux) 是 2,817,980 bytes,gzip 壓縮後是 1,282,951 bytes,lzma 壓縮後是 928,491 bytes。lzma-loader 4,630 bytes,但實際佔用 7,680 bytes 空間,加上 lzma kernel 為 93671,比 gzip 少了 338 KiB。
- rootfs 使用 squashfs 唯讀檔案系統,使用剩下的空間又自動分出為 rootfs_data 分割作為可讀寫 overlay。
沒有留言:
張貼留言