当前位置: 首页 > 游戏攻略 > Linux下模拟USB HID设备的简单记录

Linux下模拟USB HID设备的简单记录

来源:网络 作者:趣玩小编 发布时间:2024-11-28 10:15:06

在Linux环境下,模拟USB HID设备是一项常见的操作,其他USB设备也有类似的配置方法。本文将介绍在Linux系统下,模拟USB HID设备的简单记录,以及配置USB设备所需的步骤。

1. 内核配置

首先,需要在内核中启用USB Gadget,并使用fs(configfs)进行USB device信息的配置。以下是Linux内核配置的相关设置:

Device Drivers  ---> 
     [*]   USB support  --->
         <*>   USB Gadget Support  --->
    		  <*>   USB Gadget functions configurable through configfs 
              [*]     HID function
              <*>   USB Gadget precomposed configurations (Function Filesystem)  ---> 

2. 设备配置

接下来是对HID设备的配置。需要添加以下shell函数至启动脚本中,并根据USB协议自行配置描述符。然后调用该脚本即可完成USB设备的配置。

usb_hid_device_config()
{
    if [ -d /sys/kernel/config/usb_gadget/ ] ; then
        ######USB HID Device config######
        cd /sys/kernel/config/usb_gadget/
        mkdir -p isticktoit
        cd isticktoit
        echo 0x0483 > idVendor
        echo 0x5710 > idProduct # STM32
        echo 0x0215 > bcdDevice # v1.0.0
        echo 0x0200 > bcdUSB # USB2
        mkdir -p strings/0x409
        echo "xxxxxx" > strings/0x409/serialnumber
        echo "xxxxxx" > strings/0x409/manufacturer
        echo "xxxxxx" > strings/0x409/product
        mkdir -p configs/c.1/strings/0x409
        echo "HID_CONFIGUE" > configs/c.1/strings/0x409/configuration
        echo 2 > configs/c.1/MaxPower
        
        # Add functions here
        mkdir -p functions/hid.usb0
        echo 0 > functions/hid.usb0/protocol
        echo 0 > functions/hid.usb0/subclass
        echo 64 > functions/hid.usb0/report_length
         # Set HID in/out desc
        echo -ne \\x05\\x81\\x09\\x82\\xa1\\x01\\x09\\x83\\x09\\x84\\x15\\x00\\x26\\xff\\x00\\x75\\x08\\x95\\x40\\x81\\x02\\x09\\x84\\x15\\x00\\x26\\xff\\x00\\x75\\x08\\x95\\x40\\x91\\x02\\xc0 > functions/hid.usb0/report_desc
        ln -s functions/hid.usb0 configs/c.1/
        # End functions

        ls /sys/class/udc > UDC
        ######USB HID Device end######
    else
        errlog "usb_gadget not found!"
        return 1
    fi
}

3. 示例demo

在示例demo中,USB设备节点被标识为/dev/hidg0,以下是一个关于应用层USB收发的示例:

/* hid_gadget_test */

#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

/* 以下是示例的代码 */

// 其他代码

4. 附 Wireshark USB抓包配置

在Wireshark安装时,同时安装USB抓包工具usbpcap后,打开wireshark会看到两个USB捕获接口。可以设置其中一个只抓取新接入的设备:

另外 USBPcap1 的作用是指定抓取未接入的USB设备,而 USBPcap2 的作用是抓取所有已接入的USB设备及新设备。配置后即可抓取新接入USB设备的所有USB包并解析。

相关攻略
热门推荐 更多 +
休闲益智 | 945.71MB
我的世界是一款风靡全球的3D第一人称沙盒...
9.6
角色扮演 | 878.96MB
最新版《汉家江湖》是一款以武侠为题材、以...
9.5
飞行射击 | 262.79MB
《荒野乱斗》是快节奏射击类多人对战游戏。...
9.5
飞行射击 | 102.9M
掌上飞车手游app是由腾讯特别为QQ飞车...
9.2
休闲益智 | 263.56MB
开心消消乐是一款轻松休闲的手游,也是一款...
9.6