为什么Arduino类开源主控的串口在macOS High Sierra 10.13之后版本安装失败?
由于macOS High Sierra 10.13引入了一项新功能,在加载新安装的第三方内核扩展(KEXT)之前,需要用户手动批准。当请求加载用户尚未批准的KEXT时,加载请求被拒绝。将KEXT加载失败视为错误的应用或安装程序需要进行更改以处理这种新情况。
升级到macOS High Sierra时,将自动授予已经存在的第三方KEXT。
请注意,批准并不能保证KEXT兼容,也不会使系统崩溃。存在此功能的原因是使用户可以更好地控制要加载的KEXT,从而可以减少紧急情况。
说明
此功能强制将仅将用户批准的内核扩展加载到系统上。当请求加载用户尚未批准的KEXT时,加载请求将被拒绝,并且macOS会显示图1所示的警报。
图1 被苹果系统阻止的内核扩展
这将提示用户在“系统偏好设置”>“安全性和隐私”中批准KEXT,如图2所示。
图2 加载KEXT的用户许可
该批准界面仅在警报后30分钟内出现在“安全性和隐私”首选项窗格中。在用户批准KEXT之前,将来的加载尝试将导致重新出现批准界面,但不会触发另一个用户警报。
警报显示签署了KEXT的开发人员的姓名,因此用户可以了解一些信息来决定是否批准KEXT。该名称来自用于对KEXT进行签名的Developer ID Application证书的Subject Common Name字段。因此,鼓励开发人员在请求KEXT签名身份时提供适当的公司名称。
当用户批准KEXT时,他们将同时批准由同一Team ID签名的其他KEXT:
· 如果批准的KEXT位于应用程序的捆绑软件中,则同一应用程序捆绑软件中由相同团队ID签名的所有其他KEXT也将被批准。
· 如果批准的KEXT位于应用程序的子目录内/Library/Application Support
,则也将批准由在同一子目录中找到的具有相同团队ID签名的所有其他KEXT。
· /Library/Extensions
由相同团队ID签名的所有KEXT 也会被批准。
一旦获得批准,KEXT将立即被加载或添加到预链接的内核缓存中,具体取决于被阻止的操作。后续加载KEXT的请求将像以前的macOS版本一样静默进行。
通过KEXT的代码签名中的团队标识符和KEXT的捆绑包标识符在系统范围的策略数据库中跟踪批准的KEXT Info.plist
,因此更新已批准的KEXT不会触发新的批准请求。
重申一下,升级到macOS High Sierra时已安装的所有第三方KEXT都会自动获得批准,不需要任何用户操作。
解决办法
当你在使用苹果电脑安装WeeeCode等支持Arduino主板的时候,可能会因为系统版本高,导致遇到串口相关问题,出现串口通信失败。
这时你就需要按照以上的方法,批准一下内核扩展。如本文开始部分提到的,在“系统偏好设置”>“安全性和隐私”中批准KEXT即可。
然后就可以让你的Mac支持串口驱动,愉快进行Arduino烧录了。
感谢您抽出 · 来阅读此文
↓↓↓