我想将xnu
内核移植到ARM架构,最终目标是能够在Qemu中运行完整的内核。虽然我确实意识到这是一项非常艰巨的任务,但我仍然想要了解它。
据我所知,您打算为内核(osfmk/arm/start.s
)编写一个入口点,在那里进行常规初始化(MMU和PlatformExpert),之后可以启动Kext / IOKit子系统并加载特定于CPU的扩展(即陷阱,GPIO,时钟),它们预先链接到二进制文件或由引导加载程序加载(因为内核因为NAND扩展不可用而无法与文件系统交互)。
虽然我对ARM CPU如何工作有一个大概的了解,但我甚至不知道从哪里开始使用xnu
端口,因为我不完全确定如何:
osfmk/kern
中的内容正常工作)。machine_startup()
); osfmk/platform_name
,但其中一些必须集成到osfmk/kern
和其他代码中。是否有关于将 XNU (或至少 Mach )内核移植到不同平台的体面指南,就像Linux指南一样?
答案 0 :(得分:2)
不能给你一个答案,但有一些提示:
“大家伙”在附带特殊硬件的系统上进行此类工作,该系统允许处理器进行单循环,检查寄存器等。并且他们可以在具有以下功能的仿真器上完成大部分工作。相同的设施。硬件调试器设置可能超出你的构建能力(并且购买有点贵),但模拟器是完全可行的(并且是盖茨和艾伦如何开始使用Altair BASIC - 如果艾伦没有写过模拟器盖茨那么还在哈佛玩电子游戏。)
如果没有完整的调试器,如果你附加了任何类型的字符显示,你可以在被调试的代码中嵌入指令,以便在代码进行时将字符写入显示。路径A可能在下一个位置写入“A”(索引保存在某个保留的存储器字中),而路径B写入“B”等等。非常粗糙,但有时足以让小项目得到。
所以我想我建议先写一下模拟器。无论如何,这是熟悉处理器的好方法。
(关于整合的东西,我总是说“嘿,杰里米!为我整合这个,对吗?”)
答案 1 :(得分:1)
由于并非所有源代码都可用,因此您将遇到一些挑战。平台专家的部分源代码作为xnu源代码的一部分提供,但com.apple.driver.AppleACPIPlatform.kext不是。