Search code examples
linuxiolinux-kernelx86bios

Finding out address of SMBIOS Entry point from command line


From https://wiki.osdev.org/System_Management_BIOS

The SMBIOS Entry Point Table is located somewhere between the addresses 0xF0000 and 0xFFFFF, and must be on a 16-byte boundary. To find the specific location of the start of the table it is necessary to search that region of memory for the string "SM", and then check the structure's checksum (add all bytes and see if the lowest 8 bits of the result are zero).

How do i find out the exact address from command line:

# cat /dev/mem | grep '_SM_'
Binary file (standard input) matches
cat: /dev/mem: Operation not permitted

Solution

  • The dmidecode utility (installed as part of the dmidecode package on Debian based systems such as Ubuntu) will show the SMBIOS entry point if run with the --no-sysfs option. The address is shown on the second line of output:

    $ sudo dmidecode --no-sysfs
    # dmidecode 3.2
    # SMBIOS entry point at 0x000fxxxx
    Found SMBIOS entry point in EFI, reading table from /dev/mem
    ...
    

    The biosdecode and dmidecode utilities can be used to examine the tables.

    biosdecode examines the memory directly (/dev/mem by default, but can be changed with the -d option) to find the SMBIOS table (and other tables). dmidecode will try to locate the DMI table in sysfs first (unless run with the --no-sysfs option) and will fall back to examining the memory.

    Links: