Armadillo-640のUSBメモリでのアップデート

お世話になっております。藤本です。

現在、Armadillo-640のソフトの書き込みをmake-install-disk-imageで作成した
microSDカードのインストールディスクを使って行っていますが、
それをmircoSDカードではなく、USBメモリで行いたいと考えています。

Armadillo-X1等では
https://users.atmark-techno.com/blog/615/3357
に記載されている方法でUSBメモリによるアップデートが可能だとのことですので、
Armadillo-640でもできるのではないかと考えました。
そこで、まずはアップデートの手順を行う前に
https://armadillo.atmark-techno.com/howto/linux-kernel-usbboot
のUSBブートの手順をArmadillo-640で行ってみましたが、USBブートはできず、普通にeMMCから起動してしまいます。

Armadillo-640のUSBメモリでのアップデートはどのように行えばできるのでしょうか?
よろしくお願いします。

製品: 
Armadillo-640

佐藤です。

Armadillo-640 で USBメモリからアップデートするための手順です。

1. u-boot のビルド
USB Mass Storate Support を有効にしてビルドします。

[atde]$ make ARCH=arm menuconfig
  -> Device Drivers
    -> USB support
      -> [*] USB Mass Storage support  <-- 有効にします。
 [atde]$ make CROSS_COMPILE=arm-linux-gnueabihf-

u-boot のイメージ書き換えの方法は armadillo-640 ユーザマニュアルを参照ください。
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_manual_ja-1.9.0/ch11.html

2. USB ブートディスクの作成
armadillo-640 ユーザマニュアルにある SDブートディスクの作成例と同じ手順で作成できます。
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_manual_ja-1.9.0/ch14.html#sct.make-bootdisk

3. USBメモリからのブート
Armadillo-640 にUSBメモリを差し込み、保守モードで電源を投入します。
u-boot のコマンドプロンプトで以下のように実行します。

=> setenv setup_usbargs setenv bootargs root=/dev/sda2 rootwait rw \${optargs}\;
=> setenv bootcmd run setup_usbargs\; usb start\; ext4load usb 0:2 ${loadaddr} /boot/uImage\; ext4load usb 0:2 0x83000000 /boot/a640.dtb\; usb stop\; bootm ${loadaddr} - 0x83000000\;
 
=> boot
 
~~起動ログ~~

起動後、df コマンドの実行結果で USBメモリからブートされていることを確認できます。

[armadillo]# df
Filesystem     1K-blocks   Used Available Use% Mounted on
~省略~
/dev/sda2       15350664 885428  13665748   7% / <- ここが /dev/sda2 となる
~省略~

ここまでで、Armadillo-640 を USBメモリからブートすることができます。

4. USBメモリからのアップデート
基本的には、
https://users.atmark-techno.com/blog/615/3357
こちらの記事と同様の手順でできますが、記事内で紹介されている install.sh は、今回添付したものを参考にしてみてください。
また、ブート時に install.sh を実行するようにするためには、Armadillo-640 では systemd が利用できます。
systemd に関しましては以下を参照ください。
https://users.atmark-techno.com/blog/6938/2865

ファイル名 ファイルの説明
install.sh USBメモリからアップデートするときに実行するスクリプトの例。

佐藤様

藤本です。

USBメモリからのアップデート手順を教えてくださいましてありがとうございました。
また試してみて疑問点等あればお聞きするかもしれませんが、よろしくお願いします。

佐藤様

藤本です。

この件に関しての記事を
https://armadillo.atmark-techno.com/howto/usb-update-image-a640
でまとめてくださっているようですが、この中のinstall.shの例が少し間違っていると思います。
KernelとDTBのコピー先は
/mnt/uImage、/mnt/a640.dtb
ではなく、
/mnt/boot/uImage、/mnt/boot/a640.dtb
ではないでしょうか?

佐藤です。

申し訳ありません。ご指摘の通りです。
記事の方修正いたします。
ありがとうございました。