dmidecode for Apple OS X
Dmidecode is a long standing, effective tool for reading manufacturer info from the SMBIOS tables present on most modern x86 based systems. It’s been available for many years on most Unix like operating systems and has also been ported to Windows. Until now, it had never made the leap to OS X.
From the dmidecode website:
Dmidecode reports information about your system’s hardware as described in your system BIOS according to the SMBIOS/DMI standard. This information typically includes system manufacturer, model name, serial number, BIOS version, asset tag as well as a lot of other details of varying level of interest and reliability depending on the manufacturer. This will often include usage status for the CPU sockets, expansion slots (e.g. AGP, PCI, ISA) and memory module slots, and the list of I/O ports (e.g. serial, parallel, USB).
Installation on OS X
The easiest way to install dmidecode
is with the homebrew
package manager:
$ brew install cavaliercoder/dmidecode/dmidecode
To build from source, sources are available from the project page on GitHub.
Once cloned or extracted from the release tarball, you may build and install with:
The above steps install the dmidecode
binary into /usr/local/sbin
. If this
is not in your $PATH
, you’ll need to add it or call the full file path:
$ /usr/local/sbin/dmidecode
Getting help
For all issues related to dmidecode
itself, please see the
dmidecode website.
This port is thoroughly tested on x86_64 iMacs and MacBook Pros running 10.9+. All API calls have documented compatability since OS X 10.0 but without the opportunity to test on older machines, I’ll be relying on the community for feedback.
If you encounter any issues, please raise an issue on the GitHub page and include your Apple device details and OS X version. Please first check for existing issues which may match your problem.
The portability challenge
Dmidecode ports very nicely onto any Unix-like platform that exposes raw system
memory (specifically the range where SMBIOS lives) as a file handle (such as
/dev/mem
). Unfortunately, a few years back, Apple disabled its memory file
handle by default. Now the only way to access SMBIOS memory directly (on an
out-of-box OS X machine) is to use Apple’s proprietary IOService API.
This port of dmidecode aims to minimize deviation from the upstream codebase to
ensure that ongoing maintenance is as simple as possible. The challenge has
been achieving this without butchering the code with a bunch of
if apple... else...
blocks but cleanly navigating around code that assumes
SMBIOS data is accessible from a file path.
Sample output
Here’s some sample dmidecode output from my MacBook Pro 2010 running OS X 10.9.5; modified for privacy and brevity: