随着信创产业的快速发展,党政机关的信创化已基本完成,目前正在全力推动行业系统的信创化。在这一过程中,面临的最大挑战之一是如何支持各种外设,例如税控机、读卡器、打印机等。这些外设缺乏统一标准,适配起来较为复杂。经过不断努力,目前 UOS 系统对各种打印机已有较好的支持,而其他外设仍在逐步适配中。
HID(Human Interface Device,人机接口设备)是一种标准化的设备类别,用于统一人机交互类设备(如鼠标、键盘、游戏手柄、触控板、扫描枪、笔输入设备等)的通信方式。相较于传统的串口通信设备,HID 设备具有传输速率更高、标准化支持更强、可热插拔以及免驱动的优势。随着越来越多的外设逐步转向 HID 标准,这里探讨一下 HID 设备在 UOS 系统中的支持方案。
尽管 HID 是标准化设备类别,但这并不意味着插上设备就能直接使用。不同厂商的 HID 设备仍需针对性适配。
Windows / Linux / macOS 都内置 HID 驱动,但这些驱动主要支持几种“通用用途”:
而更多的工业设备、医疗设备、控制面板、条码枪、测量仪器等,都属于 自定义 HID(Custom HID)。
这类设备虽然仍属于 HID 类,但:
所以开发时仍然需要针对设备写“用户态解析逻辑”。
当然 HID 设备比较好的一点是,通常不需要专门的驱动,这样在信创系统上可以原生支持。前提是应用程序需要进行适配。
在 Linux 下,要支持 HID 设备的开发,推荐使用如下几个库:
简介:跨平台的 HID 接口库,支持 Linux、Windows、macOS。
特点:
安装:
sudo apt install libhidapi-dev
这是一个跨平台库,我以前在开发语音输入时就使用过,结合 QT 的跨平台性,在开发不同平台版本的应用时,可以复用一套代码。当然,这个库由于封装了 /dev/hidraw 和 libusb 接口,有时会遇到一些问题,这个时候可能需要直接读写 /dev/hidraw。
简介:通用 USB 访问库,HID 是 USB 设备的一类。
特点:
安装:
sudo apt install libusb-1.0-0-dev
使用场景:
当 hidapi 无法满足特殊控制命令;或者需要对 HID 进行固件升级、发送特定 Feature Report。
简介:Linux 内核直接提供的字符设备接口 /dev/hidraw*。
特点:
虽然直接控制灵活度比较高,但使用起来比较麻烦,所以除非在某些特殊场景,一般不推荐直接使用。
借助于 hidapi 这样的库,应用中支持 HID 设备并不难,不过需要注意的是,如果应用程序需要访问 HID 设备,需要获取 root 权限。
通常应用程序由用户启动,通常不会有 root 权限,这个时候就需要解决权限问题。虽然可以使用 sudo 命令启动应用程序,或者在启动时提权,但这对普通用户来说,不是很友好。提权时,需要用户输入密码,这会让用户感到不安。
对于这种情况,有两种方案:
SUBSYSTEM=="usb", ATTR{idVendor}=="141c", ATTR{idProduct}=="0a12", MODE="0666"
由于 udev 规则是系统级配置,有些操作系统可能管控比较严格,应用程序上架会被拒绝,这点需要注意。
某些遗留系统,可能没有人力或者没有意愿进行系统适配,这个时候可以考虑通过 Wine 运行之前的 Windows 应用程序。Wine 是一个让 Windows 应用程序在 Linux 上运行的兼容层,也支持 HID 设备。
Wine通过一个多层架构将Windows的HID设备API调用转换到Linux的HID设备。整个流程涉及以下几个关键组件:
winebus.sys 是Wine的平台原生总线驱动程序,负责桥接Windows HID API到Linux设备。
在Linux上,winebus通过 udev 和 hidraw 接口检测USB HID设备:
创建设备时,通过Linux的ioctl接口获取HID报告描述符:
当Linux设备被检测到后,winebus主线程处理设备创建事件:
bus_create_hid_device() 函数创建Windows风格的设备对象,并将其添加到设备列表:
hidclass.sys 是Wine实现的Windows HID类驱动,位于winebus和应用程序之间:
读取输入报告:
写入输出报告和功能报告:
功能报告获取:
总体架构图如下:

在 wine 上运行,同样需要注意权限问题,可以参考方案一。
信创系统在 USB HID 设备支持上已具备较为成熟的方案:通过应用层原生适配效果最佳,同时也能通过 Wine 兼容遗留 Windows 应用。
展望未来,随着行业系统信创化的推进,更多专业外设(如税控机、医疗设备、工业控制仪器等)将逐步标准化为 HID 或统一接口模式,UOS 等信创系统在外设支持上的覆盖面将进一步扩大。应用开发者将能更便捷地实现跨平台适配,信创生态下的行业软件兼容性和可扩展性将显著提升,推动政务、金融、医疗、工业等领域的信息化水平持续升级。