実機は FlashMemory に圧縮ファイルシステム(squashfs)イメージとして組み込んでいますので、FlashMemory に書き込むイメージファイルを作成します。
まず、squashfs を作成するツールをインストールします。
bionic64:~# apt install squashfs-tools パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下の追加パッケージがインストールされます: liblzo2-2 以下のパッケージが新たにインストールされます: liblzo2-2 squashfs-tools アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。 159 kB のアーカイブを取得する必要があります。 この操作後に追加で 497 kB のディスク容量が消費されます。 続行しますか? [Y/n]
MA-E3xx は、FlashMemory の opt 領域を /usr/lib/jvm に mount します。
/usr/lib/jvm/java-11-openjdk-armhf
と見せるために、ディレクトリを作成し、必要なファイルをコピーします。
bionic64:~/src$ mkdir -p jvm/java-11-openjdk-armhf bionic64:~/src$ cp -a jre11_compact3/* jvm/java-11-openjdk-armhf/ bionic64:~/src$ sudo chown -R root:root jvm/ bionic64:~/src$ ls -l jvm/java-11-openjdk-armhf/ 合計 20 drwxrwxr-x 2 root root 4096 12月 26 15:05 bin drwxrwxr-x 3 root root 4096 12月 26 15:05 conf drwxrwxr-x 18 root root 4096 12月 26 15:05 legal drwxrwxr-x 5 root root 4096 12月 26 15:05 lib -rw-rw-r-- 1 root root 256 12月 26 15:05 release
squashfs image を作成し、tar でアーカイブします。
bionic64:~/src$ sudo mksquashfs jvm compact3.img -comp xz -b 1048576 Parallel mksquashfs: Using 16 processors Creating 4.0 filesystem on compact3.img, block size 1048576. [=======================================================================================-] 101/101 100% Exportable Squashfs 4.0 filesystem, xz compressed, data block size 1048576 compressed data, compressed metadata, compressed fragments, compressed xattrs duplicates are removed Filesystem size 12205.65 Kbytes (11.92 Mbytes) 26.11% of uncompressed filesystem size (46742.90 Kbytes) Inode table size 1050 bytes (1.03 Kbytes) 19.62% of uncompressed inode table size (5351 bytes) Directory table size 1214 bytes (1.19 Kbytes) 39.65% of uncompressed directory table size (3062 bytes) Number of duplicate files found 2 Number of inodes 132 Number of files 58 Number of fragments 2 Number of symbolic links 45 Number of device nodes 0 Number of fifo nodes 0 Number of socket nodes 0 Number of directories 29 Number of ids (unique uids + gids) 1 Number of uids 1 root (0) Number of gids 1 root (0)
bionic64:~/src$ sudo tar cf opt.img compact3.img bionic64:~/src$ ls -l opt.img -rw-r--r-- 1 root root 12503040 12月 27 09:50 opt.img
生成されたイメージファイル opt.img を実機に転送し、opt の領域に書き込みます。
root@plum:/tmp# ls -l opt.img -rw-r--r-- 1 user1 user1 12503040 Dec 27 09:52 opt.img
root@plum:/tmp# 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: 0501a800 0001f800 "rootfs.0" mtd9: 0501a800 0001f800 "rootfs.1" mtd10: 0191a000 0001f800 "opt" <------- ここ mtd11: 02bce000 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"
root@plum:/tmp# cp opt.img /dev/mtdblock10
更新するため、再起動します。
実機で動作確認を行います。
Java SE Embedded 8
を標準搭載していたため、まずは java
コマンドのシンボリックリンクを変更する必要があります。
root@plum:~# update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-armhf/bin/java 100 update-alternatives: warning: /etc/alternatives/java is dangling; it will be updated with best choice update-alternatives: using /usr/lib/jvm/java-11-openjdk-armhf/bin/java to provide /usr/bin/java (java) in auto mode
実行してバージョンを見てみます。
user1@plum:~$ java -version openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment (build 11.0.1+13-centurysys-1-MAE3xx) OpenJDK Server VM (build 11.0.1+13-centurysys-1-MAE3xx, mixed mode)
単純なプログラム(フィボナッチ数計算) をコンパイルし、実機に転送して実行してみます。
public class fib { static int fib(int n) { if (n < 2) return n; return fib(n - 2) + fib(n - 1); } public static void main(String[] args) { System.out.println(fib(38)); } }
ryzen7:~$ javac fib.java ryzen7:~$ ls -ln fib.class -rw-rw-r-- 1 1000 1000 485 12月 26 16:03 fib.class
生成された class ファイルを転送して実行します。
user1@plum:~$ ls -l fib.class -rw-rw-r-- 1 user1 user1 485 Dec 27 09:56 fib.class user1@plum:~$ time java fib 39088169 real 0m2.289s user 0m2.160s sys 0m0.113s
動作しました!。