Armadillo-IoT G3/G3L(以下Armadilloと表記)で、JP1を設定せずにSDカード内のLinuxカーネルを起動する方法をご紹介します。
概要
2017/11/24現在、Armadilloの製品マニュアル内「SDブートの活用」で紹介されているSDブート実行方法に「JP1をショートに設定する」という操作が記載されています。
これは利用者自身が「Armadilloの外装を取り外し、ジャンパーをJP1に差し込みショートに設定する」という一連の作業をしなければならず、手間が発生しています。
これを回避するため、Armadilloで採用しているブートローダー「U-Boot」の機能である「起動時のスクリプトファイル(boot.scr)読み込み」を利用します。
今回は例として、「ArmadilloのBoot時、SDカードの第一パーティション内に【sdboot_enable】というファイルが存在した場合、SDカードに保存されているLinuxカーネルを起動する」という処理を記載します。
また今回の方法ではマニュアルのSDブートとは違い、SPIフラッシュの「U-Boot」からSDカード内に保存されたLinuxカーネルを起動します。
U-bootで用いるスクリプトファイル(boot.scr)について
U-Bootスクリプト(boot.scr)については別ブログ
「Armadillo-X1, Armadillo-IoT G3/G3L: U-Bootブートスクリプト(boot.scr)の使い方」
にて紹介されています。
詳しい情報はこちらを参照してください。
U-Bootコマンドのテキストファイル(boot.txt)作成
ATDE上でテキストファイル"boot.txt"を作成します。
atde:~$ vi boot.txt
"boot.txt"は以下のように記載します。
setenv sdboot_mmcdev 0
setenv sdboot_part 1
setenv get_sdboot_state fatload mmc ${sdboot_mmcdev}:${sdboot_part} ${loadaddr} sdboot_enable
if run get_sdboot_state; then
echo try SD boot...
setenv mmcdev 0
setenv mmcpart 1
setenv mmcroot /dev/mmcblk0p2 rootwait rw
fi
if mmc rescan; then
if run loadimage; then
run mmcboot;
fi
fi
上記スクリプト内で、「SDカードデバイスの有無を確認し、存在する場合に指定変数を変更する」という処理を行っています。
各変数の詳細を以下の表に記載します。
変数名 | 変数詳細 | パラメータ例と詳細 | パラメータの使用場所 |
---|---|---|---|
mmcdev | デバイスコードナンバー | 0 : SDカード 1 : eMMC | U-Boot |
mmcpart | パーティション番号 | 1 : パーティション1 | U-Boot |
mmcroot | カーネルパラメータ ルートファイルシステムの場所 | dev/mmcblk0p2 : SDカードデバイス | Linuxカーネル |
boot.scrの生成
ATDE上でboot.scrを生成します。
atde:~$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -d boot.txt boot.scr
生成した"boot.scr"をArmadilloに転送して下さい。
boot.scrの配置
ATDEからArmadilloに転送した"boot.scr"を、eMMCの第1パーティション(/dev/mmcblk2p1)にコピーします。
armadillo:~# mount /dev/mmcblk2p1 /mnt/
armadillo:~# cp boot.scr /mnt/
armadillo:~# sync
armadillo:~# umount /mnt/
SDブートの準備
マニュアル内の項目「SD ブートの活用」を参考にATDEでブートディスクを作成します。
ATDEでのブートディスク作成後、SDカードの第一パーティションに「sdboot_enable」という空ファイルを作成します。
SDカードのデバイス名は適宜変化するため、確認の上指定してください。(以下例ではsdb)
atde:~$ sudo mount /dev/sdb1 /mnt
atde:~$ touch /mnt/sdboot_enable
atde:~$ sync
atde:~$ sudo umount /mnt
作成後、ブートディスクをArmadilloのSDスロットに接続します。
Armadilloの再起動と確認
Armadilloを再起動して、SDカードのLinuxカーネルが起動する事を確認します。
armadillo:~# reboot
dfコマンドを用いてファイルシステム情報を呼び出し、「Filesystem 」欄の「/dev/mmcblk〇p2」の〇部分の数値を確認します。
以下のように「/dev/mmcblk0p2」であればSDカードのLinuxカーネル起動成功です。
armadillo:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p2 1738128 659996 971792 41% /
udev 10240 0 10240 0% /dev
tmpfs 100272 4840 95432 5% /run
tmpfs 250672 0 250672 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 250672 0 250672 0% /sys/fs/cgroup
/dev/mtdblock1 128 128 0 100% /opt/license
tmpfs 50136 0 50136 0% /run/user/0
eMMCのLinuxカーネル起動に戻したい場合は一度Armadilloの電源を落とし、ブートディスクを取り出してから電源を入れなおすことで戻ります。
以下のように「/dev/mmcblk2p2」であればeMMCのカーネル起動に戻っています。
armadillo:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk2p2 3457408 745560 2516504 23% /
udev 10240 0 10240 0% /dev
tmpfs 100272 4828 95444 5% /run
tmpfs 250672 0 250672 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 250672 0 250672 0% /sys/fs/cgroup
/dev/mtdblock1 128 128 0 100% /opt/license
tmpfs 50136 0 50136 0% /run/user/0
注意点
IoTゲートウェイ管理クラウド「node-eye」に必要なnode-eyeパッケージをArmadilloにインストールすると、node-eye専用のboot.scrに上書されますのでご注意ください。
また、独自作成した"boot.scr"を使用したい場合、IoTゲートウェイ管理クラウド「node-eye」を利用することが出来ませんのでご注意ください。