目次

実機への組み込み

ツールの導入

実機は 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] 


イメージファイルの作成

squashfs image 用ディレクトリ作成

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


opt 用イメージファイルの作成

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

動作しました!。