2

ターゲットボードをプログラミングするときに、実行可能ファイルに存在する情報に基づいてPROGRAMMERがターゲットボードをどのようにプログラムするかを考えていました。これはリンカスクリプトによって行われ、さまざまなファイルをリンクし、.init、 .text、.data、.finiなど企業がソフトウェアアップデートを公開する際に、コードセグメントに加えられた変更は何ですか?

Appleが、例えば100MBのサイズのiOSアップデートをリリースしたとき、このアップデートには独自の変数セットがあります。グローバルスタティックconst、初期化済み、未初期化これにより、新しいメモリマップが作成されます。 このアップデートは、iPhoneを考慮したプロセッサにインストールすると、どうやって動作しますか? 今後のアップデートのためにOSコードの.init、.text、.dataなどのセクションに追加のメモリが残っていますか?

PS:私は上記の私の説明では、いくつかの技術的な誤りを犯したかもしれません、私はそれに編集内容を理解するだろう

+0

um、通常は古いものを置き換えます。それを守る理由はありませんよね?それで、それはちょうどとにかく書かれるので、将来のもののための "スペース"を維持する理由はありません。 – AbstractDissonance

+0

古いものを置き換えることはどういう意味ですか?新しいアップデートは間違いなく古いものと同じサイズではないのですか? OSソフトウェア全体が再インストールされているとは思わない – Anurag

+0

このようなアップデート後に通常リブートする必要があるのはなぜですか?実行中のOSをメモリ上で更新する必要はありません。ディスク上のファイルを更新し、新しいファイルがロードされるようにリブートすることができます。 – Macmade

答えて

0

あなたの質問への答えは、正直に言うと非常に単純です。あなたの主な質問は、 "将来のソフトウェア更新のためのメモリをどこで手に入れるか"です。答えは、システムの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に収まる。

+0

私は$ 10の段落を買うつもりです;) –

+0

代わりにupvoteでやってみることができます:P –

+0

これを段落に分割することは、大いに役立ちます。これは現在、巨大なテキストの壁です。マークダウンに空白行を挿入するだけで、新しい段落が開始されます。 –

関連する問題