最直接有效的方式是使用「控制台」app结合终端命令:1. 控制台中搜索kext rejected、com.apple.kextd等关键词;2. 终端用log show --predicate筛选拦截日志;3. 配合kextstat与ls /dev/tty.*交叉验证加载及设备绑定状态。
要查看 macos 中与内核扩展(kext)相关的日志,最直接有效的方式是使用「控制台」app 结合终端命令,聚焦系统级加载、拦截和签名事件。控制台本身不单独分类“kext 日志”,但所有 kext 行为都会记录在系统日志流中,尤其是由 kextd(内核扩展管理守护进程)和 kernel 发出的消息。
在控制台中快速定位 kext 相关日志
打开「控制台」→ 左侧边栏点「日志报告」→ 在搜索框输入以下任一关键词,回车:
- kext rejected:系统明确拒绝加载某扩展(常见于未公证/签名失效)
- stagedextension failed:macOS Catalina 及之后版本中暂存扩展加载失败
- com.apple.kextd:内核扩展管理服务的全部活动,含加载、卸载、阻止等动作
- not signed by Apple 或 code signing blocked:签名验证失败的典型提示
- 你的驱动名(如 CH340、itlwm、DisplayLink):精准追踪特定厂商行为
建议勾选右上角「包括子系统日志」并设置时间范围(例如「过去 1 小时」),避免被海量无关日志淹没。
用终端命令提取 kext 关键日志片段
终端能更灵活地筛选、导出和比对,适合排查升级后突然失效的问题:
- 查最近 24 小时所有被拦截的 kext:
log show --predicate 'subsystem == "com.apple.kextd" && eventMessage contains "blocked"' --last 24h - 查最近一次内核 panic 是否涉及第三方 kext:
log show --predicate 'eventMessage contains "panic"' --last 1h | grep -i "com\|kext" - 确认某驱动是否尝试加载过(即使失败):
log show --predicate 'eventMessage contains "CH340"' --last 1h
输出中重点关注「Sender」字段是否为 kextd,以及「Message」里是否出现 rejected、invalid signature、not authorized 等判定词。
配合 kextstat 验证日志结论是否属实
控制台或终端日志说“被拦截”,不代表它没安装;说“已加载”,也不代表它绑定了设备。必须交叉验证:
- 运行
kextstat | grep -i ch340:有输出 → 确实已加载;无输出 → 日志中的“加载尝试”失败了,或根本没触发 - 再运行
ls /dev/tty.*:若有/dev/tty.usbserial-xxxx出现 → 驱动生效;若无 → 即便 kextstat 显示加载成功,也可能因硬件匹配失败而未创建设备节点 - 检查授权状态:
sudo spctl --status确认系统完整性保护(SIP)是否开启;csrutil status(需恢复模式)确认是否禁用了 kext 加载
查看原始 kernel.log 获取底层线索
某些低层错误(如内存地址冲突、IOKit 初始化失败)只写入 /var/log/kernel.log,控制台默认不实时显示:
- 终端执行:
sudo tail -f /var/log/kernel.log | grep -i "kext\|load\|panic"(实时监控) - 或查看历史快照:
sudo cat /var/log/kernel.log | grep -A 3 -B 1 "kext"(显示匹配行前后上下文) - 注意:该文件需管理员权限,且部分新版 macOS(Sequoia 15+)默认关闭 kernel.log 写入,此时应依赖
log show替代











