【USB】macOS usb内核驱动开发入门

一、环境准备

不想我啰哩啰嗦的直接跳到第3点开始执行!!!

1、背景说明

  • 首先要明确我们做啥。其实很简单就是在macOS上写一个运行在内核态的,最简单的USB驱动程序。
  • 那么它简单到什么程度呢?就是说当一个USB设备插入macOS系统的时候,它能感知到并且能打印一些东西。就完了。当然我们必须得保证插入的这个USB设备,在macOS上没有其能匹配的上的驱动才行。否则它就找别的驱动完了,轮不到我们的驱动程序去匹配。
  • 下面的这个我就不翻译了,必须得满足

To run the sample code project in Xcode, make sure to use macOS 10.15.5 or later and Xcode 11.5 or later.

2、SIP是什么?为啥要关闭SIP?

  • SIP(System Integrity Protection ),系统完整性保护是个啥玩意儿呢?为啥要关了呢?
  • SIP干了个事儿,为了你的系统安全,没经过苹果公司审查过的程序SIP是不会让它运行在macOS系统上的。
  • 这下就明白了,但是啥样的程序是苹果公司审查过的呢?这人家说了,从app store下载的程序或者说被苹果公司公证过的开发者开发的程序就算是审查过的程序。其他的一律不是。
  • 那为啥要关了SIP呢?这就很清楚了,我们要运行的驱动程序,不是从app store下载的,我们也没有被苹果公司公证过。所以我们的程序得关了SIP,才能正常跑起来。

3、关闭SIP(intel处理器)

  • 重启机器,并按住Command (⌘)-R组合键。进入恢复模式。如下:
    在这里插入图片描述
  • 打开终端,并输入csrutil disable
  • 重启系统,即可。

4、样例代码下载

下载地址sample-code

二、编译运行

  • 使用xcode打开上述样例代码工程。
  • 点击xcode左上方按钮进行编译,期间可能会有如下报错,按照报错信息登录自己的appleId并选择team即可:

Signing for “SimpleUSBInterfaceDriver” requires a development team. Select a development team in the Signing & Capabilities editor.

  • 编译运行成功会弹出一个终端,我们在终端执行如下命令:
sudo cp -R SimpleUSBInterfaceDriver.kext ~
cd ~
sudo chown -R root:wheel SimpleUSBInterfaceDriver.kext
sudo chmod -R 755 SimpleUSBInterfaceDriver.kext
sudo kextload SimpleUSBInterfaceDriver.kext
  • 上述运行也会报错:

Extension with identifiers com.example.apple-samplecode.SimpleUSBInterfaceDriverVP92JH77XU not approved to load. Please approve using System Preferences.

  • 按照提示在系统设置>隐私与安全性里面允许程序运行,如下:
    在这里插入图片描述
  • 允许之后会提示重启电脑,照做即可。
  • 继续执行上述命令。然后我们在控制台程序中就能看到如下打印, 说明内核加载该驱动程序成功了:
    在这里插入图片描述
  • 但是很遗憾,我目前还没有找到一个usb设备能匹配到这个驱动程序。

三、参考资料

猜你喜欢

转载自blog.csdn.net/C2681595858/article/details/127938586
usb