Armadilloフォーラム

Flash内のユーザーアプリケーションの更新

sakashita_spc

2018年7月12日 1時27分

現在、Armadillo-840で、開発を行っております。
開発はSDカードで起動して、最終的なリリースは。オンボードFlashからの起動をおこない、SDカードはアプリケーションデータ(画像ファイル)
の保存目的の運用になります。 

Flashからの起動の場合、Flashに書き込まれたromfsをRAMDISKに展開して、起動する方法のみと伺っております。
(御社の営業様および技術の方より、伺いました。)
ユーザーアプリケーションも、romfsに入れて、運用を考えております。

その場合、ネットワーク経由で、romfs内部のユーザアプリケーションの更新方法を教えていただけないでしょうか。
具体的には、mtd5に書き込まれたuserlandのromfs-a840-XXX.img.gzの一部のアプリケーションのターゲットからの書き換え方法を教えてください。

書き換えアプリケーションのサイズは300Kバイト程度を想定。場合によってはライブラリー(OpenCVなど)も含めるとMオーダーになる可能性も。

24Hrの連続動作を行っているため、Linuxのリブートは避け、アプリケーションの再起動のみを考えております。
ただ、停電対策も行っており、Low-Voltageになった場合、いったん、Shutdownを行って、電源回復時には再起動を行います。
また、ネットワークもモバイル経由(LTEルーターを経由)のため、有線ほどの通信品質は期待できません。

コメント

at_kojiro.yamada

2018年7月12日 14時31分

> 現在、Armadillo-840で、開発を行っております。
> 開発はSDカードで起動して、最終的なリリースは。オンボードFlashからの起動をおこない、SDカードはアプリケーションデータ(画像ファイル)
> の保存目的の運用になります。 
>
> Flashからの起動の場合、Flashに書き込まれたromfsをRAMDISKに展開して、起動する方法のみと伺っております。
> (御社の営業様および技術の方より、伺いました。)
> ユーザーアプリケーションも、romfsに入れて、運用を考えております。
>
> その場合、ネットワーク経由で、romfs内部のユーザアプリケーションの更新方法を教えていただけないでしょうか。
> 具体的には、mtd5に書き込まれたuserlandのromfs-a840-XXX.img.gzの一部のアプリケーションのターゲットからの書き換え方法を教えてください。
>
> 書き換えアプリケーションのサイズは300Kバイト程度を想定。場合によってはライブラリー(OpenCVなど)も含めるとMオーダーになる可能性も。
>
> 24Hrの連続動作を行っているため、Linuxのリブートは避け、アプリケーションの再起動のみを考えております。
> ただ、停電対策も行っており、Low-Voltageになった場合、いったん、Shutdownを行って、電源回復時には再起動を行います。
> また、ネットワークもモバイル経由(LTEルーターを経由)のため、有線ほどの通信品質は期待できません。
>
>

mtd5(/dev/flash/userland)に書き込まれているのはgzipで圧縮されたユーザーランドイメージなので、部分的に書き換えることはできません。

停電対策でShutdownが行われるなら、書き換え完了前に電源が落ちることも考える必要があります。
ユーザーランドイメージを書き換えるので、書き換えが完了しなかった場合、再起動できなくなります。
Armadillo-840に搭載のNORフラッシュメモリはuserland領域を2面化できるほどの容量はないので、ユーザーランドイメージを安全に書き換えるのは難易度が高いと考えます。

sakashita_spc

2018年7月13日 0時01分

> Armadillo-840に搭載のNORフラッシュメモリはuserland領域を2面化できるほどの容量はないので、
>ユーザーランドイメージを安全に書き換えるのは難易度が高いと考えます。
アドバイスありがとうございます。本件に関して、数点おしえてください。
A)フラッシュメモリーのメモリーマップをみると、userlandが120M近くあります。img.gzにした場合、40Mぐらいになるのですが、この
mtd5(/dev/flash/userland)の領域には、どのような方法でimg.gzのファイルは書き込まれているのでしょうか?ファイルシステム?それとも、
RAWデータとして?2面持てないと回答をいただきてるので、RAWデータと推測するのですが。
もしファイルシステムなら、ユーザーアプリのみ別ファイルにまとめて、img.gzと合わせてmtd5におけないかと?
B)(A)に関連するのですが、もし、mtd5(/dev/flash/userland)に置けない場合、他のパーティション(firmwa等)などには置くことはできないでしょうか?(firmwareのパーティションがどのように展開(利用)されるか認識していません。)

C)外付けのSDカードはどのくらいまでのサイズなら、Linuxで認識可能でしょうか?

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

