10

組み込み Linux ベースのデバイスには、多くの場合、アプリケーションとシステム ファイルを更新するメカニズムが必要です。たとえば、USB ポートを備えた (ネットワークに接続されていない) ラボ機器は、USB スティックからソフトウェアの更新を取得できます。

スクリプトを実行してファイルをデバイスの内部フラッシュ メモリにコピーするのは簡単なことです。ただし、更新の途中でデバイスの電源が失われ、ブリックになってしまう危険性があります。

アプリケーション ディレクトリを複製し、1 つのコピーを更新し、古いディレクトリと新しいディレクトリをすばやく交換して障害ウィンドウを最小限に抑える余地があるため、アプリケーション ファイルの状況は少し簡単です。

カーネル ファイルとシステム ファイルはファイル システム全体に分散しているため、状況はより複雑です。

ファイル システムでハード リンクとソフト リンクを使用して、重要なファイルを特定しました。ファイルとアーカイブのハッシュを使用して、ファイルの整合性を検証します。更新されたファイル システムからの起動が失敗した場合にフォールバックを提供するために、カーネルで緊急 ramfs を使用することを検討しました。

この要件に対するあなたのアプローチは何ですか?

4

5 に答える 5

2

信頼性を確保する必要がある場合は、2 つのフラッシュ パーティション (またはチップ) を使用できます。1 つは現在の動作構成で、もう 1 つは新しい構成です。次に、ハードウェア ウォッチドッグを使用して、ユニットをリセットし、アクティブなブート フラッシュ パーティションを「最新の既知の正常な」構成に切り替えます。

于 2008-11-13T16:10:13.050 に答える
1

アプリケーション ファイルの場合と同じアプローチを使用します。重要なファイルを作成し、独自のパーティションを完成させ、それらにリンクし、パーティションを複製します。すべての init で、最初にリンクがすべて同じパーティションに表示されているかどうかを確認する必要があります。表示されていない場合は、それらをリセットします (特定のファイルの最新の日付のファイルがあるパーティションに)。更新したい場合は、すべてを新しいパーティションにコピーするだけです。すべてが正常であれば (crcs OK)、ファイルをループして、1 つのファイルシステムから別のファイルシステムへのリンクをそれぞれに設定します。

このようにして、重要なファイルは常に正常な状態に保たれます。

シナリオ:

  1. ファイルを新しいパーティションにコピー中に更新が失敗する

    リンクはまだ古い作業用のものに表示されるため、問題ありません。

  2. リンク中に更新が失敗する

    すべての新しいファイルが有効であり、既にコピーされているため問題ありません (そうしないと、再リンク ステップが開始されません)。セットアップ チェックでこれを修正してください

于 2008-11-13T16:11:30.767 に答える