现在,对于有缺陷的HID硬件或其他不完全符合规范或需要已知硬件解决方案的输入设备,往往需要一个新的Linux内核驱动程序,或者至少需要在现有内核驱动程序代码中添加一些怪癖。不缺乏不稳定的HID硬件/驱动程序来处理这种奇怪的情况。由于内核周期长和涉及的其他因素,长期以来,利用(e)BPF一直被认为是能够以eBPF程序的形式更快地发送硬件支持修复程序的领域之一。Rust编写的udev-hid-bpf项目已经准备好帮助实现这一目标。
Red Hat输入专家Peter Hutterer上周在博客中介绍了他与Red Hat的Benjamin Tissoires一起开发的udev hid bpf项目。udevhidbpf提供了使用eBPF修复hid设备的工具。udev-hid-bpf项目本身是用Rust编程语言编写的,但eBPF程序仍然是用C编写的。
HID-BPF是一种非常有趣的方法来处理古怪/有缺陷的HID硬件,而使用udev-HID-BPF,它有助于实现这一目标。Peter在宣布udev隐藏bpf工作的博客文章中解释道:
“如果我们想修复我们的设备,我们通常需要做两件事之一:修复报告描述符,以启用/禁用/更改设备假装支持的一些值。例如,我们可以说我们支持5个按钮,而不是假定的8个。或者我们需要通过例如反转设备的y值来修复报告。这可以在自定义内核驱动程序中完成,但HID BPF程序要方便得多。
...
udev hid bpf是一个工具,可以简化hid bpf程序的开发和测试,并收集hid bpf程序。你基本上运行介子编译和介子安装,瞧,无论什么BPF程序应用于你的设备,下次你插入它们时都会自动加载。如果你只想测试一个BPF.o文件,你可以udev hid BPF install/path/to/foo.BPF.o,它会安装所需的udev规则,以便在设备插入时加载它。如果你不知道如何编译,你可以从我们的CI中获取一个tarball,并测试预编译的BPF.o.Hooray,甚至更简单。"
The udev-hid-bpf documentation is on FreeDesktop.org for those wanting to learn more.