====== ファームウェアの構造 ====== ===== ストレージ(Flash Memory)の構成 ===== ==== Nand Flashメモリの構成 ==== MA-E3xxシリーズには、256MiBのNAND Flashが搭載されています。\\ 構成は、下表のようになっています。 |< 40em 5em 5em 6em 20em >| ^ デバイス ^ サイズ ^ 名前 ^ 備考 | | mtd0 | 255MiB|UBI |UBI(([[http://www.linux-mtd.infradead.org/doc/ubi.html|UBI - Unsorted Block Images]]))| | mtd1 | 1MiB|OOPS |OOPSメッセージ保存用| ^ 以下、UBI領域内のボリューム |||| | mtd2 | 4158KiB|kernel.0|カーネル [0]| | mtd3 | 4158KiB|kernel.1|カーネル [1]| | mtd4 | 2142KiB|initramfs.0|initramfs [0]| | mtd5 | 2142KiB|initramfs.1|initramfs [1]| | mtd6 | 2142KiB|kmod.0|カーネルモジュール [0]| | mtd7 | 2142KiB|kmod.1|カーネルモジュール [1]| | mtd8 | 82026KiB|rootfs.0|root filesystem [0]| | mtd9 | 82026KiB|rootfs.1|root filesystem [1]| | mtd10 | 25704KiB|opt|Java SE Embedded 8| | mtd11 | 44856KiB|overlay|変更分保存用領域(オーバーレイ領域)| \\ ==== SPI Flashメモリの構成 ==== ブートデバイス用として、2MiBのSPI Flashメモリが搭載されています。\\ 構成は、下表のようになっています。 |< 40em 5em 5em 6em 20em >| ^ デバイス ^ サイズ ^ 名前 ^ 備考 | | mtd12 | 128KiB|MLO|bootloader 1段目| | mtd13 | 512KiB|barebox.bin|bootloader 本体| | mtd14 | 128KiB|barebox.env|bootloader 保存領域| | mtd15 | 128KiB|dtb.0|DeviceTree blob [0]| | mtd16 | 128KiB|dtb.1|DeviceTree blob [1]| | mtd17 | 128KiB|hist_firmup|ファームウェア更新履歴| | mtd18 | 896KiB|hist_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 の {{:mae3xx_ope:firmware_structure:rootoverlay.sh|scripts/init-bottom/__rootoverlay}} スクリプトにより、下記シーケンスでmount処理が行われます。\\ - (initramfs initスクリプトにより、UBIの "rootfs.x" 領域が ${rootmnt} へ mount される。) - /overlay, /ro, /rw, /rw.tmpfs のディレクトリを作成 (mkdir) - tmpfs を /rw.tmpfs へ mount - tmpfs を /rw へ mount - UBI の "kmod.x" 領域を /rw.tmpfs へコピーし、${rootmnt}/lib/modules へ mount - UBI の "opt" 領域を /rw.tmpfs へコピーし、${rootmnt}/usr/lib/jvm へ mount - ${rootmnt} を /ro へ 移動 (mount --move オプションにより) - /ro と /rw を **aufs**(([[http://aufs.sourceforge.net/]]))(([[http://ja.wikipedia.org/wiki/Aufs]])) でまとめて /overlay へ mount - /rw.tmpfs に、var/log ディレクトリを作成 (syslog領域用) - /rw.tmpfs/var/log と/ro/var/log を **aufs** でまとめて /overlay/var/log へ mount - /rw/lib/modules と /ro/lib/modules を **aufs** でまとめて /overlay/lib/modules へ mount - /rw/usr/lib/jvm と /ro/usr/lib/jvm を **aufs** でまとめて /overlay/usr/lib/jvm へ mount - /ro を /overlay/ro へ 移動 (mount --move オプションにより) - /rw を /overlay/rw へ 移動 (mount --move オプションにより) - /rw.tmpfs を /overlay/rw.tmfs へ 移動 (mount --move オプションにより) - /overlay を ${rootmnt} へ 移動 (mount --move オプションにより) その後、init スクリプトにより ${rootmnt} => / へと rootfs の switch が行われ、/sbin/init が起動されます。\\