MacOS 内核开发一:环境搭建及驱动开发

75 阅读2分钟

写在前面:

因为以前内核扩展的开发如果出问题会,导致kernel panic,引起系统崩溃。所以苹果公司在macOS10.15及以后,就已经开始逐渐抛弃限制内核扩展,推出三种系统扩展(网络扩展、端点安全、驱动扩展)。特别在M1芯片的机器上又对内核开发做了很多限制,移除大量内核符号,导致我们软件无法采用原来的内核方案运作,被迫切换到系统扩展上来。不过因为个人学习的原因,这篇文章还是从以前的内核开发开始学习。(内核扩展目前在实现一些最底层的功能依然有用,只不过苹果管理严格,需要签名等一系列安全处理)

一、开发环境搭建:

  • 正常苹果开发(Xcode那些)
  • 一台备用Mac,专门用来开发内核
  • 如果没有备用Mac请参考这篇博文使用虚拟机。--链接

目前在macOS上开发驱动程序,主要分为2种,内核扩展 和目前系统扩展中的--驱动扩展。 内核扩展 Kernel extension(kext): 支持无法使用dext或系统扩展程序实现的其他底层服务。 驱动扩展 DriverKit extension (dext): 主要用来管理自主硬件设备和系统接口之间的通信。很大程度可以平替IOKit的很多功能。

内核扩展入门:这里有一篇开发入门的 内核扩展开发博文,HelloWorld-内核扩展

驱动及系统扩展入门:留着后续学习

二、驱动开发相关I/O Kit框架:

Mac OSX 设备驱动程序使用I/O Kit的框架开发。I/O Kit 包含的头文件和库中,一部分为驱动程序提供服务,另一部分可以在用户空间代码中使用,用于和内核驱动程序进行交互。它主要由2个部分组成:

  • Kernel.framework
  • IOKit.framework