LINUX嵌入式模拟键盘 2022-05-21

LINUX嵌入式模拟鼠标键盘简介环境说明实现相关实现步骤1.枚举2.数据交互简介使用嵌入式设备,通过otg接口连接电脑主机,可以简单的实现键鼠的模拟。最终的效果:将一个设备插在电脑上,可通过设备中的程序模拟成键盘/鼠标,从而被主机识别,并以此来操控主机。参考文章:http://trac.gateworks.com/wiki/linux/OTGhttps://www.kernel.org/doc/html/latest/usb/gadget_configfs.html参考代码:https://
摘要由CSDN通过智能技术生成

简介

使用嵌入式设备,通过otg接口连接电脑主机,可以简单的实现键鼠的模拟。

最终的效果:将一个设备插在电脑上,可通过设备中的程序模拟成键盘/鼠标,从而被主机识别,并以此来操控主机。

参考文章:
http://trac.gateworks.com/wiki/linux/OTG
https://www.kernel.org/doc/html/latest/usb/gadget_configfs.html
http://www.usbzh.com/
参考代码:
https://www.kernel.org/doc/Documentation/usb/gadget_hid.txt
https://github.com/nesto-software/USBProxy

环境说明

嵌入式设备:有OTG接口(不是普通的U口),linux操作系统,内核版本4.19(更旧的版本没试过),内核支持configfs,hid相关的gadget(例如g_hid\f_hid等),如果要同时支持键盘鼠标,可能需要内核支持libcomposite。

主机:winXP/win7/win10/winServer/ubuntu/centos已测,但有些win7遇到过问题,具体原因不详,可能和windows自身的驱动有关。

设备和主机的连接方式:嵌入式设备OTG接口和PC的USB接口做连接,线缆型号和嵌入式设备的OTG接口有关。例如树莓派,可直接将U口插在主机。

实现相关

linux C、configfs

实现步骤

使用键盘举例说明,鼠标大同小异,差别仅在于report相关信息

1.枚举

枚举过程可通过手动命令实现,亦可调用libusbgx-master(git搜索即可)的api,原理相同
(1)挂载,挂载的目录随意,参考已有文章大多数放在/sys/kernel/config目录下,此时目录下以生成和设备硬件配套的相关目录。一般是usb_gadget.

# mount -t configfs none /sys/kernel/config

(2)创建gadget目录,创建目录后系统自动生成文件在该目录下

# mkdir -p /sys/kernel/config/usb_gadget/my_gadget

(3)填充厂商ID/产品ID/等,这些数据随意一些即可

# echo 0x1234 > /sys/kernel/config/usb_gadget/my_gadget/idVendor
# echo 0x5678 > /sys/kernel/config/usb_gadget/my_gadget/idProduct
....

(4)创建hid-键盘相关文件,创建好文件夹后,自动生成hid相关的配置文件以共填充

# cd /sys/kernel/config/usb_gadget/my_gadget/functions
# mkdir hid.keyboard
# cd hid.keyboard
# ls
//dev  protocol  report_desc  report_length  subclass

(5)填充配置文件,可参考已有的真实设备。其中protocol=1标识键盘设备,subclass=1标识仅有一个接口描述符,report_length标识该hid设备每次发送的报表长度为8字节,report_desc标识该hid设备的报表描述符。
其中report_length的值根据report_desc得出。如何计算可参考libusb官网示例或USB中文网中的介绍。

# echo 1 > protocol   
# echo 1 > subclass
# echo 8 > report_length
# echo -ne \\x05\\x01\\x09\\x06\\xa1\\x01\\x05\\x07\\x19\\xe0\\x29\\xe7\\x15\\x00\\x25\\x01\\x75\\x01\\x95\\x08\\x81\\x02\\x95\\x01\\x75\\x08\\x81\\x03\\x95\\x05\\x75\\x01\\x05\\x08\\x19\\x01\\x29\\x05\\x91\\x02\\x95\\x01\\x75\\x03\\x91\\x03\\x95\\x06\\x75\\x08\\x15\\x00\\x25\\x65\\x05\\x07\\x19\\x00\\x29\\x65\\x81\\x00\\xc0 > report_desc

(6)创建配置描述符,在configs目录下自动生成相关的目录,例如b.1或c.1等,若没有可尝试自行创建

# cd /sys/kernel/config/usb_gadget/my_gadget/
# ln -s functions/hid.keyboard configs/c.1/

(7)使能,将设备(不同设备的udc名称不同)重新写入UDC文件,类似于重新上电,正常情况下,此时主机应已经枚举到键盘设备,例如windows可在设备和打印机中看到键盘设备。

# ls /sys/class/udc/
// fcc00000.dwc3
# echo fcc00000.dwc3 > UDC

2.数据交互

