前言
内核扩展(kext)的方式开发驱动已经被苹果抛弃,原因很多,例如如果内核扩展代码有问题会引起内核恐慌造成系统崩溃,安全问题,等等。
一、 实现系统底层服务(包括驱动)的几种技术方案
- DriverKit extension (dext) 驱动的主要实现,例如后面需要开发的Audio PlugIn-虚拟声卡,它主要是用来和硬件设备和系统底层服务进行交互。
- system extensions 通过使用内核相关底层服务开发一些系统特性,比如部分网络和安全功能。
- kernel extension (kext) 直接和内核交互,实现一些最底层的功能。
目前实现驱动,用户空间和内核空间的交互主要是通过DriverKit extension 和 system extensions。本篇主要目的就是学习这2项,并最终理解Audio PlugIn,并可以自己实现一个虚拟声卡。
二、MacOS 音频驱动
这里有两个概率要注意,AudioDriverKit和AudioServerPlugIn。
- AudioDriverKit 是 DriverKit 下提供的一套开发音频驱动套件。
- AudioServerPlugIn 是CoreAudio 下的开发音频插件的一套接口。
注意⚠️ AudioDriverKit 主要是用于有实体硬件设备的驱动开发,AudioServerPlugIn 更适合开发虚拟声卡。本篇主要目的是开发虚拟声卡。所以主要是学习音频插件的开发。主要内容参考苹果官方文档creating_an_audio_server_driver_plug-in
三、音频插件实现原理
生成一个UUID(可以用系统的方法)www.yimenapp.com/kb-yimen/30…