====== 実機への組み込み ======
===== ツールの導入 =====
実機は 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
動作しました!。
\\