我是嵌入式 Linux 的新手。我想通过线程使用我的 USB 键盘。我知道线程的概念,但我想知道如何使用线程的概念来检测它。?
3 回答
如果我理解正确,您有一个嵌入式 linux 板,现在您想连接 USB 键盘并将其与嵌入式 linux 板上的应用程序一起使用?如果这是正确的,那么你不需要对线程做任何事情。您需要做的是为该键盘安装驱动程序。为此,您应该查看内核构建配置以查看是否启用了 USB 键盘驱动程序(HID 驱动程序)。
如果您不想使用非阻塞 I/O 来读取键盘,您可以使用一个线程来执行阻塞读取并在输入可用时向您的主线程发出信号(或设置一个可以轮询的标志)。
除了阻塞之外,您可能还必须与线路模式的默认设置抗衡。
在单线程程序中轮询或响应单个字符的常见选择是更改终端模式设置 - 请参阅 termios、stty 等的手册页。但是,如果您的程序退出,您将需要将它们更改回来。
另一种选择是跳过整个终端基础设施并直接通过 /dev/input/ 读取输入事件。或者在极端情况下,您可以跳过 USB HID 驱动程序并为 USB 键盘编写自己的内核驱动程序。
您可以根据您的要求使用以下任一种:
- 阻塞 I/O
- 非阻塞 I/O
对于非阻塞 I/O,请尝试基于多线程的方法。对于阻塞的 I/O,尝试基于 epoll() 系统调用的方法。
关于检测键盘的方法,您可以尝试以下方法:
使用文件 /proc/bus/input/devices 来检测设备,但在某些系统中重新启动之前它不会更新。
使用 /dev/input/eventN 和 ioctl() 调用来检测事件位。事件接口非常有用,因为它将原始事件暴露给用户空间。