> > 現在、Armadillo-840で、開発を行っております。
> > 開発はSDカードで起動して、最終的なリリースは。オンボードFlashからの起動をおこない、SDカードはアプリケーションデータ(画像ファイル)
> > の保存目的の運用になります。 
> >
> > Flashからの起動の場合、Flashに書き込まれたromfsをRAMDISKに展開して、起動する方法のみと伺っております。
> > (御社の営業様および技術の方より、伺いました。)
> > ユーザーアプリケーションも、romfsに入れて、運用を考えております。
> >
> > その場合、ネットワーク経由で、romfs内部のユーザアプリケーションの更新方法を教えていただけないでしょうか。
> > 具体的には、mtd5に書き込まれたuserlandのromfs-a840-XXX.img.gzの一部のアプリケーションのターゲットからの書き換え方法を教えてください。
> >
> > 書き換えアプリケーションのサイズは300Kバイト程度を想定。場合によってはライブラリー(OpenCVなど)も含めるとMオーダーになる可能性も。
> >
> > 24Hrの連続動作を行っているため、Linuxのリブートは避け、アプリケーションの再起動のみを考えております。
> > ただ、停電対策も行っており、Low-Voltageになった場合、いったん、Shutdownを行って、電源回復時には再起動を行います。
> > また、ネットワークもモバイル経由(LTEルーターを経由)のため、有線ほどの通信品質は期待できません。
> >
> >
>
> mtd5(/dev/flash/userland)に書き込まれているのはgzipで圧縮されたユーザーランドイメージなので、部分的に書き換えることはできません。
>
> 停電対策でShutdownが行われるなら、書き換え完了前に電源が落ちることも考える必要があります。
> ユーザーランドイメージを書き換えるので、書き換えが完了しなかった場合、再起動できなくなります。
> Armadillo-840に搭載のNORフラッシュメモリはuserland領域を2面化できるほどの容量はないので、ユーザーランドイメージを安全に書き換えるのは難易度が高いと考えます。
>
>

y.nakamura

2018年7月13日 3時27分

中村です。

> もしファイルシステムなら、ユーザーアプリのみ別ファイルにまとめて、img.gzと合わせてmtd5におけないかと?

これ(↓)が参考になると思います。
[ユーザーランド領域の分割]
https://armadillo.atmark-techno.com/forum/armadillo/2177

--
なかむら

at_kojiro.yamada

2018年7月13日 13時53分

> A)フラッシュメモリーのメモリーマップをみると、userlandが120M近くあります。img.gzにした場合、40Mぐらいになるのですが、

Armadillo-840であれば、userland領域に余裕がありました。
Armadillo-440と混同してしまっていました、申し訳ありません。

> このmtd5(/dev/flash/userland)の領域には、どのような方法でimg.gzのファイルは書き込まれているのでしょうか?ファイルシステム?それとも、
> RAWデータとして?2面持てないと回答をいただきてるので、RAWデータと推測するのですが。

userland領域にファイルシステム作っていません。生のデータを書いています。

> B)(A)に関連するのですが、もし、mtd5(/dev/flash/userland)に置けない場合、他のパーティション(firmwa等)などには置くことはできないでしょうか?(firmwareのパーティションがどのように展開(利用)されるか認識していません。)

userland領域を分割して、アプリケーションを保存するためのパーティション
を作ってしまう方法があります。
中村さんから、参考になる、と回答のあった方法です。
>中村さん ありがとうございました。

新なパーティションを作成するなら、
例えば、以下のような方法は実現可能です。

userland空間を分離 (Base、App1、App2) ※Appは1つでも可
・お客様開発部分をsquashfsにまとめる
・squashfsをApp空間に書込む
・起動後Appを(RAMにコピーし)マウント

アプリケーション更新時には、
・新しいsquashfsをApp2に書込む
・RAMにコピーしマウント
・実行中プロセスの停止
・新プロセスを実行

> C)外付けのSDカードはどのくらいまでのサイズなら、Linuxで認識可能でしょうか?

Armadillo-840は、SDXCまで対応しています。
認識可能か、というと
カードの容量というよりは、ファイルシステムに対応しているかどうか、が問題になると思います。

sakashita_spc

2018年7月13日 18時39分

お世話になります。

中村様
情報ありがとうございます。
検討してみます。

パーティションで進めていこうと思います。

