Menu

SMBIOS

arsr4du

Home > Configuration > SMBIOS

<key>SMBIOS</key>
<dict>
...
</dict>

This group of parameters is used to mask your PC as a Mac. Clover will do this task automatically based on the given processor, video card and signs of mobility. However, you may choose differently. Get the MacTracker application, choose a model you like and find matching values. Chameleon Wizard may help you with this task. There is not much to comment here, these values are not for beginners. If you know them - change them; otherwise leave it. Calculating them is mostly not possible.

Table of Contents


ProductName

<key>ProductName</key>
<string>MacBook1,1</string>

SMBIOS.table1->ProductName

You can set only this value and Clover will adjust the rest of the parameters automatically according to the model, so you can leave them out. Otherwise your custom values will be preferred.

Clover has built-in definitions for following models:

  • MacBook1,1
  • MacBook2,1
  • MacBook4,1
  • MacBook5,2
  • MacBookPro5,1
  • MacBookPro8,1
  • MacBookPro8,3
  • MacBookPro9,2
  • MacBookAir3,1
  • MacBookAir5,2
  • Macmini2,1
  • Macmini5,1
  • Macmini6,2
  • iMac8,1
  • iMac10,1
  • iMac11,1
  • iMac11,2
  • iMac11,3
  • iMac12,1
  • iMac12,2
  • iMac13,1
  • iMac13,2
  • MacPro3,1
  • MacPro4,1
  • MacPro5,1

All other models require setting all fields manually.

In case the model is not set, Clover will automatically choose one for you.

Some parameters like BoardSerialNumber should be generated and specified manually to be unique though.


Family

<key>Family</key>
<string>MacBookAir</string>

It is equal to model without model number.


SmUUID

<key>SmUUID</key>
<string>00000000-0000-1000-8000-010203040506</string>

This is the UUID, which is written into the SMBIOS table. Apparently it makes sense to fill the last pairs of digits with the MAC address of your ethernet card. This UUID will also be used in case CustomUUID is missing. It also be used to initialize ROM RtVariable (use by iMessage) in case ROM is missing.


FirmwareFeatures

<key>FirmwareFeatures</key>
<string>0xC0001403</string>

SMBIOS.table128->FirmwareFeatures

