[vbox-dev] BIOS DMI data

Dmitry Tokarenko tokarenkodmitry at gmail.com
Tue May 25 08:54:13 GMT 2010


Hi All!
I want to emulate an appliance using VirtualBox. In order to do so I
will have to set following DMI data in BIOS (as reported by Phoenix
BIOS Editor Pro):

MotherboardManufacturerName
MotherboardModel
MotherboardVersion
SerialNumber

SystemManufacturerName
SystemProductName
SystemVersion
SystemSerialNumber

ChassisManufacturerName
ChassisVersion
ChassisSerialNumber
ChassisModel


Currently VBox allows me to set following DMI data:

"DmiBIOSVendor\0"
"DmiBIOSVersion\0"
"DmiBIOSReleaseDate\0"
"DmiBIOSReleaseMajor\0"
"DmiBIOSReleaseMinor\0"
"DmiBIOSFirmwareMajor\0"
"DmiBIOSFirmwareMinor\0"
"DmiSystemFamily\0"
"DmiSystemProduct\0" <---- SystemProductName
"DmiSystemSerial\0" <---- SystemSerialNumber
"DmiSystemUuid\0"
"DmiSystemVendor\0" <---- SystemManufacturerName
"DmiSystemVersion\0" <---- SystemVersion
"DmiChassisVendor\0" <---- ChassisManufacturerName
"DmiChassisVersion\0" <---- ChassisVersion
"DmiChassisSerial\0" <---- ChassisSerialNumber
"DmiChassisAssetTag\0"

(BTW where "ChassisModel" should go? To OEM-defined?)


First approach was to compile custom bios. I picked up VirtualBox OSE
edition and added following code to FwCommonPlantDMITable function in
DevFwCommon.cpp (in between the "DMI system information (Type 1)" and
the "DMI System Enclosure or Chassis (Type 3)":

/***********************************
* DMI board information (Type 2) *
***********************************/
PDMIBOARDINF pBoard         = (PDMIBOARDINF)pszStr;
CHECKSIZE(sizeof(*pBoard));
pszStr                      = (char *)(pBoard + 1);
iStrNr                      = 1;
pBoard->header.u8Type       = 2; /* Base Board */
pBoard->header.u8Length     = sizeof(*pBoard);
pBoard->header.u16Handle    = 0x0003;
pBoard->u8BoardType         = 0x0A;
READCFGSTRDEF(pBoard->u8Manufacturer, " ", "MyVendor");
READCFGSTRDEF(pBoard->u8Product, " ", "MyProduct");
READCFGSTRDEF(pBoard->u8Version, " ", "MyVersion");
READCFGSTRDEF(pBoard->u8SerialNumber, " ", "12345");
TERM_STRUCT;

Then I built the project and decided to verify pcbios.bin file using
hex editor. But even default DMI data couldn't be found, namely:
static const char *s_szDefDmiBIOSVendor = "innotek GmbH";
static const char *s_szDefDmiBIOSVersion = "VirtualBox";
static const char *s_szDefDmiBIOSReleaseDate = "12/01/2006";
static const char *s_szDefDmiSystemVendor = "innotek GmbH";
static const char *s_szDefDmiSystemProduct = "VirtualBox";
static const char *s_szDefDmiSystemVersion = "1.2";
static const char *s_szDefDmiSystemSerial = "0";
static const char *s_szDefDmiSystemFamily = "Virtual Machine";
static const char *s_szDefDmiChassisVendor = "Sun Microsystems, Inc.";

DevPcBios.h defines following
#define VBOX_DMI_TABLE_BASE 0xe1000
Binary ends at offset of FFFF. So I can't even get to offset of e1000!
Where should I look for these data structures?

Any help or suggestions will be appreciated!
Thank you for the attention.




More information about the vbox-dev mailing list