macOS: current Lilu/VirtualSMC/WhateverGreen/RestrictEvents, no isa-applesmc
The OSX-KVM ESP ships Lilu 1.6.8 / VirtualSMC 1.3.3 / WhateverGreen 1.6.7,
which disable themselves on macOS 26; Apple's SMC driver then runs on QEMU's
isa-applesmc stub and the restart path panics (SMCWDT smcWriteKey
kSMCBadCommand → nested panic after MACH Reboot). Overlay pinned current
releases (upstream.json opencore.kexts) and drop isa-applesmc: with the stub
present VirtualSMC steps aside ("multiple devices present"); alone it carries
the OSK and reboots work (PE restart test: 10 s, clean). RestrictEvents with
revpatch=memtab silences MacPro7,1's "Memory Modules Misconfigured".
- makeOpenCore: kext overlay + Kernel.Add entries for overlaid kexts,
--memory-mb (4 DIMMs), bootArgs default revpatch=memtab
- qemu.nix: deviceArgsFor { appleSmc } (default false); cli: --applesmc for
images built before this change
- vm-driver: reboot-death detection (reset 60 s after a guest reboot request
that never comes back), panics wait for XNU's own auto-reboot, debug dir
works across nixbld users
- generalize: QEMU USB keyboard declared ANSI (no Keyboard Setup Assistant)
- README: architecture, reliability handling, debugging
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XsESshRCoBoUVWV9qKURUF
This commit is contained in:
parent
8dc8f4265d
commit
22daf7720c
8 changed files with 97 additions and 15 deletions
|
|
@ -25,6 +25,7 @@ import shutil
|
|||
import socket
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
|
||||
try:
|
||||
|
|
@ -188,17 +189,25 @@ class Serial:
|
|||
|
||||
|
||||
def prepare_debug_dir(path):
|
||||
os.makedirs(path, exist_ok=True)
|
||||
"""Create the debug dir; builds run as different nixbld users, so the parent
|
||||
is made world-writable and a temp dir is used if the path is not writable."""
|
||||
parent = os.path.dirname(path)
|
||||
try:
|
||||
if not os.path.isdir(parent):
|
||||
os.makedirs(parent, exist_ok=True)
|
||||
os.chmod(parent, 0o777)
|
||||
os.makedirs(path, exist_ok=True)
|
||||
os.chmod(path, 0o777)
|
||||
except OSError:
|
||||
pass
|
||||
path = tempfile.mkdtemp(prefix=os.path.basename(path) + '-', dir='/tmp')
|
||||
os.chmod(path, 0o777)
|
||||
for f in os.listdir(path):
|
||||
if f.endswith(('.png', '.ppm', '.log')) or f.startswith('.grab-') or f == 'qmp.sock':
|
||||
try:
|
||||
os.remove(os.path.join(path, f))
|
||||
except OSError:
|
||||
pass
|
||||
return path
|
||||
|
||||
|
||||
def launch(qemu_args, qmp_sock, log):
|
||||
|
|
@ -270,9 +279,9 @@ def drive(args, proc, qmp, screen, serial, log):
|
|||
log(f'kernel panic #{panics}, giving up')
|
||||
proc.kill()
|
||||
return 3
|
||||
log(f'kernel panic #{panics}, system_reset')
|
||||
qmp.system_reset()
|
||||
screen.stable_since = time.time()
|
||||
# XNU reboots by itself after a panic; only reset if no kernel comes back
|
||||
log(f'kernel panic #{panics}, waiting for the guest to reboot')
|
||||
serial.reboot_at = now
|
||||
continue
|
||||
|
||||
# The guest asked for a reboot but no kernel came back: macOS' restart
|
||||
|
|
@ -351,7 +360,9 @@ def drive(args, proc, qmp, screen, serial, log):
|
|||
log('QEMU exited after powerdown')
|
||||
return 0
|
||||
time.sleep(1)
|
||||
log('guest ignored powerdown, killing QEMU')
|
||||
# macOS ignores the power button at the Setup Assistant; the
|
||||
# volumes are journaled (APFS) and the PE mounts them cleanly next
|
||||
log('guest ignores the ACPI power button here (Setup Assistant); stopping QEMU')
|
||||
proc.kill()
|
||||
return 0
|
||||
continue
|
||||
|
|
@ -395,7 +406,7 @@ def main():
|
|||
p.error('QEMU command line required after --')
|
||||
|
||||
debug_dir = args.debug_dir or f'/tmp/vmix-macos/{args.name}'
|
||||
prepare_debug_dir(debug_dir)
|
||||
debug_dir = prepare_debug_dir(debug_dir)
|
||||
log = Log(os.path.join(debug_dir, 'driver.log'))
|
||||
log(f'mode={args.mode} debug-dir={debug_dir} serial={args.serial_log}')
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue