libusb 如何访问内核的东西?

Tho*_*mas 10 drivers usb

据我了解:

  • 一般来说,驱动程序运行在内核空间,可以从用户空间调用。
  • 只有内核空间的代码才能调用usb底层的东西/ ioctl
  • libusb 是一个库,所以它会在用户空间编译和运行

那么如何libusb实现低级USB呢?

Gil*_*il' 10

Libusb 是一个与 USB 设备交互的库,就像curses 是一个与文本终端交互的库,ALSA(更准确地说是它的 libasound 组件)是一个与奥迪设备交互的库,等等。内核处理硬件交互。它提供了设备文件,应用程序可以打开与硬件交互,通过readwrite系统调用ioctl

ioctl 是一个系统调用:它允许应用程序(用户级代码)发出由内核处理的请求。

Libusb 允许应用程序注册回调函数,这些回调函数在设备需要报告时执行。以下是幕后信息流的粗略概述:

  • 总线上的电信号触发 USB 控制器上的事件。
  • USB 控制器在主处理器上发出中断信号。
  • 处理器在操作系统内核中执行中断处理程序。
  • 内核注意到一个过程,目前在阻塞readwrite或者ioctl对设备的文件系统调用,并导致该系统调用返回。
  • 在用户登陆过程中,当系统调用返回时,执行库代码。
  • 库代码执行应用程序员注册的回调函数。