ブログ

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

at_kazutaka.bito
2024年7月29日 11時00分

Armadillo-640(Debian):Armadillo-440/840のROM書き換え(※)のtftpサーバーとして使う方法です。
※)
Armadillo-400 シリーズソフトウェアマニュアル:6.4. tftpdl を使用してフラッシュメモリを書き換える
Armadillo-840 製品マニュアル:12.4. TFTPを使用してフラッシュメモリを書き換える

Armadillo-640は、2種類のOS(Debian、Armadillo Base OS)に対応していますが、この手順では、Debianを使用します。

また、本ブログでは、Armadillo-640を使用していますが、
OSがDebianのArmadillo-610/X1/IoT(G3/G3L/A6)では同様の方法でtftpサーバーを動かせます。

以下、Armadillo-640とArmadillo-440/840のコンソールとして、
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-hpa

補足)/srv/tftpは、tftpd-hpaインストール時に生成される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]です。
tftpd-hpaを再起動します。(IPアドレスが設定されている状態で起動する必要があるため)

root@armadillo:~# systemctl restart tftpd-hpa.service

以下、Armadillo-840のROM書き換え例になります。
Armadillo-440の場合は下記を参考ください。
Armadillo-640(Debian):Armadillo-440のROM書き換えのtftpサーバーとして使う
3. Armadillo-440のROM書き換えのtftpサーバーとして使ってみる

3. Armadillo-840のROM書き換えのtftpサーバーとして使ってみる

3-1. Armadillo-640とArmadillo-840を同一ネットワークに接続します

(上記手順2でIPアドレスを固定にした場合は、DHCPサーバーが不要なので、
 Armadillo-640とArmadillo-840をLANケーブルで1対1に接続したり、ハブ経由で接続することも可能です。)

3-2. Armadillo-640の/srv/tftpに、Armadillo-840のROMに書き込むイメージを置きます

ここでは、各イメージのファイル名を下記とします。
 ブートローダー:loader-armadillo840-nor-v3.11.0.bin
 カーネル:linux-a840-v1.22.bin.gz
 ユーザーランド:romfs-a840-v1.15.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  2837651 Oct 11  2019 linux-a840-v1.22.bin.gz
-rwxr-xr-x 1 root root    55488 Mar 30  2018 loader-armadillo840-nor-v3.11.0.bin
-rwxr-xr-x 1 root root 44213724 Oct 11  2019 romfs-a840-v1.15.img.gz

# イメージファイルを/srv/tftpにコピーして、/mntからUSBメモリをアンマウント
root@armadillo:~# cp /mnt/loader-armadillo840-nor-v3.11.0.bin /srv/tftp
root@armadillo:~# cp /mnt/linux-a840-v1.22.bin.gzz /srv/tftp
root@armadillo:~# cp /mnt/romfs-a840-v1.15.img.gz /srv/tftp
root@armadillo:~# umount /mnt

/srv/tftpにあるイメージファイルを確認します。

root@armadillo:~# ls -l /srv/tftp/
total 18064
-rw-r--r-- 1 root root  2837651 Oct 11  2019 linux-a840-v1.22.bin.gz
-rw-r--r-- 1 root root    55488 Mar 30  2018 loader-armadillo840-nor-v3.11.0.bin
-rw-r--r-- 1 root root 44213724 Oct 11  2019 romfs-a840-v1.15.img.gz
3-3. Armadillo-840を保守モードで起動します

Armadillo-840のジャンパーを保守モード(JP1:ショート)、または、 開発用USBシリアル変換アダプタスライドスイッチを外側にした状態で、
電源を投入して保守モード(※)で起動します。
※) Armadillo-840製品マニュアル「表10.4 ブートローダー起動モードスイッチ」

保守モードで起動した状態(ブートローダーのバージョンがv3.11.0の場合)

Hermit-At v3.11.0 (Armadillo-840/nor) compiled at 08:31:32, Mar 30 2018
hermit>

ブートローダの環境変数を初期化します。ブートデバイスをROMにします。

hermit> clearenv
hermit> setbootdevice flash
3-4. Armdillo-840にブートローダーを書き込む

手順3-2でArmadillo-640の/srv/tftpに置いたブートローダーをtftpdlコマンドで書き込みます。
下記例では、
 ブートローダー:loader-armadillo840-nor-v3.11.0.bin
 Armadillo-840のIPアドレス:192.168.10.xx(xxの部分は、他の装置と重ならない値(ここでは、20))
 Armadillo-640のIPアドレス:192.168.10.10
の場合です。

hermit> tftpdl 192.168.10.20 192.168.10.10 --blksize=1024 --bootloader=loader-armadillo840-nor-v3.11.0.bin

ROM書き込み成功時のログは、後述の参考のようにコンソールに表示されます。
続けて、カーネル/ユーザーランドを書き込む場合は、
一度、Armadillo-840の電源を落とし、再度保守モードで起動し、環境変数を初期化(手順3-3参照)します。

3-5. Armdillo-840にカーネル/ユーザーランドを書き込む

手順3-2でArmadillo-640の/srv/tftpに置いたカーネル/ユーザーランドをtftpdlコマンドで書き込みます。

# カーネルの書き込み
hermit> tftpdl 192.168.10.20 192.168.10.10 --blksize=1024 --kernel=linux-a840-v1.22.bin.gz 

# ユーザーランドの書き込み
hermit> tftpdl 192.168.10.20 192.168.10.10 --blksize=1024 --userland=romfs-a840-v1.15.img.gz

ROM書き込み成功時のログは、後述の参考のようにコンソールに表示されます。

以上で、Armadillo-640をtftpサーバーとして、Armadillo-840のROMの書き換えが実施できます。

参考)ROM書き込み成功時のログ
補足)tftpdlコマンド実行後、Armadillo-640がネットワーク再接続を実施することがあり、
「No response from server.」というメッセージがでる場合があります。

ブートローダーの場合

hermit> tftpdl 192.168.10.20 192.168.10.10 --blksize=1024 --bootloader=loader-armadillo840-nor-v3.11.0.bin
initializing net-device...OK

Client: 192.168.10.20
Server: 192.168.10.10
Region(bootloader): loader-armadillo840-nor-v3.11.0.bin

Filename : loader-armadillo840-nor-v3.11.0.bin
......
Filesize : 55488

programing: bootloader
#

completed!!

カーネルの場合

hermit> tftpdl 192.168.10.20 192.168.10.10 --blksize=1024 --kernel=linux-a840-v1.22.bin.gz
initializing net-device...OK

Client: 192.168.10.20
Server: 192.168.10.10
Region(kernel): linux-a840-v1.22.bin.gz

Filename : linux-a840-v1.22.bin.gz
......................................................(略)
Filesize : 2837651

programing: kernel
######################(略)

completed!!

ユーザーランドの場合

hermit> tftpdl 192.168.10.20 192.168.10.10 --blksize=1024 --userland=romfs-a840-v1.15.img.gz
initializing net-device...OK

Client: 192.168.10.20
Server: 192.168.10.10
Region(userland): romfs-a840-v1.15.img.gz

Filename : romfs-a840-v1.15.img.gz
No response from server.
......................................................(略)
Filesize : 44213724

programing: userland
######################################################(略)

completed!!