[vbox-dev] BIOS DMI data
Dmitry Tokarenko
tokarenkodmitry at gmail.com
Tue May 25 01:54:13 PDT 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