我想将xnu
内核移植到 ARM 架构,最终目标是能够在 Qemu 中运行完整的内核。虽然我确实意识到这是一项非常艰巨的任务,但我仍然想尝试一下。
据我所知,您打算为内核 ( osfmk/arm/start.s
) 编写一个入口点,在其中进行一般初始化(MMU 和 PlatformExpert),之后可以启动 Kext/IOKit 子系统并加载 CPU 特定的扩展(即陷阱, GPIO,时钟),它们要么预先链接到二进制文件中,要么由引导加载程序加载(因为由于 NAND 扩展尚不可用,内核无法与文件系统交互)。
虽然我对 ARM CPU 的工作原理有一个大致的了解,但我什至不知道从哪里开始使用该xnu
端口,因为我不完全确定如何:
- 进行低级调试(因为内核调试工具在启动早期不可用)。
- 将 ARM 分支与内核源代码树的其余部分集成(即确保其中的东西
osfmk/kern
正常工作)。 - 为独立于平台的内核创建一个健全的环境来启动(
machine_startup()
); - 修复主内核代码中的一些平台特定代码(大多数平台代码仅限于,
osfmk/platform_name
但其中一些必须集成到osfmk/kern
其他代码中)。
是否有任何关于将XNU(或至少Mach)内核移植到不同平台的体面指南,就像有 Linux 指南一样?