Armadillo-640(Debian)をArmadillo-440のROM書き換え(※)のtftpサーバーとして使う方法です。
※)
Armadillo-400 シリーズソフトウェアマニュアル:6.4. tftpdl を使用してフラッシュメモリを書き換える
Armadillo-640は、2種類のOS(Debian、Armadillo Base OS)に対応していますが、この手順では、Debianを使用します。
また、本ブログでは、Armadillo-640を使用していますが、
OSがDebianのArmadillo-610/X1/IoT(G3/G3L/A6)では同様の方法でtfptサーバーを動かせます。
以下、Armadillo-640とArmadillo-440のコンソールとして、
PCのシリアル通信ソフト(※)が起動しているものとして説明します。
※)
TIPS:ArmadilloのコンソールにTera Termを使用
1. tftpサーバーのインストール
Armadillo-640をインターネットに接続可能なネットワークに接続しておきます。
下記コマンドで、tftpdをインストールします。
root@armadillo:~# apt-get update
# apt-get updateでエラーになる場合は、下記のコマンド(--allow-releaseinfo-changeオプションを付与)を実行。
# apt-get --allow-releaseinfo-change update
root@armadillo:~# apt-get -y install tftpd
root@armadillo:~# mkdir -p /srv/tftp
補足)/srv/tftpは、/etc/inetd.confのデフォルトで設定されるtftpサーバーのディレクトリ名です。
2. Armadillo-640のIPアドレス
Armadillo-640はデフォルトではDHCPサーバーからIPアドレスを取得します。
この場合は、下記のコマンドでIPアドレスを確認しておきます。
root@armadillo:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.102 netmask 255.255.255.0 broadcast 192.168.10.255
# 以下、略
上記の例では、IPアドレスは[192.168.10.102]です。
Armadillo-640のIPアドレスを固定にする場合は、下記コマンドで設定します。
root@armadillo:~# ifconfig eth0 192.168.10.10 up
上記の例では、IPアドレスは[192.168.10.10]です。
3. Armadillo-440のROM書き換えのtftpサーバーとして使ってみる
3-1. Armadillo-640とArmadillo-440を同一ネットワークに接続します
(上記手順2でIPアドレスを固定にした場合は、DHCPサーバーが不要なので、
Armadillo-640とArmadillo-440をLANケーブルで1対1に接続したり、ハブ経由で接続することも可能です。)
3-2. Armadillo-640の/srv/tftpに、Armadillo-440のROMに書き込むイメージを置きます
ここでは、各イメージのファイル名を下記とします。
ブートローダー:loader-armadillo4x0-v3.11.0.bin
カーネル:linux-a400-2.08.bin.gz
ユーザーランド:romfs-a440-2.04.img.gz
例:USBメモリの最上位の階層に書き込まれた上記イメージファイルを、Armadillo-640の/srv/tftpに置く場合
イメージファイルが書き込まれたUSBメモリをArmadillo-640に接続します。
下記コマンドで、USBメモリ内のイメージファイルを/srv/tftpにコピーします。
# USBメモリを/mntにマウントして、/mnt内にイメージファイルがあることを確認
root@armadillo:~# mount /dev/sda1 /mnt
root@armadillo:~# ls -l /mnt
(略)
-rwxr-xr-x 1 root root 3144809 Feb 26 23:55 linux-a400-2.08.bin.gz
-rwxr-xr-x 1 root root 52168 Feb 26 23:58 loader-armadillo4x0-v3.11.0.bin
-rwxr-xr-x 1 root root 15294660 Mar 1 2024 romfs-a440-2.04.img.gz
# イメージファイルを/srv/tftpにコピーして、/mntからUSBメモリをアンマウント
root@armadillo:~# cp /mnt/loader-armadillo4x0-v3.11.0.bin /srv/tftp
root@armadillo:~# cp /mnt/linux-a400-2.08.bin.gz /srv/tftp
root@armadillo:~# cp /mnt/romfs-a440-2.04.img.gz /srv/tftp
root@armadillo:~# umount /mnt
/srv/tftpにあるイメージファイルを確認します。
root@armadillo:~# ls -l /srv/tftp/
total 18064
-rwxr-xr-x 1 root root 3144809 Mar 1 14:34 linux-a400-2.08.bin.gz
-rwxr-xr-x 1 root root 52168 Mar 1 14:34 loader-armadillo4x0-v3.11.0.bin
-rwxr-xr-x 1 root root 15294660 Mar 1 14:35 romfs-a440-2.04.img.gz
3-3. Armadillo-440を保守モードで起動します
Armadillo-440のジャンパーを保守モード(JP1:オープン、JP2:ショート)にしておくか、
SW1を押したまま、電源を投入して保守モード(※)で起動します。
※)
Armadillo-400シリーズハードウェアマニュアル:3.8. ブートモード
保守モードで起動した状態(ブートローダーのバージョンがv3.11.0の場合)
Hermit-At v3.11.0 (armadillo4x0) compiled at 08:31:07, Mar 30 2018
hermit>
ブートローダの環境変数を初期化します。ブートデバイスをROMにします。
hermit> clearenv
hermit> setbootdevice flash
3-4. Armdillo-440にブートローダーを書き込む
手順3-2でArmadillo-640の/srv/tftpに置いたブートローダーをtftpdlコマンドで書き込みます。
下記例では、
ブートローダー:loader-armadillo4x0-v3.11.0.bin
Armadillo-440のIPアドレス:192.168.10.xx(xxの部分は、他の装置と重ならない値(ここでは、20))
Armadillo-640のIPアドレス:192.168.10.10
の場合です。
hermit> tftpdl 192.168.10.20 192.168.10.10 --bootloader=loader-armadillo4x0-v3.11.0.bin
ROM書き込み成功時のログは、後述の参考のようにコンソールに表示されます。
続けて、カーネル/ユーザーランドを書き込む場合は、
一度、Armadillo-440の電源を落とし、再度保守モードで起動し、環境変数を初期化(手順3-3参照)します。
※)この電源の再投入は、メモリマップが異なるブートローダーに書き換えた場合を想定してます。
3-5. Armdillo-440にカーネル/ユーザーランドを書き込む
手順3-2でArmadillo-640の/srv/tftpに置いたカーネル/ユーザーランドをtftpdlコマンドで書き込みます。
# カーネルの書き込み
hermit> tftpdl 192.168.10.20 192.168.10.10 --kernel=linux-a400-2.08.bin.gz
# ユーザーランドの書き込み
hermit> tftpdl 192.168.10.20 192.168.10.10 --userland=romfs-a440-2.04.img.gz
ROM書き込み成功時のログは、後述の参考のようにコンソールに表示されます。
以上で、Armadillo-640をtftpサーバーとして、Armadillo-440のROMの書き換えが実施できます。
参考)ROM書き込み成功時のログ
ブートローダーの場合
hermit> tftpdl 192.168.10.20 192.168.10.10 --bootloader=loader-armadillo4x0-v3.11.0.bin
initializing net-device...OK
Client: 192.168.10.20
Server: 192.168.10.10
Region(bootloader): loader-armadillo4x0-v3.11.0.bin
Filename : loader-armadillo4x0-v3.11.0.bin
...........
Filesize : 52168
programing: bootloader
##
completed!!
カーネルの場合
hermit> tftpdl 192.168.10.20 192.168.10.10 --kernel=linux-a400-2.08.bin.gz
initializing net-device...OK
Client: 192.168.10.20
Server: 192.168.10.10
Region(kernel): linux-a400-2.08.bin.gz
Filename : linux-a400-2.08.bin.gz
.......................................................
(略)
Filesize : 3144809
programing: kernel
ユーザーランドの場合
hermit> tftpdl 192.168.10.20 192.168.10.10 --userland=romfs-a440-2.04.img.gz
initializing net-device...OK
Client: 192.168.10.20
Server: 192.168.10.10
Region(userland): romfs-a440-2.04.img.gz
Filename : romfs-a440-2.04.img.gz
.............................................................................
(略)
Filesize : 15294660
programing: userland
#################################
(略)
completed!!