These digits exceed the standard SMBIOS and are part of Apple's specification. Different real Macs show different values and no description of the meaning exists. The only clue is provided by the sources of the bless command:

  && (featureFlags & 0x00000001)) {
  contextprintf(context, kBLLogLevelVerbose,  "Legacy mode suppported\n");

Therefore, we too need an odd number here.


SerialNumber

<key>SerialNumber</key>
<string>W8000AAAAA</string>

Clover will use one specific value here per each model, which needs to be replaced by your own serial number. There are two formats of serial number, which one to use depends on the model. There are tools to generate a serial number for a given model, or it can be created manually, according to http://prasys.info/2009/11/understanding-mac-serial-number/ or something newer. The serial number used by Clover is most probably banned already.


BoardSerialNumber

<key>BoardSerialNumber</key>
<string>C02032101R5DC771H</string>

SMBIOS.table2->SerialNumber

Don't mix it with system serial number. Clover will use one specific value here, which needs to be replaced by your own serial number. It is required for working iCloud and iMessage services (initialize MLB RtVariable if missing). The length must be 17 digits, consisting of letters from the Latin alphabet and numbers. The serial number used by Clover is most probably banned already.


BiosVersion

<key>BiosVersion</key>
<string>MB11.YACC.0061.53PH.B03</string>

We see only the first, third and fifth groups in System Profiler, but really we should specify the full Boot ROM version in config.


BiosReleaseDate

<key>BiosReleaseDate</key>
<string></string>

It's the release date of Boot ROM specified in BiosVersion key.


BoardType

<key>BoardType</key>
<integer>10</integer>

SMBIOS.table2->BoardType

This parameter was introduced for the MacPro, which uses 11 (ProcessorBoard) instead of 10 (Motherboard), apparently for historical reasons. The effect is not clear, however it can be seen in Profiler.


Mobile

<key>Mobile</key>
<true/>

Usually Clover will automatically detect the mobility of a system, e.g. if is powered by a battery, needs energy saving, or not. Change it to trick the system into thinking that a battery is not available, or otherwise.


ChassisType

<key>ChassisType</key>
<string>0x10</string>

SMBIOS.table3->Type

Used as an indirect indication for platform mobility. Here is a table according to SMBIOS standards:

Type|Value :---|---: MiscChassisTypeOther|0x01 MiscChassisTypeUnknown|0x02 MiscChassisTypeDeskTop|0x03 MiscChassisTypeLowProfileDesktop|0x04 MiscChassisTypePizzaBox|0x05 MiscChassisTypeMiniTower|0x06 MiscChassisTypeTower|0x07 MiscChassisTypePortable|0x08 MiscChassisTypeLapTop|0x09 MiscChassisTypeNotebook|0x0A MiscChassisTypeHandHeld|0x0B MiscChassisTypeDockingStation|0x0C MiscChassisTypeAllInOne|0x0D MiscChassisTypeSubNotebook|0x0E MiscChassisTypeSpaceSaving|0x0F MiscChassisTypeLunchBox|0x10

Clover will use a value according to the set Mac model, like it is used in real Macs. The effect, except mobility settings, is unclear.


ChassisAssetTag

<key>ChassisAssetTag</key>
<string>LatitudeD420</string>

SMBIOS.table3->AssetTag

This field is never used with real Macs. We can use it for our own purpose, for example in the HWSensors project.


Trust

<key>Trust</key>
<true/>

Used to give priority to memory descriptor values found in SMBIOS or SPD. Change if your memory is described incorrectly in Mac. Default is <true/>.


Memory

<key>Memory</key>
<dict>
  <key>Channels</key>
  <integer>2</integer> OR <string>1</string>
  <key>SlotCount</key>
  <integer>24</integer> OR <string>4</string>
  <key>Modules</key>
  <array>
    <dict>
      <key>Slot</key>
      <integer>0</integer> OR <string>5</string>
      <key>Size</key>
      <integer>2048</integer> OR <string>4096</string>
      <key>Frequency</key>
      <integer>1600</integer> OR <string>1333</string>
      <key>Vendor</key>
      <string>Some Company</string>
      <key>Part</key>
      <string>123456ABCDEF</string>
      <key>Serial</key>
      <string>ABCDEF123456</string>
      <key>Type</key>
      <string>DDR/DDR2/DDR3</string>
   </dict>
  </array>
</dict>

Inject custom memory module tables into SMBIOS if original SPD and SMBIOS provide incorrect or incomplete information.

  • Channels - Number of hardware channels supported by your memory chipset, usually two.

  • SlotCount - Total count of memory slots in your system. Max 24 (for now).

  • Modules - An array of INSTALLED modules, if your slot is empty don't include an entry for it.

For each module:

  • Slot - Physical slot location in which the module is installed.

  • Size - Size of the module in megabytes.

  • Frequency - Speed of the module in megahertz.

  • Vendor - Memory manufacturer name

  • Part - The part number identifier.

  • Serial - The module's serial number.

  • Type - The memory module's type.


Slots

<key>Slots</key>
<array>
  <dict>
     <key>Device</key>
     <string>ATI/NVidia/LAN/WIFI/Firewire</string>
     <key>ID</key>
     <integer>2</integer>
     <key>Name</key>
     <string>Device name</string>
    <key>Type</key>
    <integer>0</integer>
  </dict>
</array>

AAPL,slot-name injector. It allows you to add devices into System Profiler's PCI Cards section. This is a property that is usually injected by DSDT or property strings but this is a wrong way to go.

The injection of this property requires Name (_SUN, 0x02) to be present in the device's DSDT section. You can set this to any one byte number but 0 and 1 because of compiler optimizations. If you don't use a custom DSDT you may instead set DSDT Mask Fix bits for those devices. Sample:

Device (GIGE)
{
    Name (_ADR, 0x00050000)  // _ADR: Address
    Name (_SUN, 0x02)  // _SUN: Slot User Number
  • Device - For now it can only be one of these: ATI, NVidia, LAN, WIFI or Firewire.
  • ID - Must be the same number defined into your DSDT in _SUN.
  • Name - The string that you want to assign to AAPL,slot-name.
  • Type - Set to 0 for PCI, 1 for PCIe 1x, 2 for PCIe 2x, etc.