ブログ

Armadillo-640(Debian):Armadillo-440のROM書き換えのtftpサーバーとして使う

at_kazutaka.bito
2024年3月4日 13時00分

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!!