追加で教えてください。
Flashから起動して、ramdiskに展開されます。起動後のRAMDISKのdfをみると、
容量があまりありません。
[root@armadillo840-0 (ttySC2) ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 115932 103919 6201 94% /
udev 450696 4 450692 0% /dev
/dev/flashblk/firmware
2432 2432 0 100% /opt/firmware
/dev/flashblk/license
128 128 0 100% /opt/license
tmpfs 450696 0 450696 0% /tmp
tmpfs 450696 0 450696 0% /var/tmp
/dev/mmcblk0 7639928 26204 7225628 0% /mnt

userlandのサイズを大きくしても、このdfの結果の違いは大きく変わりません。
(openCV3.1を入れた場合と、入れてない場合でも)

この 空き容量(/)はどのように決まるのでしょうか?
アプリ更新を行いにしても、このサイズをある程度確保していないと、できないと考えますので。。

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

> > A)フラッシュメモリーのメモリーマップをみると、userlandが120M近くあります。img.gzにした場合、40Mぐらいになるのですが、
>
> Armadillo-840であれば、userland領域に余裕がありました。
> Armadillo-440と混同してしまっていました、申し訳ありません。
>
> > このmtd5(/dev/flash/userland)の領域には、どのような方法でimg.gzのファイルは書き込まれているのでしょうか?ファイルシステム?それとも、
> > RAWデータとして?2面持てないと回答をいただきてるので、RAWデータと推測するのですが。
>
> userland領域にファイルシステム作っていません。生のデータを書いています。
>
> > B)(A)に関連するのですが、もし、mtd5(/dev/flash/userland)に置けない場合、他のパーティション(firmwa等)などには置くことはできないでしょうか?(firmwareのパーティションがどのように展開(利用)されるか認識していません。)
>
> userland領域を分割して、アプリケーションを保存するためのパーティション
> を作ってしまう方法があります。
> 中村さんから、参考になる、と回答のあった方法です。
> >中村さん ありがとうございました。
>
> 新なパーティションを作成するなら、
> 例えば、以下のような方法は実現可能です。
>
> userland空間を分離 (Base、App1、App2) ※Appは1つでも可
> ・お客様開発部分をsquashfsにまとめる
> ・squashfsをApp空間に書込む
> ・起動後Appを(RAMにコピーし)マウント
>
> アプリケーション更新時には、
> ・新しいsquashfsをApp2に書込む
> ・RAMにコピーしマウント
> ・実行中プロセスの停止
> ・新プロセスを実行
>
> > C)外付けのSDカードはどのくらいまでのサイズなら、Linuxで認識可能でしょうか?
>
> Armadillo-840は、SDXCまで対応しています。
> 認識可能か、というと
> カードの容量というよりは、ファイルシステムに対応しているかどうか、が問題になると思います。
>

y.nakamura

2018年7月13日 19時32分

中村です。

> Flashから起動して、ramdiskに展開されます。起動後のRAMDISKのdfをみると、
> 容量があまりありません。
...
> この 空き容量(/)はどのように決まるのでしょうか?

たしかromfs.imgを作るときに自動計算だったと思います。

実践開発ガイド第2部の
[8.6.2. ルートファイルシステムの空き容量を増やす]
https://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-3…
に変更方法が書いてあります。
その書き出し部分を引用しておきます。
| Atmark Distでルートファイルシステムを作成すると、ルートファイルシステムのサイズは、
| 標準では必要最小限になるよう自動で調整されます。概ね、空き容量は10%以下となります。
| ルートファイルシステムのサイズを手動で設定することで、空き容量を増やすことができます。
| Atmark Distのmenuconfigの「Userland Configuration[60] → Vendor specific→ generate file-system option」を
| AutoからManualにすることで、ルートファイルシステムのサイズを手動で設定できるようになります。

また、生成ずみのromfs.imgを修正して増やす方法がここに書いてあります。
(たぶん、そういうことが書いてあるのだと思いますが、
これを自分試したことはありませんので違っていたらゴメンナサイ)
[Armadillo-800シリーズ:ユーザーランドイメージのファイルを簡易的に変更する方法]
https://users.atmark-techno.com/blog/615/3063
の前半です。

--
なかむら

sakashita_spc

2018年7月16日 19時05分

中村様
お世話になります。

いろいろありがとうございます。
>実践開発ガイド第2部の
>[8.6.2. ルートファイルシステムの空き容量を増やす]
こちらを参考に、調整を行ってみたいと思います。

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

> 中村です。
>
> > Flashから起動して、ramdiskに展開されます。起動後のRAMDISKのdfをみると、
> > 容量があまりありません。
> ...
> > この 空き容量(/)はどのように決まるのでしょうか?
>
> たしかromfs.imgを作るときに自動計算だったと思います。
>
> 実践開発ガイド第2部の
> [8.6.2. ルートファイルシステムの空き容量を増やす]
> https://manual.atmark-techno.com/armadillo-guide/armadillo-guide-2_ja-3…
> に変更方法が書いてあります。
> その書き出し部分を引用しておきます。
> | Atmark Distでルートファイルシステムを作成すると、ルートファイルシステムのサイズは、
> | 標準では必要最小限になるよう自動で調整されます。概ね、空き容量は10%以下となります。
> | ルートファイルシステムのサイズを手動で設定することで、空き容量を増やすことができます。
> | Atmark Distのmenuconfigの「Userland Configuration[60] → Vendor specific→ generate file-system option」を
> | AutoからManualにすることで、ルートファイルシステムのサイズを手動で設定できるようになります。
>
> また、生成ずみのromfs.imgを修正して増やす方法がここに書いてあります。
> (たぶん、そういうことが書いてあるのだと思いますが、
> これを自分試したことはありませんので違っていたらゴメンナサイ)
> [Armadillo-800シリーズ:ユーザーランドイメージのファイルを簡易的に変更する方法]
> https://users.atmark-techno.com/blog/615/3063
> の前半です。
>
> --
> なかむら
>
>