mirror of
https://github.com/lucannez64/darling-lol.git
synced 2026-10-26 19:47:42 +00:00
74 lines
3.4 KiB
Markdown
74 lines
3.4 KiB
Markdown
# 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:
|
||
|
||
```sh
|
||
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:
|
||
|
||
```sh
|
||
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:
|
||
|
||
```json
|
||
{
|
||
"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.
|