Armadilloフォーラム

USBメモリによるアップデートについて

kyas-t5

2021年8月18日 19時18分

ご担当者様

お世話になります。

USBアップデートについて質問をさせて下さい。
以下のURLの情報は
https://armadillo.atmark-techno.com/blog/615/3357
USBブートをしてその中のinstall.shでkernelやルートファイルを書き換えていますが
製品となるときに基板を箱に入れてしまうため、SDカードが使用できません。
また、書き換えファイルは1つにまとめておきたいので
イメージファイル1つにしたものをUSBメモリを使用して書き換える方法があればご教示頂きたく。

既出の内容でしたら申し訳ありません。

コメント

at_akihito.irie

2021年8月19日 11時50分

入江です。

> また、書き換えファイルは1つにまとめておきたいので
> イメージファイル1つにしたものをUSBメモリを使用して書き換える方法があればご教示頂きたく。

実現のための手段が様々ありますので、最終的に実現したいUSBメモリによる
アップデートの具体的な運用方法について教えていただけますでしょうか。

(例)
- アップデートしたいソフトウェアを含む、ひとつのイメージファイルをUSBメモリにddなどで書き込むことでアップデート用USBが作れる
- 予め作成しておいたアップデート用USBメモリをWindows PCなどに挿し、アップデートしたいソフトウェアがまとまったzipファイルなどを入れることでアップデート用USBが作れる

など

以上、よろしくお願いいたします。

kyas-t5

2021年8月19日 14時11分

入江様

お世話になります。

迅速なご回答ありがとうございます。
行いたいのは、例の上段のUSBメモリにddで書き込んでアップデートを行う方法です。

> 入江です。
>
> > また、書き換えファイルは1つにまとめておきたいので
> > イメージファイル1つにしたものをUSBメモリを使用して書き換える方法があればご教示頂きたく。
>
> 実現のための手段が様々ありますので、最終的に実現したいUSBメモリによる
> アップデートの具体的な運用方法について教えていただけますでしょうか。
>
> (例)
> - アップデートしたいソフトウェアを含む、ひとつのイメージファイルをUSBメモリにddなどで書き込むことでアップデート用USBが作れる
> - 予め作成しておいたアップデート用USBメモリをWindows PCなどに挿し、アップデートしたいソフトウェアがまとまったzipファイルなどを入れることでアップデート用USBが作れる
>
> など
>
> 以上、よろしくお願いいたします。
>

at_akihito.irie

2021年8月23日 17時47分

入江です。

> 行いたいのは、例の上段のUSBメモリにddで書き込んでアップデートを行う方法です。

承知しました。以下の手順で実現できます。

まず、空のイメージファイルを生成します。アップデートしたいソフトウェア
のサイズの合計+1.5GBほどのサイズのイメージを生成すると良いです。

以下の例は約2GB(1MB*2000)の空のイメージファイルを生成しています。

[ATDE]$ sudo dd if=/dev/zero of=update.img bs=1M count=2000
2000+0 レコード入力
2000+0 レコード出力
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 4.18272 s, 501 MB/s
[ATDE]$ ls -lh update.img
-rw-r--r-- 1 root root 2.0G  8月 23 17:29 update.img

次に、生成したイメージファイルをループバックデバイスとして登録します。

[ATDE]$ sudo losetup -P --show -f update.img
/dev/loop0

この時出力された/dev/loopN(Nは0以上の整数)は、update.imgをあたかもUSB
メモリなどのようにブロックデバイスとして使用できるようにしたものです。

以下のブログの手順を/dev/sdaを/dev/loopNに読み換えて実施してください。
update.imgがUSBメモリの代わりになっているので、USBメモリなしでも実施可
能です。
https://armadillo.atmark-techno.com/blog/615/3357

アップデート用イメージファイルが完成したら、以下のコマンドを実行するこ
とでループバックデバイスの登録を解除できます。

[ATDE]$ sudo losetup -d /dev/loopN

こうして完成したupdate.imgをUSBメモリに書き込むことで、アップデート用
USBメモリとして使用することができます。

[ATDE]$ sudo dd if=update.img of=/dev/sda bs=4M conv=fsync

kyas-t5

2021年8月24日 14時54分

入江様

ご返信ありがとうございます。
アドバイス頂いた件ですが
USBメモリにイメージファイルを書き込んでUSBブート後、install.shによる
各u-boot.binやuImage、ルートファイルなどのイメージファイルの書き換えを行う認識の処理ということで宜しいでしょうか?
こちらで試しUSBブートできるところまで確認できました。
ありがとうございます。

