Introduce a generic Tools submenu plus a menu-plugin protocol so device
tools can be discovered at runtime instead of being hardcoded in UniXNU.
Structure:
- UniXNUPkg/Include/Protocol/UniXNUMenuPlugin.h: plugin protocol with a
Run callback, a content rect and a DrawStatus footer callback.
- UniXNUPkg/Library/UniXNULib: discover installed plugins, render a
Back + plugin list, and run the selected plugin between the header and
footer while keeping the upper UI visible.
- UniXNUPkg/Driver/AdvancedLogDxe: first plugin; exports the Advanced
Logger log as OneSend QR frames with 5 volume-key speed gears and a
5-segment level bar, drawn with a single Blt.
- UniXNUPkg.dec: adds the menu plugin GUID and PcdUniXNUDeviceModel so
exported log files are named with the device model.
- scripts/unixnu/payload.py, built-in config and docs: `tools = true`
appends a Tools entry and documents the `tools` action.
The exported QR frames are read with OneSend (扫传):
https://onesend.01mvp.com
Scope: loader and boot logic are unchanged. This commit only adds the
menu/UI plugin path and the Advanced Logger tool; device wiring lives in
the platform checkout and is not part of this change.
Add the Linux toolchain to the requirements and a Linux host section to
the build page, in English and Simplified Chinese.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a Linux host the driver sets the environment of the
scripts/linux/setup-toolchain.py toolchain: the xcrun shim answers SDK
queries with the build tree's fakeroot, clang targets plain arm64 for
iOS 17, and CCC_OVERRIDE_OPTIONS turns off two warnings upstream clang
has and Apple clang does not (the archive builders use -Werror and
replay xnu's compile records, so only the clang driver sees them).
- build-xnu-4k-baseline.sh runs scripts/linux/prepare-xnu.py: source
rewrites the xnu sources that assume Apple's tools (SHA/AES assembler
macros, makesyscalls.sh under mawk, kextsymboltool and /dev/null) and
installs TargetConditionals.h into the fakeroot; libs builds
libcc_kext.a from compiler-rt's cc_kext profile sources. xnu's make
also gets the host compiler, mig and the machine sizes a Mac supplies.
ditto becomes cp.
- build-firehose.sh compiles libfirehose_kernel from its xcconfig.
- build-corecrypto-14.py reads project.pbxproj with scripts/pbxproj.py
(same JSON as plutil for all 13,112 objects).
- The kernelcache is decoded with lzfse.
The macOS path is unchanged apart from ditto. Built from the same
sources and configuration on Linux and with Xcode 27.1, the kernels have
the same global symbols, linked objects, archive symbols, 1,265
kalloc_type signatures, and prelink bindings and kexts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/linux/setup-toolchain.py, run once as root, builds into
/opt/unixnu-linux (or PREFIX, or $UNIXNU_TOOLCHAIN):
- clang from llvm-project 58c46bae2118 with llvm-xnu-builtin-type.patch,
which adds __builtin_xnu_type_signature, __builtin_xnu_type_summary,
__builtin_xnu_types_compatible and xnu_usage_semantics; kalloc.h uses
the builtins with no fallback;
- cctools-port 1030.6.3-ld64-956.6 (its master, ld64-609, corrupts the
kernel link), with libdispatch for ld64;
- mig and migcom from bootstrap_cmds-138;
- iig-port, with iig-port-darwin-target.patch;
- xnu-host-cc, the host compiler for xnu's SETUP tools;
- lzfse for the kernelcache.
It installs the Command Line Tools shims (clang, clang++, cc, install,
gm4) under the prefix and xcrun, plutil and codesign in /usr/bin, where
xnu's makefiles call them. libmacho.a and libstuff.a go to /usr/lib and
libdispatch to /usr/local. Each step is skipped when its output exists.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
offline-component-load-probes.patch called native_legacy_display_probe()
from the IOMobileGraphicsFamily load probe in bsd_init.c behind a boot
argument only. A configuration without the legacy display driver then
fails the kernel link with an undefined native_legacy_display_probe,
as examples/device/configs/example_defconfig does. Guard the block with
XNU_NATIVE_LEGACY_DISPLAY, which bsd_init.o already receives, as the
second call site in the same patch does.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The POCO X7 / Redmi Note 14 Pro 5G reaches the iOS 16.5 userland with
HackiOS's xnuloader and uefi-malachite. The UEFI boot path goes straight
into the XNU loader and has no boot menu; the userland does not start
properly yet, and lsd and usermanagerd log errors frequently while the cause
is being located. The page records the stage table and the build and flash
commands; the English and Chinese pages are kept in sync.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Home screen with wallpaper and widgets; the Adreno 840 kernel driver runs
command buffers and has a NativeAdreno-ABI user client, no rendering yet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The bridge build applies the padded-row alias patch and passes a runtime id derived from the translator pin and its patches, so primed shaders survive until the translator changes. Kernel argument values may now contain a slash.
A name that is a symlink in the base system and a directory in the mounted system made the union lookup fall into the symlink and fail with ENOTDIR. Add the matching lookup trace.