====== Java 領域を(大幅に)縮小して root filesystem 領域を広げる ======
[[mae3xx_ope:firmware_structure:start]] にあるとおり、Java(JRE) の領域がかなりの割合を占めています。\\
Java を使用しない場合、この領域を root filesystem に割り当てて、より多くのパッケージや自作のアプリケーションを入れたいということもあると思います。
カスタム bootloader に入れ替えることで、256MiB NAND Flash を搭載した標準品でも、root filesystem のサイズを 80MiB -> **95MiB** に拡大することができます。
\\
===== 更新の手順 =====
==== ファームウェアを入れた SDcard の準備 ====
NAND Flash のパーティション構造を変更する途中で全消去するため、bootloader からファームウェアを書き込む必要があります。\\
そのため、SDcard にファームウェアを書き込んで実機に挿入しておきます。
※ ファームウェアに含まれている barebox.bin.img は除去しておきます。
\\
==== bootloader の更新 ====
bootloader のみ更新するファームウェアを適用します。
^ File ^ Stat ^ SHA1SUM ^ Note |
|{{ :mae3xx_tips:java-less-environment:java-less-bootloader.img |}}|2019/07/05 17:31 245.5 KB|134e350fdb66425c576eef12fc7a4c438163b9a6| |
\\
root@plum:~# firmup /tmp/java-less-bootloader.img
### MA-E3xx series firmware update utility (for 2-area firmware).
Updating Area: 1 ...
* Bootloader file found.
writing "barebox.bin" image to /dev/mtd13 ... succeeded.
erasing bootloader environments (/dev/mtd14)... done.
Succeeded.
\\
==== 再起動 ====
bootloader で作業する必要があるので、コンソールを接続した上で再起動します。
root@plum:~# reboot
Session terminated, terminating shell... ...terminated.
\\
==== bootloader で止める ====
bootloader でキー入力待ちの間にキーを押して自動起動を停止させます。
...
registering /dev/ubi0
registering kernel.0 as /dev/ubi0.kernel.0
registering kernel.1 as /dev/ubi0.kernel.1
registering initramfs.0 as /dev/ubi0.initramfs.0
registering initramfs.1 as /dev/ubi0.initramfs.1
registering kmod.0 as /dev/ubi0.kmod.0
registering kmod.1 as /dev/ubi0.kmod.1
registering rootfs.0 as /dev/ubi0.rootfs.0
registering rootfs.1 as /dev/ubi0.rootfs.1
registering opt as /dev/ubi0.opt
registering overlay as /dev/ubi0.overlay
UBI: attached mtd0 (name "nand0.UBI", size 255 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 512
UBI: VID header offset: 512 (aligned 512), data offset: 2048
UBI: good PEBs: 2040, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 10, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 2/0, WL threshold: 4096, image sequence number: 9489
UBI: available PEBs: 0, total reserved PEBs: 2040, PEBs reserved for bad PEB handling: 40
Hit m for menu or any other key to stop autoboot: 1
type exit to get to the menu
barebox@plum-ma[1GiB]:/
\\
==== bootloader での作業 ====
=== UBI のデタッチ ===
barebox@plum-ma[1GiB]:/ ubidetach ubi0
UBI: detaching mtd0 from ubi0
removing ubi0
UBI: mtd0 is detached from ubi0
\\
=== NAND 消去 ===
barebox@plum-ma[1GiB]:/ erase /dev/nand0
\\
=== UBI フォーマット ===
barebox@plum-ma[1GiB]:/ ubivol_init 2
ubiformat: /dev/nand0.UBI (nand), size 267386880 bytes (255 MiB), 2040 eraseblocks of 131072 bytes (128
KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 2039 -- 100 % complete
ubiformat: 2040 eraseblocks are supposedly empty
ubiformat: formatting eraseblock 2039 -- 100 % complete
UBI: attaching mtd0 to ubi0
UBI: scanning is finished
registering /dev/ubi0
UBI: attached mtd0 (name "nand0.UBI", size 255 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 129024 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 512
UBI: VID header offset: 512 (aligned 512), data offset: 2048
UBI: good PEBs: 2040, bad PEBs: 0, corrupted PEBs: 0
UBI: user volume: 0, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 3639
UBI: available PEBs: 1996, total reserved PEBs: 44, PEBs reserved for bad PEB handling: 40
registering kernel.0 as /dev/ubi0.kernel.0
registering kernel.1 as /dev/ubi0.kernel.1
registering initramfs.0 as /dev/ubi0.initramfs.0
registering initramfs.1 as /dev/ubi0.initramfs.1
registering kmod.0 as /dev/ubi0.kmod.0
registering kmod.1 as /dev/ubi0.kmod.1
registering rootfs.0 as /dev/ubi0.rootfs.0
registering rootfs.1 as /dev/ubi0.rootfs.1
registering opt as /dev/ubi0.opt
registering overlay as /dev/ubi0.overlay
\\
領域のサイズを確認してみます。
barebox@plum-ma[1GiB]:/ ls -l /dev/ubi0*
c--------- 0 /dev/ubi0
crw------- 2193408 /dev/ubi0.initramfs.0
crw------- 2193408 /dev/ubi0.initramfs.1
crw------- 4257792 /dev/ubi0.kernel.0
crw------- 4257792 /dev/ubi0.kernel.1
crw------- 2193408 /dev/ubi0.kmod.0
crw------- 2193408 /dev/ubi0.kmod.1
crw------- 387072 /dev/ubi0.opt
crw------- 40384512 /dev/ubi0.overlay
crw------- 99735552 /dev/ubi0.rootfs.0
crw------- 99735552 /dev/ubi0.rootfs.1
barebox@plum-ma[1GiB]:/
rootfs.* のサイズが 99735552bytes (95.1MiB) になっていることが確認できました。
\\
=== ファームウェアの書込 ===
SDcard に入れておいたファームウェアを書き込みます。
barebox@plum-ma[1GiB]:/ firmup /boot/mae3xx_bionic_v4_2_1rc1.img 0
### MA-E3xx series firmware updater
firm area to write: 0
firm_dual: 1
* image file for "kernel" found.
copying kernel image to /dev/ubi0.kernel.0 ...
* image file for "kmod" found.
copying kmod image to /dev/ubi0.kmod.0 ...
* image file for "initramfs" found.
copying initramfs image to /dev/ubi0.initramfs.0 ...
* image file for "rootfs" found.
copying rootfs image to /dev/ubi0.rootfs.0 ...
* image file for "dtb" found.
erasing /dev/spi.dtb.0 ...
copying dtb(DeviceTree) image to /dev/spi.dtb.0 ...
update finished.
barebox@plum-ma[1GiB]:/
※ **opt** のファイルが入っていてもスキップするようになっています。
\\
==== 起動 ====
新しいファームウェアで起動するためにリセットします。
barebox@plum-ma[1GiB]:/ reset
barebox 2013.12.0-gc51c3f4 #3 Tue Mar 11 18:24:49 JST 2014
Board: plum-ma[1GiB]
m25p80 m25p800: m25p16 (2048 Kbytes)
booting from SPI
barebox 2013.12.0-00438-gb5233a419 #882 Fri Jun 28 14:28:42 JST 2019
Board: plum-ma[1GiB]
nand: ONFI param page 0 valid
...
\\
Linux から UBI のサイズを確認すると、root filesystem 領域が大きくなっていることが確認できます。
user1@plum:~$ cat /proc/mtd
dev: size erasesize name
mtd0: 0ff00000 00020000 "UBI"
mtd1: 00100000 00020000 "OOPS"
mtd2: 0040f800 0001f800 "kernel.0"
mtd3: 0040f800 0001f800 "kernel.1"
mtd4: 00217800 0001f800 "initramfs.0"
mtd5: 00217800 0001f800 "initramfs.1"
mtd6: 00217800 0001f800 "kmod.0"
mtd7: 00217800 0001f800 "kmod.1"
mtd8: 05f1d800 0001f800 "rootfs.0" <---
mtd9: 05f1d800 0001f800 "rootfs.1" <---
mtd10: 0005e800 0001f800 "opt"
mtd11: 02683800 0001f800 "overlay"
mtd12: 00020000 00010000 "MLO"
mtd13: 00080000 00010000 "barebox.bin"
mtd14: 00020000 00010000 "barebox.env"
mtd15: 00020000 00010000 "dtb.0"
mtd16: 00020000 00010000 "dtb.1"
mtd17: 00020000 00010000 "hist_firmup"
mtd18: 000e0000 00010000 "hist_boot"
\\