可能であれば下記の2点の方法もアドバイスを頂けると助かります。
①SDカードによる書き換えのようにddコマンドでSDカードに書き込んだイメージファイルそのままをmmcblkに書き換え出来るUSBメモリの方法はございますか?
②1つにまとめたイメージファイル(.img)をUSBメモリのinstall.shで操作するフォルダに置き、USBメモリで電源投入後、イメージファイルの中身をmmcに展開する場合、
 ループバックマウントをUSBブートした中で行い、CPなどで個別に展開する認識で宜しいでしょうか?

> 入江です。
>
> > 行いたいのは、例の上段のUSBメモリにddで書き込んでアップデートを行う方法です。
>
> 承知しました。以下の手順で実現できます。
>
> まず、空のイメージファイルを生成します。アップデートしたいソフトウェア
> のサイズの合計+1.5GBほどのサイズのイメージを生成すると良いです。
>
> 以下の例は約2GB(1MB*2000)の空のイメージファイルを生成しています。
>
>

> [ATDE]$ sudo dd if=/dev/zero of=update.img bs=1M count=2000
> 2000+0 レコード入力
> 2000+0 レコード出力
> 2097152000 bytes (2.1 GB, 2.0 GiB) copied, 4.18272 s, 501 MB/s
> [ATDE]$ ls -lh update.img
> -rw-r--r-- 1 root root 2.0G  8月 23 17:29 update.img
> 

>
> 次に、生成したイメージファイルをループバックデバイスとして登録します。
>
>

> [ATDE]$ sudo losetup -P --show -f update.img
> /dev/loop0
> 

>
> この時出力された/dev/loopN(Nは0以上の整数)は、update.imgをあたかもUSB
> メモリなどのようにブロックデバイスとして使用できるようにしたものです。
>
> 以下のブログの手順を/dev/sdaを/dev/loopNに読み換えて実施してください。
> update.imgがUSBメモリの代わりになっているので、USBメモリなしでも実施可
> 能です。
> https://armadillo.atmark-techno.com/blog/615/3357
>
> アップデート用イメージファイルが完成したら、以下のコマンドを実行するこ
> とでループバックデバイスの登録を解除できます。
>
>

> [ATDE]$ sudo losetup -d /dev/loopN
> 

>
> こうして完成したupdate.imgをUSBメモリに書き込むことで、アップデート用
> USBメモリとして使用することができます。
>
>

> [ATDE]$ sudo dd if=update.img of=/dev/sda bs=4M conv=fsync
> 

>
>

at_akihito.irie

2021年8月24日 16時23分

入江です。

> USBメモリにイメージファイルを書き込んでUSBブート後、install.shによる
> 各u-boot.binやuImage、ルートファイルなどのイメージファイルの書き換えを行う認識の処理ということで宜しいでしょうか?

はい。ご認識のとおりです。
USBブートに必要なファイルをひとつのイメージファイル(update.img)にまと
めた以外は、ご参考にされたブログ内の方法と変わりません。

> ②1つにまとめたイメージファイル(.img)をUSBメモリのinstall.shで操作するフォルダに置き、USBメモリで電源投入後、イメージファイルの中身をmmcに展開する場合、
>  ループバックマウントをUSBブートした中で行い、CPなどで個別に展開する認識で宜しいでしょうか?

いいえ。
生成したupdate.img内にinstall.shやusbboot_enable、アップデートしたいソ
フトウェア(Linuxカーネル、ユーザーランドなど)を組み込んでおくことで、

update.imgをUSBメモリにddなどで書き込む

そのUSBメモリを挿した(usbboot_enableを検知できる)Armadillo-X1を起動する

USBメモリ内のカーネルやユーザーランドで起動する

USBメモリ内のinstall.shが実行され、アップデートしたいソフトウェアをeMMCに展開する

といった形での運用ができます。
そのため、

> ①SDカードによる書き換えのようにddコマンドでSDカードに書き込んだイメージファイルそのままをmmcblkに書き換え出来るUSBメモリの方法はございますか?

は、前述の手順を満たせば実現可能です。

ちなみに、update.imgは、先日の私の投稿内容のようにループバックデバイス
に登録した後に、/dev/loopNp1や/dev/loopNp2をmountすることで、中身を
ATDE上でも編集できます。

[ATDE]$ sudo losetup -P --show -f update.img   <- ループバックデバイスとして登録
/dev/loop0
[ATDE]$ sudo mount /dev/loop0p2 /mnt   <- update.imgの第2パーティション(=ルートファイルシステム)をマウント
[ATDE]$ ls /mnt
bin/        dev/        home/       lost+found/ mnt/        proc/       run/        srv/        tmp/        var/        
boot/       etc/        lib/        media/      opt/        root/       sbin/       sys/        usr/
[ATDE]$ sudo cp install.sh /mnt/   <- install.shを配置など自由に編集可能
[ATDE]$ sudo umount /mnt   <- アンマウント
[ATDE]$ sudo losetup -d /dev/loop0   <- ループバックデバイスの登録を解除

kyas-t5

