DMI table 记录了系统硬体信息,比如BIOS version ,OEM vender info ,CPU RAM 等。
系统在boot时会将DMI table map到 MEMORY中。程序从0x0000F000:0 位置开始查找string “_SM_”,确定地址后把指针格式化成struct dmi_eps
的格式,再读出需要的信息。
下面是memtest86+4.20里边open DMI的部分:
struct dmi_eps {
uint8_t anchor[4];
int8_t checksum;
uint8_t length;
uint8_t majorversion;
uint8_t minorversion;
uint16_t maxstructsize;
uint8_t revision;
uint8_t pad[5];
uint8_t intanchor[5];
int8_t intchecksum;
uint16_t tablelength;
uint32_t tableaddress;
uint16_t numstructs;
uint8_t SMBIOSrev;
} __attribute__((packed));
int open_dmi(void){
char *dmi, *dmi_search_start, *dmi_start;
int found=0;
struct dmi_eps *eps;
char *table_start;
int tstruct_count=0;
dmi_search_start = (char *)DMI_SEARCH_START; /