linux模拟HID USB设备及wireshark USB抓包配置
笔者开发USB设备时的一些记录
1. 内核配置
内核启用USB Gadget,使用fs配置usb device信息。
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_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
}
- 示例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>
#define BUF_LEN 512
struct options {
const char *opt;
unsigned char val;
};
#define __is_print(ch) ((unsigned int)((ch) - ' ') < 127u - ' ')
#define HEXDUMP_WIDTH 16
void debug_hexdump(unsigned char *data, unsigned long size, unsigned char *headinfo)
{
unsigned long i, j;
unsigned long addr;
printf("%s 0x%08X, size is %ld. The data is:\n", headinfo, addr,
size);
printf("Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");
for (i = 0; i < size; i += HEXDUMP_WIDTH)
{
printf("[%08X] ", addr + i);
/* dump hex */
for (j = 0; j < HEXDUMP_WIDTH; j++)
{
if (i + j < size)
{
printf("%02X ", data[i + j]);
}
else
{
printf(" ");
}
}
/* dump char for hex */
for (j = 0; j < HEXDUMP_WIDTH; j++)
{
if (i + j < size)
{
printf("%c", __is_print(data[i + j]) ? data[i + j] : '.');
}
}
printf("\n");
}
printf("\n");
}
int main(int argc, const char *argv[])
{
const char *filename = NULL;
int fd = 0;
char buf[BUF_LEN];
int cmd_len;
char report[64] = {0};
int to_send = 8;
int hold = 0;
fd_set rfds;
int retval, i;
if (argc < 2) {
fprintf(stderr, "Usage: %s devname\n",
argv[0]);
return 1;
}
filename = argv[1];
if ((fd = open(filename, O_RDWR|O_DSYNC, 0666)) == -1) {
perror(filename);
return 3;
}
while (1) {
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
retval = select(fd + 1, &rfds, NULL, NULL, NULL);
if (retval == -1 && errno == EINTR)
continue;
if (retval < 0) {
perror("select()");
return 4;
}
if (FD_ISSET(fd, &rfds)) {
cmd_len = read(fd, buf, BUF_LEN - 1);
#ifdef HEX_DEBUG
debug_hexdump(buf, cmd_len, "recv report");
#endif
}
}
close(fd);
return 0;
}
附 wireshark USB抓包配置
安装wireshark 时同时安装USB抓包工具usbpcap后,打开wireshark有两个USB捕获接口
我们可以设置其中一个只抓取新接入的设备
- USBPcap1 作用可指定抓取未接入的USB设备
- USBPcap2 作用是抓取所有已接入的USB设备及新设备
linux模拟HID USB设备及wireshark USB抓包配置的更多相关文章
- linux 模拟生成 CAN 设备
/************************************************************************************** * linux 模拟生成 ...
- Wireshark数据抓包教程之安装Wireshark
Wireshark数据抓包教程之安装Wireshark 安装Wireshark 通过上一节的学习可以根据自己的操作系统来下载安装Wireshark了.本书中已开发版1.99.7(中文版)为主,下面介绍 ...
- Wireshark数据抓包教程之Wireshark的基础知识
Wireshark数据抓包教程之Wireshark的基础知识 Wireshark的基础知识 在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及.Wireshark作为国 ...
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...
- Wireshark数据抓包教程之Wireshark捕获数据
Wireshark数据抓包教程之Wireshark捕获数据 Wireshark抓包方法 在使用Wireshark捕获以太网数据,可以捕获分析到自己的数据包,也可以去捕获同一局域网内,在知道对方IP地址 ...
- wireshark怎么抓包、wireshark抓包详细图文教程
wireshark怎么抓包.wireshark抓包详细图文教程 作者:佚名 来源:本站整理 发布时间:2013-05-02 19:56:27 本日:53 本周:675 本月:926 总数:3749 ...
- Wireshark 网络抓包工具Wireshark的使用
阅读目录 wireshark介绍 wireshark不能做的 wireshark VS Fiddler 同类的其他工具 什么人会用到wireshark wireshark 开始抓包 wireshark ...
- Wireshark网络抓包(一)——数据包、着色规则和提示
一.数据包详细信息 Packet Details面板内容如下,主要用于分析封包的详细信息. 帧:物理层.链路层 包:网络层 段:传输层.应用层 1)Frame 物理层数据帧概况 2)Ethernet ...
- Wireshark数据抓包教程之认识捕获分析数据包
Wireshark数据抓包教程之认识捕获分析数据包 认识Wireshark捕获数据包 当我们对Wireshark主窗口各部分作用了解了,学会捕获数据了,接下来就该去认识这些捕获的数据包了.Wiresh ...
- wireshark怎么抓包、wireshark抓包详细图文教程(转)
wireshark怎么抓包.wireshark抓包详细图文教程 wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必 ...
随机推荐
- 音视频 SDK |合理配置视频参数,提升使用质量
一.前言 在视频通话或直播时,开发者可以根据需要指定推流和拉流视频相关配置,如视频采集分辨率.视频编码输出分辨率.视频帧率.码率.视图模式和镜像模式. 设置合适的视频分辨率.帧率和码率可以在音视频场景 ...
- 【转】一种Vue应用程序错误/异常处理机制
在前端应用程序中,最常见的错误/异常类型可能包括以下几种: 语法错误:使用了一些错误的语法 运行时错误:由于执行期间的非法操作导致的 逻辑错误:由于程序逻辑错误 Http 错误:API 返回的错误 有 ...
- 教你一招,测试人员如何通过AI提高工作效率!
伴随着AI技术的兴起,像OpenAI推出的ChatGPT.Microsoft发布的Microsoft 365 Copilot.阿里的通义千问.百度的文心一言.华为的盘古大模型等.很多测试人员开始担心, ...
- python:批量删除指定文件目录中多个文件
#coding:utf-8# 任务需要,需要删除多余的文件,手动删除太麻烦,几行python搞定 import os from glob import glob path = r"/medi ...
- iOS 数据持久化方案-Realm的使用小结
一.Realm介绍 1.1.Realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android,核心数据引擎C++打造,并不是建立在SQLite之上的O ...
- 从Windows 11 23H2升级至24H2后,Git操作提示文件所有权错误的3种有效解决方案
从Windows 11 23H2升级至24H2后,Git操作提示文件所有权错误的3种有效解决方案 在升级至 Windows 11 24H2 后,使用 git add 等命令时,可能会遇到如下错误提示: ...
- 网页设计中常用的Web英文安全字体
原文地址:https://www.openkee.com/post-176.html 在 Web 编码中,CSS 默认应用的 Web 字体是有限的,你能看到的字体别人未必看得到.虽然在新版本的CSS3 ...
- 如何将rust日志输出到android终端
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议.转载请注明来自 唯你 背景 在 Rust 中,使用 println!打印日志时,输出实际上是发送到标准输出(stdout),而 ...
- 生成文本聚类java实现1
本章主要的学习是中文分词 和两种统计词频(传统词频和TF-IDF算法 ) 的方法. 学习目的:通过N多的新闻标题 or 新闻摘要 or 新闻标签,生成基本的文本聚类,以便统计当天新闻的热点内容. 扩展 ...
- Robot_Parkour_Learning分享报告关键词记录
fraction noise minecraft perlin noise 作为一种fraction noise 跑酷 深度相机,不然被挡住不知道是要下蹲还是要跳过去 issacGym的激光雷达的模拟 ...