0

Linuxカーネルが起動する前に、RAMの手動で指定されたアドレス範囲をクリアすることは可能ですか?それとも、起動の初期段階ですか?

RAMアドレスを除外する方法を見つけましたが、起動後にこのアドレスを使用したいと思います。

[更新]:変更できないサードパーティのブートローダーがあります。このブートローダーは、RAMのメモリをフレームバッファに使用して、画面に画像を表示します。initramfsが解凍している段階でLinuxカーネルを起動するプロセスでは、このメモリが使用されていないと想定して、このメモリをオーバーラップさせます。そのため、画面上の画像が破損します。

[Update_2]:そのRAM領域をゼロにしましたが、画像の破損は修正されませんでした。Linuxは、起動時にこのメモリを引き続き使用し、画像を上書きします。

たぶん、このメモリ領域(ブートローダーによって使用される)を起動プロセスから除外し、後で追加することは可能ですか?

4

1 に答える 1

1

更新から、Linuxは、LCD周辺機器がDMAを使用してディスプレイに出力していると想定しているこのメモリ領域は、自由に使用できる通常のRAMであると考えているようです。LinuxによってそのRAM領域に書き込まれるものはすべて表示データではないため、DMAを介してLCDに出力されますが、現在は破損しています。

サードパーティのブートローダーを変更できないために使用できる解決策の1つは、独自のセカンダリブートローダーを作成し、Linuxの代わりにサードパーティのブートローダーをそれにジャンプさせることです。このセカンダリブートローダーは、サードパーティのブートローダーによって通常Linuxに渡されるすべてのパラメーターを保存します。このセカンダリブートローダーに実際に実行してもらいたいのは、LCDに出力を供給しているDMAをオフにすることです。そうすると、画面が空白になります。それが完了したら、通常どおりLinuxにジャンプできます。セカンダリブートローダーがLinuxが渡されていた一部のメモリ位置パラメータもオフセットする場合は、Linuxが渡されるパラメータをわずかに変更する必要がある場合があります。

于 2013-03-26T13:05:15.853 に答える