dmidecodeのソースコードを確認しました。
私はこれを見ました:
int fd=open("/dev/mem", O_RDONLY);
long fp=0xE0000L;
LinuxがSMBIOS情報をメモリにコピーしたようです。
答え1
/dev/mem
すべての物理アドレス空間へのアクセスを提供します。 BIOSファームウェアはこのアドレス空間の一部です(コンピュータの電源投入中に実行するコードの一部が必要です)。
0xe0000
したがって、Linuxは古くからBIOSのベースアドレスであった「SMBIOS情報をメモリにコピーしません」。この経由で読み取る/dev/mem
ことはROMから直接読み取られます(起動プロセス中にBIOSがシャドウRAMに置き換えられない限り、まだ同じです)。文)はLinuxとは関係ありません)。