2015-12-30 40 views
3

我總是有這個問題,在閱讀man-page和在線搜索後沒有得到答案。任何有此知識的人請評論。dmidecode從哪裏得到SMBIOS表?

據我所知,SMBIOS表或DMI表是dmidecode定位和解析的內容。但是它從哪裏得到?它是在Linux中的文件格式?

回答

5

看起來它來自的/ dev/MEM

[email protected] ~]# strace -F -e open dmidecode -t 17 
    <snip> 
    open("/sys/firmware/efi/systab", O_RDONLY) = -1 ENOENT (No such file or directory) 
    open("/proc/efi/systab", O_RDONLY)  = -1 ENOENT (No such file or directory) 
    open("/dev/mem", O_RDONLY)    = 3 
    SMBIOS 2.5 present. 

    open("/dev/mem", O_RDONLY)    = 3 
    Handle 0x0016, DMI type 17, 27 bytes 
    Memory Device 
<snip> 

/dev/mem被描述爲

MEM是是 計算機主存儲器的圖像的字符設備文件。例如,它可以用來檢查(甚至打補丁)系統。 mem中的字節地址被解釋爲物理內存 地址。

這樣回答,它包含在的/ dev/MEM

我在尋找更多的信息,但我認爲內核插入DMI表到內存在啓動時間 - 從man dmidecode

當你運行它,會的dmidecode試圖找到DMI表。如果 成功,它將然後解析此表並 顯示這樣一個記錄列表:

+0

'的/ dev/mem'似乎並不成爲唯一的位置,其中'dmidecode'查詢,在我的情況下,它主要是不僅從'/ sys/firmware/dmi/tables'中的'smbios_entry_point'和'DMI'兩個文件中提取信息。 – Meow

7

在DMI表中定義的數據是一個行業標準;爲Linux和Windows(其他PC的OS中)來實現:

https://en.wikipedia.org/wiki/System_Management_BIOS

系統管理BIOS(SMBIOS)規範定義數據 可以用於讀取信息 存儲結構(和訪問方法)在計算機的BIOS中。 1999年大約,它成爲 域分佈式管理任務組(DMTF)的一部分......

在大約相同的時間微軟開始要求OEM廠商 和BIOS廠商支持,以便在接口/數據集有 微軟認證...

你可以閱讀更多關於Linux實現 - 並且用實際的,原始數據導出到用戶空間(「/ SYS /班/ DMI /」司機「的/ dev/MEM」,和朋友) - 在這裏:

http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-19.4929/

訪問DMI信息是這裏真正的內核代碼(你的發行版/版本可能會有所不同):

http://lxr.free-electrons.com/source/drivers/firmware/dmi-sysfs.c