いくつかのx86_64 Linuxベースカーネルが与えられたら、PCI-E拡張ボードに組み込まれたGPUを実行します。
cat-ing /proc/iomem
、RAMにいくつかのスペースが予約されており、次のものと組み合わせられていることがわかります。ビデオROM。
- これが問題を処理するためのBIOS(またはそれに対応する)コードの正確なコピーであると仮定するのは正しいですか?遺産ISAバスに接続されたVGAデバイスまたはデコード可能なPCIデバイス遺産VGA IOおよび/またはMEM?
- このコードがRAMにコピーされるのはなぜですか?
アクセス時間を速くするには?
保護モードに切り替えた後でもカーネルを実行可能に保つには? - 私はこのコードですただカーネルの専用フレームバッファドライバ(fbcon、vgafb、vesafb...)が優先しない限り使用できますか?
- フレームバッファドライバが提供されている場合は、後で実行されているカーネルの存続期間中にこのコードを使用できますか?
そうでない場合、なぜLinuxカーネルは未使用のメモリを解放せずに起動時にその領域を削除するのですか?
答え1
完全なものではなく。
iomem
エントリは物理アドレスの使用を記述します。システムRAMはこのように表示され、他の項目はRAMに使用されていないアドレス範囲を説明します。 「ビデオROM」エントリは実際のROM(実際にはフラッシュメモリ)を指します。 x86では、UEFIを介して起動するBIOSまたはCSMを使用するシステムにマッピングされない可能性があります。x86では、常に0xC0000にマッピングされていることがわかります。
$ sudo cat /proc/iomem|grep "Video ROM" 000c0000-000cfdff : Video ROM
これは常にビデオBIOSがマップされている場所であり、さまざまな(以前の)ソフトウェアではこれが必要です。
通常いいえRAMにコピーされました。 (以前は「シャドウRAM」に入るものでしたが、もうそうではありません。)
現在のシステムではこのコードは使用されていません。 (過去には限られた数のケースがありましたが、私が知っている限り、もう使用されていません。
vesafb
32ビットx86の場合)。カーネルはそれを削除する必要はなく、メモリを消費せず、いかなる場合でも無視されるアドレス範囲にあります(物理アドレス空間の下位部分は実際にはx86では使用されません)。