文章目录

  • 一、环境准备
    • 1、背景说明
    • 2、SIP是什么?为啥要关闭SIP?
    • 3、关闭SIP(intel处理器)
    • 4、样例代码下载
  • 二、编译运行
  • 三、参考资料

一、环境准备

不想我啰哩啰嗦的直接跳到第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设备能匹配到这个驱动程序。

三、参考资料

  • 官方教程,英文版,一步步很详细

【USB】macOS usb内核驱动开发入门相关推荐

  1. 嵌入式 Linux 内核驱动开发【The first day: 36093万字】

    嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...

  2. 树莓派基于Linux内核驱动开发详解

    一.驱动认知 首先理解Linux内核框图 文件系统认知,Linux内核框图 1.什么是驱动 linux内核驱动.软件层面上的驱动 广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序 ...

  3. 九七的Windows内核驱动开发 WIN10-2004+VS2019+WDK驱动开发环境安装及配置

    WIN10-2004+VS2019+WDK驱动开发环境安装及配置 一.定义介绍   本节介绍如何在Windows10系统(2004版本,操作步骤中有如何查看版本)中安装VS2019及WDK开发包,并进 ...

  4. Linux内核驱动开发-USB热插拔信息调取

    前言: 前段时间上科大嵌入式安卓开发溜了个作业,开发一个驱动,可以实现读取USB热插拔信息,程序调用显示USB设备名称和插拔时间.代码已经放在了我的Github上,供大家参考. 思路: USB热插拔的 ...

  5. USB简述(Linux驱动开发篇)

    一.USB简述 USB 全称为 Universal Serial Bus,翻译过来就是通用串行总线. 1.按照版本划分: USB 目前可以划分为 USB1.0.USB2.0.USB3.0 以及正在即将 ...

  6. Linux 内核驱动开发基础

    1.裸板驱动和linux驱动的异同点 裸板驱动:uart驱动程序:uart_inituart_putsuart_getsi2c控制器驱动:i2c_starti2c_stopi2c_txi2c_rxg- ...

  7. linux 内核驱动开发

    一.为什么要学习内核? 有些人要学习内核,而有些人则可以不学习它.你如果以后要从事系统研发或驱动开发的话,就要学习内核. 刚刚接触内核,主要学习内核的接口函数.不要深入的去读内核,因为你读也读不懂,内 ...

  8. linux内核驱动开发 培训,嵌入式Linux驱动开发培训 - 华清远见教育集团官网

    9.LINUX下USB驱动开发基础 9.1 USB规范介绍 9.2 USB主机控制器 9.3 USB HUB 9.4 USB设备状态 9.5 USB描述符 9.6 USB请求 9.7 USB通讯数据格 ...

  9. Android Camera驱动开发入门必备知识

    camera驱动开发所需要具备基础知识,如果你还没有了解过camera模块,那么这些基础必备的知识,将会对你比较有用,俗话说"磨刀不误砍柴工",基本功配置好了,相信你在做camer ...

最新文章

  1. java hive 查询语句,使用java连接hive,并执行hive语句详解
  2. 一文告诉你 Java RMI 和 RPC 的区别
  3. 字符串拼接+和concat的区别
  4. 在Spring MVC中,InternalResourceViewResolver做什么?
  5. WPF的ComboBox 数据模板自定义
  6. 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作...
  7. SQL读写CSV文件
  8. centos7.9使用jenkins部署springcloud微服务_配合SVN_脚本_实现自动部署后端以及前端程序_亲测成功---持续集成部署Jenkins工作笔记0023
  9. [01] 四大组件之Activity
  10. JSTL和EL的使用
  11. 无法设置或未定义null引用的属性innerHTML
  12. 关于用Sql Server 2008 搭建一个多评委多客户端的比赛打分平台的整体构想
  13. 那些让您相见恨晚的app
  14. 编程获取中国股市行业分类并作图--使用python、tushare、pyecharts实现
  15. 情感理论-emotion theory
  16. 为所欲为表情包制作器
  17. PHP使用QQ邮箱发送邮件无需SMTP服务器
  18. ubuntu各种方法卸载软件
  19. 查看oracle数据库(database)的版本命令
  20. MSF生成一个木马与使用

热门文章

  1. mysql查询选课数_[MySQL]查询学生选课的情况(二)
  2. NPN型三极管的工作原理
  3. 今天搞了一下 老DELLT3600工作站···
  4. 【爬虫】每天定时爬取网页小故事并发送至指定邮箱
  5. var、let、const的区别
  6. win10当生产服务器稳定吗,真让人不省心!Win10最稳定版出幺蛾子 微软已证实
  7. css代码上一章 下一章,第一章、css和文档
  8. 计算机三级网络技术小技巧,计算机三级PC技术过关心得技巧
  9. 计算机开机最快设置,如何让电脑启动速度变快
  10. gtx1060 3g和6g性能差距 gtx1060 3g和6g吃鸡区别