2021年9月3日 20時28分

入江様

お世話になります。

ご助力ありがとうございます。
USBブートし、install.shでインストールすることが出来るようになりました。
手順は同じですがイメージファイルは暗号化してパスワードを設定し1つにまとめたものを
ループバックを使用して展開しmmcblkに書込むようにしました。

アップデートに関連して1点質問したい内容があるのですが
初回の書き込みでSDカードによる書き換えを行い2回目以降のソフト更新はUSBアップデートを実施する予定です。
初回のSDカードによる書き換え時にUSBアップデート用に用意したboot.scrとusbboot_enableを自動的にmmcblk2p1に配置したいのですが
どのようにすべきか手順を教えて頂けないでしょうか?

> 入江です。
>
> > USBメモリにイメージファイルを書き込んでUSBブート後、install.shによる
> > 各u-boot.binやuImage、ルートファイルなどのイメージファイルの書き換えを行う認識の処理ということで宜しいでしょうか?
>
> はい。ご認識のとおりです。
> USBブートに必要なファイルをひとつのイメージファイル(update.img)にまと
> めた以外は、ご参考にされたブログ内の方法と変わりません。
>
> > ②1つにまとめたイメージファイル(.img)をUSBメモリのinstall.shで操作するフォルダに置き、USBメモリで電源投入後、イメージファイルの中身をmmcに展開する場合、
> >  ループバックマウントをUSBブートした中で行い、CPなどで個別に展開する認識で宜しいでしょうか?
>
> いいえ。
> 生成したupdate.img内にinstall.shやusbboot_enable、アップデートしたいソ
> フトウェア(Linuxカーネル、ユーザーランドなど)を組み込んでおくことで、
>
> update.imgをUSBメモリにddなどで書き込む
> ↓
> そのUSBメモリを挿した(usbboot_enableを検知できる)Armadillo-X1を起動する
> ↓
> USBメモリ内のカーネルやユーザーランドで起動する
> ↓
> USBメモリ内のinstall.shが実行され、アップデートしたいソフトウェアをeMMCに展開する
>
> といった形での運用ができます。
> そのため、
>
> > ①SDカードによる書き換えのようにddコマンドでSDカードに書き込んだイメージファイルそのままをmmcblkに書き換え出来るUSBメモリの方法はございますか?
>
> は、前述の手順を満たせば実現可能です。
>
> ちなみに、update.imgは、先日の私の投稿内容のようにループバックデバイス
> に登録した後に、/dev/loopNp1や/dev/loopNp2をmountすることで、中身を
> ATDE上でも編集できます。
>
>

> [ATDE]$ sudo losetup -P --show -f update.img   <- ループバックデバイスとして登録
> /dev/loop0
> [ATDE]$ sudo mount /dev/loop0p2 /mnt   <- update.imgの第2パーティション(=ルートファイルシステム)をマウント
> [ATDE]$ ls /mnt
> bin/        dev/        home/       lost+found/ mnt/        proc/       run/        srv/        tmp/        var/        
> boot/       etc/        lib/        media/      opt/        root/       sbin/       sys/        usr/
> [ATDE]$ sudo cp install.sh /mnt/   <- install.shを配置など自由に編集可能
> [ATDE]$ sudo umount /mnt   <- アンマウント
> [ATDE]$ sudo losetup -d /dev/loop0   <- ループバックデバイスの登録を解除
> 

>
>

at_akihito.irie

2021年9月9日 10時26分

入江です。

お返事が遅くなってしまい申し訳ございません。

> 初回のSDカードによる書き換え時にUSBアップデート用に用意したboot.scrとusbboot_enableを自動的にmmcblk2p1に配置したいのですが
> どのようにすべきか手順を教えて頂けないでしょうか?

まず、usbboot_enableはUSBメモリ側に配置しておくものですので前回の
update.imgに組み込んで運用してください。

boot.scrはeMMC上のU-bootに最初から書き込んでおかなければならないので、
インストールディスクで書き込めるようにしておく必要があるのですが、現状
のmake_install_disk_imageには任意のboot.scrを配置する機能はありません。

当方で任意のboot.scrをeMMCに配置できるようになる
make_install_disk_imageのパッチを作成してみましたので、添付いたします。

使い方としましては、make_install_disk_imageのv1.2.3に添付のパッチを適
用してください。

[ATDE]$ cd make_install_disk_image
[ATDE ~/make_install_disk_image]$ ls bootscr.patch
bootscr.patch
[ATDE ~/make_install_disk_image]$ patch -p1 < bootscr.patch

make_install_disk_image実行時に、最後にboot.scrへのパスを指定します。

[ATDE ~/make_install_disk_image]$ sudo ./build.sh ax1 \
path/to/u-boot.imx \
path/to/uImage \
path/to/devicetree.dtb \
path/to/userland.tar.gz \
path/to/boot.scr  <- 最後にboot.scrへのパスを指定

