bctrap什么意思_BCR和TCR指的是什么

2024-12-2520:53:28百科知识9

之前,有人在QEMU上成功运行了IOS内核并挂载了根文件系统。为了研究IOS内核启动流程以及IOS内核相关安全措施,经过一个多星期的研究和调试,成功地在Khadas VIM3开发板上运行了IOS内核。以下记录了调试过程中遇到的一些问题及解决方案。

IOS使用的是xnu内核,当前苹果已开源了xnu源码的部分内容,可以在Github上找到。参考了QEMU上的实验文章,了解了XNU及IOS启动的基本知识。

在搭建基本的调试环境时,使用了Minos作为Hypervisor。由于IOS解压出来的内核文件中的内核symbol越来越少,对调试帮助不大,因此采取了一些工具和技术支持,如使用ARM DS5作为调试工具。苹果的SOC使用了64位的ARMv8架构,因此需要特别注意指令集的兼容性。

在加载内核文件时,需要解析内核文件获取内核的地址,并根据内核MACH-O文件提供的内存布局信息计算出ranmdisk、device-tree、bootarg的地址。然后加载内核镜像到对应内存区域,设置内核启动参数和command line。为了减少移植过程中的问题,为VM分配了与iphone6一样多的内存,即1G。

xnu系统启动时,bootloader需要将启动参数传递给内核。这块的处理相对简单,只需要把内核启动参数的硬件地址存放到x0寄存器即可。在Minos中添加了相关代码以支持xnu虚拟机的启动。

关于AIC(Apple Interrupt Controller)的中断处理和timer支持,在Minos中进行了简化处理,只需要实现给内核发送FIQ即可。关于timer的支持也放在了hypervisor里面,IOS也使用了ARM架构的标准timer。

为了查看内核输出的log,实现了一个虚拟的串口设备。ios内核使用了三星的串口IP,相关代码可以在xnu源码中找到,串口的模拟放在了mvm中来实现。

在解决了一系列问题后,如MMU配置、DC ZVA指令模拟等,终于在VIM3开发板上看到了kernel的log输出。系统在某个点停止了运行,没有panic也没有任何输出。这可能是由于系统卡在某处或等待某个事件、信号。由于在开发板上没有有效的调试工具和方法,当前进展暂时停在这里。

  • 版权说明:
  • 本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 295052769@qq.com 举报,一经查实,本站将立刻删除。