数据的交互由用户层的代码实现,通信手段是对文件/dev/hidgX文件的读写,如果在上述1-7步骤中仅软连接了一个设备,则是hidg0;如果软连接了多个设备,则根据文件名称的字典顺序依次是hidg0,hidg1等。
&

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在嵌入系统中,要编译和安装Qt虚拟键盘需要以下步骤: 1. 首先,确保已经安装了Qt开发环境和所需的编译工具链,包括交叉编译工具和相关依赖项。 2. 下载Qt虚拟键盘的源代码,并将其解压到本地目录。 3. 进入解压后的源代码目录,并使用命令行切换到交叉编译环境。 4. 在交叉编译环境中,执行以下命令,配置Qt虚拟键盘的构建选项: ``` qmake PREFIX=/path/to/installation TARGET=qvk ``` 这将设置Qt虚拟键盘的安装路径和目标平台。 5. 执行以下命令,开始编译Qt虚拟键盘: ``` make ``` 这将根据所设置的构建选项,编译生成Qt虚拟键盘的可执行文件。 6. 编译完成后,执行以下命令,将Qt虚拟键盘安装到指定路径: ``` make install ``` 这将安装Qt虚拟键盘到指定的安装路径。 7. 安装完成后,即可在嵌入系统中使用Qt虚拟键盘。可以通过启动虚拟键盘的可执行文件或通过Qt应用程序中集成虚拟键盘的功能来使用它。 需要注意的是,在编译和安装过程中,可能会遇到一些依赖项或路径配置的问题。这会根据具体的嵌入系统和Qt版本而有所不同。因此,建议在进行编译和安装之前,先查阅相关的文档和资源,以确保正确配置和解决问题。 ### 回答2: Qt虚拟键盘是一个可以在嵌入设备上使用的软件工具,用于在没有物理键盘的情况下输入文本。要在嵌入设备上编译和安装Qt虚拟键盘,可以按照以下步骤进行: 首先,确保你已经安装了Qt开发框架的嵌入版本。这个版本包含了适用于嵌入设备的库文件和工具。 然后,从Qt官方网站上下载Qt虚拟键盘的源代码。你可以选择下载最新的稳定版本或者开发版本,具体可以根据你的需求来决定。 解压下载的源代码包,然后打开终端或命令提示符窗口,进入解压后的文件夹目录。 接下来,执行以下命令来配置Qt虚拟键盘的编译选项: ./configure -embedded arm -xplatform qws/linux-arm-gnueabi-g++ 这里假设你的嵌入设备使用的是ARM架构,并且使用的是Linux操作系统。如果你的设备和操作系统有所不同,需要相应地修改该命令。 配置完成后,执行make命令来编译Qt虚拟键盘的源代码: make 这个过程可能需要一段时间,取决于你的嵌入设备的性能。 当编译完成时,执行以下命令来安装Qt虚拟键盘: make install 安装完成后,你可以在Qt的安装目录中找到Qt虚拟键盘的可执行文件。将该文件拷贝到你的嵌入设备上,并根据需要进行配置。 现在,你已经成功地将Qt虚拟键盘编译并安装到了嵌入设备上。你可以使用该虚拟键盘在没有物理键盘的情况下输入文本。 需要注意的是,以上步骤仅适用于基于ARM架构的嵌入设备,并且假设你已经安装了适用于嵌入设备的Qt开发环境。如果你的设备和环境有所不同,需要根据实际情况进行调整。 ### 回答3: 在嵌入系统中,编译安装QT虚拟键盘需要以下步骤: 1. 下载QT源代码:首先,需要从QT官方网站下载QT的源代码,并将其解压到你的嵌入系统上。 2. 配置编译器:在编译之前,需要根据你的嵌入系统的架构和特性进行配置。这可以通过运行configure脚本来完成。在配置过程中,你可以选择需要的模块和功能,以及设置编译器选项。 3. 编译源代码:完成配置后,使用make命令开始编译源代码。这将需要一些时间,具体时间取决于你的系统性能和源代码的规模。 4. 安装库文件:编译完成后,可以使用make install命令将生成的库文件安装到系统中。 5. 配置环境变量:在安装完成后,需要将QT的安装路径添加到系统的环境变量中。这样,你就可以在任何地方使用QT开发和运行程序。 6. 构建应用程序:最后,你可以使用QT开发工具根据你的需求构建应用程序,包括虚拟键盘。在构建过程中,你需要包含相应的头文件和库文件,并通过调用相应的API来实现虚拟键盘的功能。 需要注意的是,QT虚拟键盘的功能和界面可以根据需求进行自定义和修改,比如可以设置键盘布局、按键样和交互逻辑等。此外,还需要考虑嵌入系统的硬件限制和性能要求,以确保虚拟键盘的使用体验和性能满足用户的期望。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值