macos 通过自动化、辅助功能和完全磁盘访问三类权限协同控制应用对已加载驱动的通信权,而非授予驱动安装权;驱动本身须经签名与公证方可被系统接纳。
macos 对设备驱动的访问控制,核心在于系统级权限隔离机制,而非像 windows 那样直接授予应用“驱动安装权”或“内核模块加载权”。第三方应用无法自行安装、替换或直接调用内核驱动(kext),尤其在 macos 10.15 catalina 及后续版本中,apple 已全面禁用非签名、非公证的内核扩展,并通过 system integrity protection(sip)和 driverkit 框架重构了硬件交互方式。因此,“应用对特定设备驱动的访问权”,实际体现为:应用能否通过受控接口与已加载的驱动通信——这依赖于三类关键权限协同生效。
自动化权限:控制已授权驱动对应的应用
当应用需通过 AppleScript、JXA 或快捷指令间接操作硬件(如 STLink 调试器触发烧录、USB 串口工具收发数据),它必须先获得“自动化”权限,才能向目标驱动关联的宿主应用(如 st-util 后台服务、Serial 工具或系统自带的 USB Serial 驱动)发送指令。
- 路径:系统设置 → 隐私与安全性 → 自动化 → 找到你的应用 → 勾选其可控制的后台进程(如 Terminal、st-util、或自定义守护进程)
- 若目标进程未出现在列表中,需先运行一次该进程并触发一次自动化操作(例如点击“连接设备”),系统才会将其注册为可授权项
- 此权限不赋予驱动加载能力,但决定应用能否“指挥”已被系统接纳的驱动服务
辅助功能权限:绕过 UI 隔离,实现底层设备交互
部分嵌入式调试工具(如基于 DriverKit 的现代 STLink 封装、某些 HID 测试工具)会以“辅助功能”形式请求系统级输入/输出通道。这类权限允许应用绕过常规沙盒限制,直接向 I/O Kit 层发送请求——这是 macOS 当前支持第三方硬件深度交互的少数合法路径之一。
利用 macOS 原生能力实现本地语音识别与合成。通过 yap (Apple Speech.framework) 进行语音转文字,通过 say + ffmpeg 进行文字转语音。完全离线,无需 API 密钥。具备音质检测与智能选声功能。
- 路径:系统设置 → 隐私与安全性 → 辅助功能 → 点击左下角锁图标解锁 → 点击 + 添加你的应用
- 启用后,应用才可能调用 IOConnectCallMethod 等底层 API 访问 USB/HID 设备句柄
- ⚠️ 此权限风险较高,仅对明确声明使用 DriverKit 或提供官方 macOS 支持的工具启用
完全磁盘访问权限:读取设备节点与配置文件
某些驱动(尤其是开源工具链如 openocd、pyOCD)不依赖内核模块,而是通过用户态直接访问 USB 设备节点(如 /dev/tty.usbmodem* 或 /dev/disk2s1)。macOS 将这些设备文件视作“系统资源”,需显式授予“完全磁盘访问权限”才能打开。
- 路径:系统设置 → 隐私与安全性 → 完全磁盘访问权限 → 解锁 → 点击 + 添加 Terminal 或你的调试 GUI 应用
- 注意:仅添加终端本身即可覆盖多数命令行工具;GUI 工具若自行调用 libusb,则必须单独添加
- 若仍报 Permission denied,检查设备节点权限:
ls -l /dev/tty.usb*,必要时用sudo chmod 666临时修正(不推荐长期使用)
驱动签名与公证:系统准入的前置门槛
真正决定“驱动能否存在”的,不是应用权限,而是驱动自身的合规性:
- 内核扩展(kext):自 macOS 11 Big Sur 起已弃用,新开发必须转向 DriverKit
- DriverKit 驱动:必须由 Apple 公证(Notarization)并在启动时由系统加载,用户无权手动启用/禁用
- 用户态驱动(如 libusb):无需系统加载,但依赖上述三项权限打通访问链路
- 未公证的驱动包会被 Gatekeeper 拦截,即使开启“任何来源”,SIP 仍会阻止其注入内核










