6

我想将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 指南一样?

4

2 回答 2

2

不能给你答案,但有一些提示:

“大佬”在附加了特殊硬件的系统上进行此类工作,该硬件允许处理器进行单循环,检查寄存器等。他们可能在具有相同设施的仿真器上完成大部分工作。硬件调试器设置可能超出了您的构建能力(而且购买起来有点贵),但模拟器是完全可行的(这也是盖茨和艾伦开始使用 Altair BASIC 的方式——如果艾伦没有编写模拟器盖茨会还在哈佛玩电子游戏)。

如果没有完整的调试器,如果您连接了任何类型的字符显示,您可以在被调试的代码中嵌入指令,以便在代码进行时将字符写入显示。路径 A 可能会在下一个位置写“A”(保存在某处的保留内存字中的索引),而路径 B 会写“B”等。非常粗糙,但有时对于小型项目来说已经足够了。

所以我想我建议先写模拟器。无论如何,这是熟悉处理器的好方法。

(至于整合东西,我总是说“嘿,杰里米!帮我整合这个,好吗?”)

于 2011-12-23T13:08:10.613 回答
1

您将遇到一些挑战,因为并非所有源代码都可用。Platform Expert 的部分源代码作为 xnu 源的一部分提供,但 com.apple.driver.AppleACPIPlatform.kext 不提供。

于 2012-02-11T07:48:39.917 回答