我检查了 dmidecode 源代码。
我看到了这个:
int fd=open("/dev/mem", O_RDONLY);
long fp=0xE0000L;
看起来Linux已经把SMBIOS信息复制到内存了?
答案1
/dev/mem
提供对所有物理地址空间的访问。 BIOS 固件是该地址空间的一部分(您的计算机必须有一些代码才能在加电期间运行)。
所以Linux“没有将SMBIOS信息复制到内存中”,0xe0000
自古就是BIOS的基地址,读取这个via/dev/mem
会直接从ROM中读取(除非BIOS在启动过程中用shadow RAM替换了自己,但还是那句话)与 Linux 无关)。