以上の手順で作成したインストールディスクでインストールを行うと、eMMCの
第1パーティションに指定したboot.scrが配置されるはずです。

ファイル ファイルの説明
bootscr.patch

kyas-t5

2021年9月16日 8時51分

入江様

いつもお世話になっております。

USBアップデート用boot.scrをSD書き換え時に実装する方法を
ご回答頂きましてありがとうございます。
無事にSDカードによるアップデート後、boot.scrがdev/mmcblk2p1に配置されました。
似たような内容をもう一点だけ教えて頂きたいのですがSDカードによるアップデート時に
/dev/mmcblk2p3のパーティションに特定のファイルを入れたいのですが
どのように実装を行うと良いのかご助力頂きたいのですが宜しいでしょうか?

> ご担当者様
>
> お世話になります。
>
> USBアップデートについて質問をさせて下さい。
> 以下のURLの情報は
> https://armadillo.atmark-techno.com/blog/615/3357
> USBブートをしてその中のinstall.shでkernelやルートファイルを書き換えていますが
> 製品となるときに基板を箱に入れてしまうため、SDカードが使用できません。
> また、書き換えファイルは1つにまとめておきたいので
> イメージファイル1つにしたものをUSBメモリを使用して書き換える方法があればご教示頂きたく。
>
> 既出の内容でしたら申し訳ありません。

at_akihito.irie

2021年9月17日 9時26分

入江です。

> 似たような内容をもう一点だけ教えて頂きたいのですがSDカードによるアップデート時に
> /dev/mmcblk2p3のパーティションに特定のファイルを入れたいのですが
> どのように実装を行うと良いのかご助力頂きたいのですが宜しいでしょうか?

手順に前に1点確認なのですが、「特定のファイル」のファイルサイズは最大
でどの程度でしょうか?

Armadillo-X1は、デバイス運用管理サービスである「node-eye」に対応しています。
https://node-eye.com/

/dev/mmcblk2p3はnode-eye用の予約領域ですので、保存するファイルサイズが
6MB以下であれば、GPP(General Purpose Partition)領域である、
/dev/mmcblk2gp2(もしくはgp3)の利用を推奨しております。

ご確認よろしくお願いいたします。

kyas-t5

2021年9月17日 15時21分

入江様

お世話になります。
ご返信ありがとうございます。
ファイルサイズですが1kByte未満です。

> 入江です。
>
> > 似たような内容をもう一点だけ教えて頂きたいのですがSDカードによるアップデート時に
> > /dev/mmcblk2p3のパーティションに特定のファイルを入れたいのですが
> > どのように実装を行うと良いのかご助力頂きたいのですが宜しいでしょうか?
>
> 手順に前に1点確認なのですが、「特定のファイル」のファイルサイズは最大
> でどの程度でしょうか?
>
> Armadillo-X1は、デバイス運用管理サービスである「node-eye」に対応しています。
> https://node-eye.com/
>
> /dev/mmcblk2p3はnode-eye用の予約領域ですので、保存するファイルサイズが
> 6MB以下であれば、GPP(General Purpose Partition)領域である、
> /dev/mmcblk2gp2(もしくはgp3)の利用を推奨しております。
>
> ご確認よろしくお願いいたします。
>

at_akihito.irie

2021年9月22日 11時12分

入江です。

> ファイルサイズですが1kByte未満です。

それでしたら、GPP領域のご使用をおすすめします。

前回のboot.scr対応パッチを適用したmake_install_disk_imageに適用できる
パッチを作成してみましたので添付いたします。

使い方としましては、以下のとおりです。
gp2というディレクトリを新規に作成して、その中にファイルを配置する点に
ご注意ください。

[ATDE]$ cd make_install_disk_image
[ATDE ~/make_install_disk_image]$ ls gpp2.patch
gpp2.patch
[ATDE ~/make_install_disk_image]$ patch -p1 < gpp2.patch //パッチの適用
 
[ATDE ~/make_install_disk_image]$ mkdir gp2   //gp2という名前でディレクトリを作成
[ATDE ~/make_install_disk_image]$ touch gp2/hoge   //gp2ディレクトリ内にファイルを配置
[ATDE ~/make_install_disk_image]$ sudo ./build.sh ax1 \
path/to/u-boot.imx \
path/to/uImage \
path/to/devicetree.dtb \
path/to/userland.tar.gz \
path/to/boot.scr

上記手順で作成したインストールディスクイメージを用いてインストールした
Armadillo-X1の/dev/mmcblk2gp2内に、配置したいファイルが存在することを
確認してください。

[armadillo]# mount /dev/mmcblk2gp2 /mnt
[armadillo]# ls /mnt/hoge
/mnt/hoge
ファイル ファイルの説明
gpp2.patch