Hasty Briefsbeta

双语

Writing a basic Linux device driver when you know nothing about Linux drivers

a year ago
  • #Linux
  • #USB
  • #Rust
  • 作者购买了一个仅支持Windows和macOS的Nanoleaf Pegboard Desk Dock,这促使他决定开发Linux驱动。
  • 在逆向工程设备协议并收到Nanoleaf官方文档后,作者着手编写Linux驱动程序。
  • 通过`lsusb`命令识别设备,发现它是Linux内核中通用USB驱动支持的人机接口设备(HID)。
  • 作者考虑了两种驱动方案:内核驱动或通过`libusb`实现用户空间驱动,最终选择后者以简化开发。
  • 创建了`udev`规则允许非root用户访问设备,并为NixOS用户提供了特殊配置说明。
  • 使用Rust语言和`rusb`库开发驱动,从基本的设备枚举和接口声明开始构建。
  • 遇到内核驱动占用设备的问题后,作者通过手动解除绑定解决了该问题。
  • 通过中断端点向设备发送数据,首次成功改变了设备的LED颜色。
  • 改进后的驱动能正确处理中断事件,包括在后台线程轮询设备响应。
  • 最终概念验证表明,用极简代码实现基础USB设备驱动是完全可行的。