sakashita_spc
2019年10月11日 17時06分
/etc/config
に関して教えてください。
840のシステムでは256Kバイト確保されているようです。(FSとしてのサイズはさらに小さい?)
https://download.atmark-techno.com/armadillo-840/document/armadillo-840…
config 256kByte アプリケーションの設定情報な
0x04040000
|
0x0407FFFF
atmark-distでは、データの保存ができないため、システムエラー情報をエリアに保存しようと考えております。
そこで質問ですが、このエリアはどのくらいの書き込み回数ができますでしょうか?
また、このエリアが万が一読み出しできない場合、修復方法はありますでしょうか?
(自動復帰の機能などはあるのでしょうか?また、読み出しできないと、Kernel起動もできないでしょうか?)
以上、よろしくお願いします。
コメント
sakashita_spc
回答ありがとうございます。
追加で質問させてください。
>そのイレース回数の限度はおよそ10万回です。
イレースの1回は
"flatfsd -s"
の書き込み1回と考えて問題ないですか?
あと、/etc/configのエリアに書き込み失敗の可能性はないと考えていいでしょうか?
このエリアを利用目的は、当初エラー情報の内容をSDカードに書き込んでいたのでですが、SDカードがvFatのフォーマットで
まれにReadonlyになってしまって、その際書き込みができなくなる可能性があるため、その情報を可能な限り残したいため、
/etc/config
を検討しています。
以上、よろしくお願いします。
at_ohsawa
> の書き込み1回と考えて問題ないですか?
良いです。正確には2面ある面を交互に使うので、
その時点で読んでいるのとは別の面をイレースしています。
> 書き込み失敗の可能性はないと考えていいでしょうか?
いいえ、あります。
flatfsのバージョン違い等のソフトウェア変更を除いた場合
(= 同じSW/HWで直前まで書けていた場合)
ありえそうな書き込み時のエラーの発生条件は下記の通りです。
HW要因
- フラッシュメモリが故障して動作しない
-> この場合はconfigだけでなくkerne等も読めないので起動しない
- フラッシュメモリアクセス時に外部から信号線にノイズが流入し動作しない
-> flatfsdコマンドはエラーを返します
- 書き込みの最中に電源を切った
-> エラーを検知できません。flatfsヘッダを書き損じた場合は前述の通り/etc/defaultで起動します
SW要因
- 書き込めないサイズのデータを保存しようとした
-> flatfsdがエラーを返します
- flatfsdを二重に実行した
-> flatfsdがエラーを返します
とくに瞬停、事故等で電源遮断の可能性は常にありえます。
このとき、設定とエラー情報を同じ領域に保存すると、エラー情報を
書く度に、設定も電源遮断による喪失のリスクに晒されます。
一般に設定の変更頻度は低いと思いますので、config領域と同等の領域
をエラー保存専用に作る方が良いと思います。
at_kojiro.yamada
> とくに瞬停、事故等で電源遮断の可能性は常にありえます。
> このとき、設定とエラー情報を同じ領域に保存すると、エラー情報を
> 書く度に、設定も電源遮断による喪失のリスクに晒されます。
> 一般に設定の変更頻度は低いと思いますので、config領域と同等の領域
> をエラー保存専用に作る方が良いと思います。
下記ページで、userland領域を分割して独自の保存領域を作成する方法が紹介されています。
Armadillo-810向けのものです。Armadillo-840ではフラッシュメモリの容量がArmadillo-810の2倍(128MB)である点に注意してください。
sakashita_spc
> SW要因
> - 書き込めないサイズのデータを保存しようとした
> -> flatfsdがエラーを返します
> - flatfsdを二重に実行した
> -> flatfsdがエラーを返します
>
現在、特定プロセス(特定スレッド)のみでflastsdをおこなっており、2重アクセスの可能性はないと考えます。
もし、flastsdがエラーを返した場合、どのようの処理になるのでしょうか?
問題ないサイズの書き込みおよび、2重アクセスがなければ問題ないでしょうか?
その条件でもし、エラーが発生した場合の対応はどのようことを考えればいいでしょうか?
以上、よろしくお願いします。
at_ohsawa
> もし、flastsdがエラーを返した場合、どのようの処理になるのでしょうか?
条件によって異なりますが、サイズ過大についてはイレース前に
チェックしてエラーするので、空になったままということはないです。
二重実行はタイミングにもよりますが、両方のプロセスが失敗して何も
起きない場合と先行した方が成功する場合があります。
SW由来のものは試してみるとわかります。
あるいは、Atmark Distの下記のパスにソースコードがあるので確認してみてください。
atmark-dist/user/flatfsd/flatfsd-3.0.2
> 問題ないサイズの書き込みおよび、2重アクセスがなければ問題ないでしょうか?
それは保証出来ません。
バグの無いことを保証しているわけではないので、未知の条件は考えられます。ですが、
この2つ以外は主にハードウェアの故障やカーネルのドライバ設定ミスで初期化できなかった、
ノイズ等を疑います。
(「直前まで書けていた条件のもと」なので、ファイル名やディレクトリ名が過大長でエラー等の
条件が変わった時のエラーは他にもあります。)
> その条件でもし、エラーが発生した場合の対応はどのようことを考えればいいでしょうか?
その状態を保全しエラーを解析するか、システムが動き続けることを重視するのかによると思います。
前者なら電源を入れたまま、極力何も実行せず人間を呼び出して調べますが、
後者なら自分なら(ノイズ等の外乱は一時的なもののはずなので)flatfsdを何度か実行するか
再起動させるとお思います。そして何度か実行しても復帰しない場合は故障を疑います。
at_ohsawa
2019年10月11日 19時39分
> /etc/config
> に関して教えてください。
> 840のシステムでは256Kバイト確保されているようです。(FSとしてのサイズはさらに小さい?)
ファイルシステムとしては、その半分の128KBを交互に2面使っています。
> そこで質問ですが、このエリアはどのくらいの書き込み回数ができますでしょうか?
このエリアに限らず1ブロック(128KB)単位でイレース/プログラムされるのですが、
そのイレース回数の限度はおよそ10万回です。
> また、このエリアが万が一読み出しできない場合、修復方法はありますでしょうか?
読みだせないというより、ヘッダ部分のデータが不正だと/etc/defaultの内容で起動します。
チェックサムを取る機構はありますが、現状で使っていないため寿命等で、データが
書き換わらなかった場合、そのまま読み出されてしまいます。
寿命でreadそのものができなくなるというのは、あまり考えられない故障モードだと
おもいますが、当然読めなければ、先述の通り/etc/defaultの内容で起動します。
> (自動復帰の機能などはあるのでしょうか?また、読み出しできないと、Kernel起動もできないでしょうか?)
従って、kernelは起動しますが、意図した設定や値ではないconfigで起動することになります。