Files
darling-lol/docs/PLATFORM_IDENTITY.md
T

3.4 KiB
Raw Blame History

Explicit platform identity overrides

By default, Darling keeps the existing host-derived UUID and DARLING- serial. No override file is generated by installation or launch. This tool imports values supplied by the user; it does not generate Apple serials or replace OS, CPU, GPU, or security metadata.

Preview an OpenCore config.plist, a flat GenSMBIOS JSON file, or an existing darling-smbios.conf without changing the selected prefix:

python3 tools/configure-darling-platform.py --prefix /absolute/prefix --import /path/to/config.plist

After reviewing the preview, shut down that prefix and explicitly save:

DPREFIX=/absolute/prefix python3 build/runtime/tools/stop-darling-runtime.py
python3 tools/configure-darling-platform.py --prefix /absolute/prefix --import /path/to/config.plist --write

The default prefix selection is --prefix, then DPREFIX, then saved build/config.json, then ~/.darling. Writing refuses a live prefix. The configuration is activated when that prefix's iokitd starts again; it is an immutable startup snapshot. An absent or invalid configuration preserves the existing defaults. Invalid daemon-side configuration is reported once.

The file is <prefix>/private/etc/darling-platform.plist. It uses this schema:

{
  "schema": 1,
  "properties": {
    "IOPlatformSerialNumber": "USER-SUPPLIED",
    "model": "UserSuppliedModel"
  }
}

Supported properties:

Property Configuration value IOKit value
IOPlatformSerialNumber Printable ASCII string, 1–64 characters NSString
IOPlatformUUID Nonzero UUID; normalized to uppercase NSString
manufacturer, model, product-name, board-id Printable ASCII string, 1–128 characters NUL-terminated NSData
mlb-serial-number Printable ASCII string, 1–64 characters NUL-terminated NSData
ROM Exactly 6 bytes; JSON accepts hexadecimal text NSData
system-id Exactly 16 bytes; JSON accepts hexadecimal text NSData

Supplying a model also supplies the matching product name unless one is explicitly provided. Supplying a UUID derives its EFI little-endian system-id; a conflicting explicit system ID is rejected. No other missing fields are invented. These properties belong to the existing platform service; the tool does not manufacture a firmware/NVRAM registry hierarchy.

For OpenCore, the importer reads PlatformInfo/Generic (or a standalone Generic dictionary): SystemProductName, SystemSerialNumber, SystemUUID, MLB, and ROM. It ignores unrelated boot and security settings. GenSMBIOS aliases include Type, Serial, Board Serial, and SmUUID. Legacy SMBIOS_* identity keys are accepted from .conf; parsing never executes shell expressions.

Existing configured fields survive a partial import. A new explicit UUID replaces its previously derived system ID. --set KEY=VALUE can update an individual field. Unknown schema versions, unsupported properties, malformed values, and duplicate JSON fields are rejected.

Writes are atomic with mode 0600. Repeating the same write changes nothing. The first previous configuration is kept as darling-platform.plist.before-platform-change, also with mode 0600. Importing an older .conf never edits that source. Symlinks escaping the prefix are rejected. To restore the original defaults, remove the override file while the prefix is stopped, then restart it.