6.1 KiB
6.1 KiB
Troubleshooting
Procedure
- Save the failing command and first error. For a boot failure, record the last confirmed bring-up stage.
- Run
./unixnu status --jsonto confirm the device, source origins, OS profile and output directory. Inspect the corresponding log or report. - Find the symptom in the build, IPSW or boot table below. Check the named input before applying its action.
- Repeat the failed step with the corrected input. Repack the boot image after changing firmware or payload. Record whether the original error is resolved and which checkpoint now completes.
- If the cause remains undetermined, save an evidence bundle with the command, revisions and logs for investigation.
Early boot checks
- A top green bar marks DarwinBoot's handoff before the kernel branch. Follow the green-bar diagnosis.
- To apply changed boot arguments, rebuild the payload and boot image, then boot that image. Follow apply boot arguments.
- Save firmware and image paths in unixnu.local.toml for
./unixnu firmware,./unixnu kernel, and./unixnu bootimg.
Build
| Symptom | Check | Action |
|---|---|---|
no device repository |
-D or UNIXNU_DEVICE |
Pass the device repository |
has no board.toml |
Device repository layout | Create board.toml |
is an EXAMPLE device repository |
[board] example |
Complete the template inputs and remove board.example = true |
no configuration |
out/<device>/<os_profile>/<config>/.config |
Run unixnu defconfig NAME |
no Mu-Silicium checkout |
--uefi path |
Pass a checkout with Resources/Scripts/mkbootimg.py |
is not a Mu-Silicium checkout |
Path | Point --uefi at the root of the checkout |
no edk2 tree |
--edk2 or fetched edk2 |
Run unixnu fetch or pass a Mu_Basecore tree |
| Missing archive in the kernel step | [kernel] archives and logs/archive-NN-*.log |
Fix the builder entry or supply the archive |
no builder makes it |
The named *_ARCHIVE path |
Add a builder to [kernel] archives or place the archive in the build tree |
kernelcache not found |
--kernelcache or IPSW |
Fetch the IPSW or pass the file |
does not match the kernelcache |
[kernel.prelink] kernelcache_sha256 |
Use the pinned image |
| Firmware volume size mismatch | [uefi_fd] size |
Rebuild the firmware or correct the config |
Payload larger than size_mib |
[payload] size_mib |
Raise the size or remove files |
not one of the trust caches this board accepts |
[payload] trust_cache_sha256 |
Use an accepted bundle or pass the owner-signed bundle with --owner-trust-cache |
unsupported kernel argument |
Argument characters | Use letters, digits, _, ., - |
command line is ... bytes |
Argument count | Shorten the line to 1000 bytes |
IPSW
| Symptom | Check | Action |
|---|---|---|
this IPSW is ... |
Product, version, build | Use the image the board describes |
no Erase build identity |
Device class, chip ID, board ID | Correct the identity values |
does not support range requests |
Remote URL | Use a server with range support or a local file |
differs from the pinned sha256 |
[ipsw.sha256] |
Use the pinned member or update the pin |
expected exactly one arm64 slice |
Kernelcache | Use an ARM64 kernelcache |
Boot
| Symptom | Check | Action |
|---|---|---|
fastboot does not see the device |
Driver, cable, bootloader mode | Install the USB driver and reboot to bootloader |
| Image starts and resets | Boot image header, base and size | Check the Mu-Silicium config and BootShim flags |
| Firmware stalls | Last firmware log and initialized resources | Capture the output, reset to bootloader and follow bring-up |
| No display | GOP driver | Use console = "text" or a serial console |
| No menu | Configuration path | Place unixnu.toml at \EFI\UniXNU\unixnu.toml |
| No boot entry | Payload volume | Check boot.json for a nonzero ramdisk_bytes, the FD for UniXNURamDiskDxe/DiskIoDxe/FAT, the FDT initrd range, and EFI/UniXNU/unixnu.toml. Follow payload discovery. |
| Driver failed | First failure reason in the menu | Fix the driver path or its dependencies |
no loader protocol installed |
DarwinBoot in the firmware volume | Add DarwinBoot to the FDF or the payload |
loader revision 1 cannot accept kexts |
Loader revision | Use a revision 2 loader or remove the kexts |
boot refused: ...; firmware retained |
DarwinBoot log | Check the kernel, ADT, trust cache and placeholders |
| Kernel panics at entry | Page tables, kernel window, boot arguments | Use the QEMU fixture and the boot progress log |
| Panic names a provider | Device tree node or driver archive | Add the node or enable the driver |
| No root device | Userdata image, UUID, capacity | Flash the image, check the UUID and window offsets |
| Data store window refused | Seed size, sheng-log-reserve, root image |
Recalculate root, Data and log allocations; select a seed size that fits |
| Display assertion in userland | Display provider and boot arguments | Check the display driver and the focus arguments |
Logs
| Source | Location |
|---|---|
| Build | out/<device>/<os_profile>/<config>/logs/ |
| Boot manager | Serial console, UNIXNU: lines |
| Loader | Serial console, DARWINBOOT: lines |
| Kernel | Serial console |
| QEMU | --log file and the .clean.log companion |
Inspect a report
jq . out/<device>/<os_profile>/<config>/boot/boot.json
jq . out/<device>/<os_profile>/<config>/payload/payload.json
jq . out/<device>/<os_profile>/<config>/userdata/userdata-root.json
The reports record the input hashes. Compare them with the files you supplied.
Module origin
./unixnu status
The output lists every module and its origin. A local module is marked and reported as not pinned.