MacOS 音频驱动开发三:最新音频驱动实现Audio PlugIn & AudioDriverKit

53 阅读1分钟

前言

内核扩展(kext)的方式开发驱动已经被苹果抛弃,原因很多,例如如果内核扩展代码有问题会引起内核恐慌造成系统崩溃,安全问题,等等。

一、 实现系统底层服务(包括驱动)的几种技术方案

截屏2024-02-16 15.00.11.png

  • 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…