[vbox-dev] BIOS DMI data

Frank Mehnert Frank.Mehnert at Sun.COM
Tue May 25 09:49:50 GMT 2010


Dmitry,

On Tuesday 25 May 2010, Dmitry Tokarenko wrote:
> 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?)

No, for chassis there is currently a separate, disabled section.
See DevFwCommon.cpp line 650.

The board information is currently not provided at all.

> 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?

The DMI tables are generated on the fly during VM boot. Therefore
you should boot some guest and read the physical memory 0xe1000.
For instance, boot a Linux guest and do

  dd if=/dev/mem of=dmi.bin bs=1K count=1 skip=900

Then use a hex dump tool, for instance xxd to dump the file dmi.bin

Kind regards,

Frank
-- 
Dr.-Ing. Frank Mehnert

Sitz der Gesellschaft:
Sun Microsystems GmbH, Sonnenallee 1, 85551 Kirchheim-Heimstetten
Amtsgericht München: HRB 161028
Geschäftsführer: Jürgen Kunz
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://www.virtualbox.org/pipermail/vbox-dev/attachments/20100525/fa234351/attachment.sig>


More information about the vbox-dev mailing list