ユーザ用ツール

サイト用ツール


spreadrouter_ope:firmware_structure:start

ファームウェアの構造

ストレージ(Flash Memory)の構成

Nand Flashメモリの構成

SpreadRouterシリーズには、256MiBのNAND Flashが搭載されています。
構成は、下表のようになっています。

v1.00 以降

デバイス サイズ 名前 備考
mtd0 165MiBUBI0 UBI R/O
mtd1 30MiBUBI1 UBI R/W
mtd2 60MiBSNAPSHOT
mtd3 1MiBOOPS OOPSメッセージ保存用
以下、UBI領域内のボリューム
mtd4 4158KiBkernel.0カーネル [0]
mtd5 4158KiBkernel.1カーネル [1]
mtd6 2142KiBinitramfs.0initramfs [0]
mtd7 2142KiBinitramfs.1initramfs [1]
mtd8 2142KiBkmod.0カーネルモジュール [0]
mtd9 2142KiBkmod.1カーネルモジュール [1]
mtd10 65646KiBrootfs.0root filesystem [0]
mtd11 65646KiBrootfs.1root filesystem [1]
mtd12 12348KiBopt
mtd13 24444KiBoverlay変更分保存用領域(オーバーレイ領域)


SPI Flashメモリの構成

ブートデバイス用として、2MiBのSPI Flashメモリが搭載されています。
構成は、下表のようになっています。

デバイス サイズ 名前 備考
mtd12(14) 128KiBMLObootloader 1段目
mtd13(15) 512KiBbarebox.binbootloader 本体
mtd14(16) 128KiBbarebox.envbootloader 保存領域
mtd15(17) 128KiBdtb.0DeviceTree blob [0]
mtd16(18) 128KiBdtb.1DeviceTree blob [1]
mtd17(19) 128KiBhist\_firmupファームウェア更新履歴
mtd18(20) 896KiBhist\_boot起動履歴

カーネル、initramfs、カーネルモジュール、root filesystem、DeviceTree blob に “[0]”/“[1]” をつけているとおり、それぞれを2セット保持し、
ファームウェア更新などで万が一起動しなくなった場合にもう片方のセットで起動することができるようになっています。

ファイルシステムへのマウント

ディレクトリ構造は下記のようになっています。

  / (aufs) --+
             |
             +- ro/ (squashfs) -+- lib/modules (squashfs)
             |                  |
             |                  +- usr/lib/jvm (squashfs)
             |
             +- rw/ (tmpfs/ext4)
             |
             +- rw.tmpfs/ (tmpfs)

initramfs の scripts/init-bottom/__rootoverlay スクリプトにより、下記シーケンスでmount処理が行われます。

  1. (initramfs initスクリプトにより、UBIの “rootfs.x” 領域が ${rootmnt} へ mount される。)
  2. /overlay, /ro, /rw, /rw.tmpfs のディレクトリを作成 (mkdir)
  3. tmpfs を /rw.tmpfs へ mount
  4. tmpfs を /rw へ mount
  5. UBI の “kmod.x” 領域を /rw.tmpfs へコピーし、${rootmnt}/lib/modules へ mount
  6. UBI の “opt” 領域を /rw.tmpfs へコピーし、${rootmnt}/usr/lib/jvm へ mount
  7. ${rootmnt} を /ro へ 移動 (mount -\-move オプションにより)
  8. /ro と /rw を aufs1)2) でまとめて /overlay へ mount
  9. /rw.tmpfs に、var/log ディレクトリを作成 (syslog領域用)
  10. /rw.tmpfs/var/log と/ro/var/log を aufs でまとめて /overlay/var/log へ mount
  11. /rw/lib/modules と /ro/lib/modules を aufs でまとめて /overlay/lib/modules へ mount
  12. /rw/usr/lib/jvm と /ro/usr/lib/jvm を aufs でまとめて /overlay/usr/lib/jvm へ mount
  13. /ro を /overlay/ro へ 移動 (mount -\-move オプションにより)
  14. /rw を /overlay/rw へ 移動 (mount -\-move オプションにより)
  15. /rw.tmpfs を /overlay/rw.tmfs へ 移動 (mount -\-move オプションにより)
  16. /overlay を ${rootmnt} へ 移動 (mount -\-move オプションにより)

その後、init スクリプトにより ${rootmnt} ⇒ / へと rootfs の switch が行われ、/sbin/init が起動されます。

spreadrouter_ope/firmware_structure/start.txt · 最終更新: 2023/09/19 17:08 by 127.0.0.1

ページ用ツール