あなたの質問への答えは、正直に言うと非常に単純です。あなたの主な質問は、 "将来のソフトウェア更新のためのメモリをどこで手に入れるか"です。答えは、システムのDRAMです。あなたの質問の最初の部分では、ベアメタルプログラミングについて話しています。 2番目の質問はOSレベルのプログラミングです。最初の部分では、基本的にプロセッサをispモードにし、フラッシュまたは他のnvメモリをプログラムします。 2番目の部分では、それが動作する方法は完全に異なります。
基本的に、アップデートは、ブートローダ、カーネル、initramfs、ファームウェア、アプリケーションの各部分に分かれています。まず、ftpのようなプロトコルを使って、コード(バンドルパッケージ)をデバイスに転送します。この転送は実際にシステムのDRAM上にコードを置きます。次に、あなたのシステム(Linuxを実行している例)に、このコードを解凍して整合性チェック(ファイルのチェックサム)を行うためのコード(ロジック)があります。次に、システムは、これらのコンポーネントをすべて分析し、既存のコンポーネントのどれかが更新を必要とするかどうかを判断する(入力コンポーネントのmd5合計を確認し、既存のコンポーネントと比較する)コードをさらに備えています。たとえば、カーネルのinitスクリプトを変更した場合やinit.dに新しいスクリプトが必要な場合は、基本的にinitramfsを変更しました。したがって、システム上のコードはこれを見て、initramfsのアップデートが必要であると判断します。
また、新しいコードの最終的な宛先はフラッシュです。フラッシュには書き込みと消去を行うために必要な規則があるため、基本的にフラッシュファイルシステムをフラッシュにマウントします。しかし、jffs2のようなファイルシステムはウェアレベリング機構を使用しているため、物理的なフラッシュ(jffs2がマウントされている)にデータが散在しているため、コードを書き込むためにコードを書き込むことはできません。これは、完全なブートローダー、カーネル、initramfsなどをフラッシュ内の連続した場所に配置したいからです。したがって、Linuxを実行するサンプルシステムでは、mtdドライバと呼ばれるものがあります。このドライバを使用して、すべてのコンポーネントでフラッシュをプログラムすることができます。要するに、DRAMはソフトウェアアップデートの暫定的な場所です。したがって、2つのうちの1つを確認する必要があります。1.十分なメモリがある。2.ソフトウェアアップデートバンドルがDRAMに収まる。
um、通常は古いものを置き換えます。それを守る理由はありませんよね?それで、それはちょうどとにかく書かれるので、将来のもののための "スペース"を維持する理由はありません。 – AbstractDissonance
古いものを置き換えることはどういう意味ですか?新しいアップデートは間違いなく古いものと同じサイズではないのですか? OSソフトウェア全体が再インストールされているとは思わない – Anurag
このようなアップデート後に通常リブートする必要があるのはなぜですか?実行中のOSをメモリ上で更新する必要はありません。ディスク上のファイルを更新し、新しいファイルがロードされるようにリブートすることができます。 – Macmade