linux嵌入式开发-Zynq开发板配置usb_gadget模拟HID鼠标


前言

本实验基于alinx Zynq 7010开发板。目的是通过usb_slave连接到PC上,让开发板作为一个鼠标从设备接入电脑,并可以通过linux上命令操作移动、点击鼠标等。

一、内核配置

1.petalinux

在PC上使用VMWare,在ubuntu下创建petalinux工程,编译内核,vmware、vivdado、petalinux的安装详见alinx官方教程course4-linux实验中的步骤
创建petalinux工程,在工程目录下打开终端,输入命令准备编译内核

source /opt/pkg/petalinux/settings.sh
source /opt/Xilinx/Vivado/2017.4/settings64.sh

在这里插入图片描述
然后编译内核:

petalinux-config -c kernel

在这里插入图片描述
进入Devicedrivers -> USB Support,勾选USB Gadget Support(按Y)
在这里插入图片描述
进入USB Gadget Support,开启选项如下:
在这里插入图片描述
编译内核:

petalinux-build

生成镜像

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force

将SD卡插入电脑连接到VMWare虚拟机,把petalinux工程中的images/linux中的BOOT.BIN和image.ub拷入SD卡的FAT分区中即可
在这里插入图片描述
将SD卡插入开发板,开机进入linux,检查有无usb_gadget配置项

ls /sys/kernel/config

如果出现usb_gadget,说明配置成功,可以进行后续步骤

2.修改设备树

我在linux上进行ls /sys/class/udc时遇到问题,没有udc,因此又在网上查找资料,重新回去弄了半天,最后发现的解决办法是在devicetree中,把usb0的dr_mode=“host”改为peripheral,该方法来自AMD xilinx论坛,原问题petalinux-20164-usb-failed?
devicetree文件在(petalinux项目名)/project-spec/meta-user/recipes-bsp/device-tree/files里:
在这里插入图片描述
修改:
在这里插入图片描述

二、鼠标配置

1.创建配置

cd到usb_gadget的目录下

cd /sys/kernel/config/usb_gadget/

使用mkdir方法创建一项配置

mkdir xjs_gadget

进入创建的配置中查看

cd xjs_gadget
ls

可以看到如下结果:
在这里插入图片描述

2.配置字符串

字符串是当设备连接到主机上时,主机上显示的设备名称、生产商之类的信息。

以下是需要配置的部分字符串参数及其含义。其中idProduct和Vendor必须是4位十六进制数,如果想要开发的USB设备在连接主机时具有专属名称,可以向USB协会提交申请。如果只是用来测试也可以填我用的这个。而strings下的字符串可以按自己的需要填写。

xjs_gadget
├── idProduct=0xa4ac# 产品id
├── idVendor =0x03FD# 产品厂商id
└── strings  # 用于主机显示的相关文本
	└── 0x409# 语言标识符(EN)
		├── manufacturer ="flyingrt" #生产商名称
        ├── product      ="flyingrt_mouse"   #产品名称
        └── serialnumber ="0001"       #产品序列号

我的命令如下:

echo "0x03FD" > idVendor
echo "0xa4ac" > idProduct
mkdir strings/0x409
echo "flyingrtx" > strings/0x409/manufacturer 
echo "0001" > strings/0x409/serialnumber 

3.配置功能项functions

USB Gadget通过function配置实际的功能。每个function由protocol、subclass、report_desc、report_length这四项组成1。同一个USB Gadget可以通过一条线同时支持多个function(例如同时模拟鼠标和键盘)
首先建立功能项:

mkdir functions/hid.ms

使用ls查看,可以看到下面目录:
在这里插入图片描述

protocol

protocol指定HID设备使用的协议,对于键盘设备其值为1,鼠标设备其值为2。subclass指定子类。

report_desc

USB-IF官网
USB-IF官网提供了HID description Tool可以编辑和生成描述符文件,并且附带了许多常见设备的示例。下载其网站提供的工具dt2_4.zip
在这里插入图片描述
解压后运行Dt.exe
选择file -> open ,打开其提供的mouse文件,即可查看:
在这里插入图片描述
可以使用file -> save as 保存为一个txt文件
我这里通过下面这段c代码向report_desc和report_length中写入二进制数据

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>

#define REPORT_DESC_SIZE 50

int main() {
   
    int fd;
    char *device = "/sys/kernel/config/usb_gadget/xjs_gadget/functions/hid.ms/report_desc";
    char report_desc[REPORT_DESC_SIZE];

    // 鼠标报告描述,
  • 42
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值