LinuxでシステムBIOSアドレスを見つける方法

LinuxでシステムBIOSアドレスを見つける方法

AMD Ryzen Embedded PlatformでEmbedded LinuxのBIOSと対話したいと思います。

メインツールはflashromフラッシュメモリチップを読み書きできるツールのようです。

ddメモリ内のチップのアドレスを知っている場合は、同様の方法を使用してフラッシュROMにデータを書き込むことも可能ですか?

システムBIOSを見つける正しい方法ですか?

root@device:~/bios# grep ROM /proc/iomem
    000c0000-000cd3ff : Video ROM
  000f0000-000fffff : System ROM

ツールを使用してROMを見つけると、flashrom次の結果が表示されます。

root@device:~/bios# flashrom -p internal --flash-name
flashrom v1.2 on Linux 5.4.199 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found chipset "AMD FP4".
Enabling flash write... OK.
Found Winbond flash chip "W25Q64.W" (8192 kB, SPI) mapped at physical address 0x00000000ff800000.
vendor="Winbond" name="W25Q64.W"

それでiomemチップが入ったとし、チップが入った000f0000-000fffffと言います。flashrom0x00000000ff800000

どちらが正しいのですか、それとも良いのはなぜ同じではありませんか?

答え1

どちらが正しいのですか、それとも良いのはなぜ同じではありませんか?

彼らは違うので違います。どちらも「正しい」ということではありません。

出力はflashrom物理フラッシュICのアドレスです。

iomemは、メモリ空間内のメモリの一部がマッピングされている場所を報告します。これはフラッシュICの一部のメモリです。 (おそらくそれを介してクエリするメモリかもしれませんが、flashrom -p internal初期ハードウェアの初期化中にコピーまたはマッピングされている可能性が高くなります)RAMメモリの一部。

「BIOS」、「ビデオROM」...はIBM PCの概念であり、本質的に今日のハードウェアの動作方法にはまったく適用されないことに気づく必要があります。したがって、もしあれば完全な模倣

したがって、「AMD Ryzenの組み込みLinux BIOSと対話する」と言うと、実際に「プロセッサで実行されているファームウェアがエミュレートされる38年のAPIと話したい」と言うのです。誰が何をエミュレートしているのかを簡単に判断でき、「フォントを含むチップであるビデオROMとビデオBIOSプログラムがあります」のように簡単ですが、これは明らかにグラフィックハードウェアが機能する方法ではありません。 BIOSにも同様です。マザーボードとCPUの初期化は、一部のIBM PC-BIOS派生ソフトウェアではなく、UEFIプログラムとLinuxを含むマザーボードとCPUのファームウェアです。 BIOS インターフェイスは、実際にはファームウェアによってオプションで提供されるいくつかの追加の API です。

関連情報