zynq下usb gadget模拟网口、U盘、串口

使用USB Gadget框架让USB变成串口设备 使用USB Gadget框架定义特殊的USB设备 阅读详情
AI摘要

本文详细介绍了如何使用usbgadget工具在XC7Z020平台上配置模拟网口、U盘及串口的方法。通过一系列命令操作实现不同功能的模拟,并提供具体步骤供读者实践。


usb gadget 十分好用,可以模拟成网口、U盘、串口等。本文主要讲述如何将 usb gadget 模拟成网口、U盘、串口。

平台

主控芯片 : XC7Z020
内核版本 :Linux zynq 4.14.0-xilinx

配置

所需配置模块在内核 Device Drivers → USB support → USB Gadget Support 下,使用 usb gadget 时,将 zynq 作为外围设备,为从。

配置成网口

#!/bin/sh

do_start() {
	insmod libcomposite.ko 
	insmod u_ether.ko 
	insmod usb_f_rndis.ko 
	
	mount -t configfs none /sys/kernel/config
	
	mkdir /sys/kernel/config/usb_gadget/g1
	cd /sys/kernel/config/usb_gadget/g1
	
	echo "0x1d6b" > idVendor
	echo "0x0104" > idProduct
	
	echo "0x200" > bcdUSB
	echo "0xEF" > bDeviceClass
	echo "0x02" > bDeviceSubClass
	echo "0x01" > bDeviceProtocol
	echo "0x0100" > bcdDevice
	
	mkdir -p strings/0x409
	echo "0" > strings/0x409/serialnumber
	echo `uname -r` > strings/0x409/manufacturer
	echo `hostname -s` > strings/0x409/product
	
	# Config
	mkdir configs/c.1
	mkdir -p configs/c.1/strings/0x409
	echo "Config 1: RNDIS" > configs/c.1/strings/0x409/configuration
	echo 250 > configs/c.1/MaxPower
	echo 0xC0 > configs/c.1/bmAttributes
	
	mkdir functions/rndis.0
	# Windows extension to force RNDIS config
	echo "1" > os_desc/use
	echo "0xbc" > os_desc/b_vendor_code
	echo "MSFT100" > os_desc/qw_sign
	
	mkdir -p /functions/rndis.0/os_desc/interface.rndis
	echo "RNDIS" > functions/rndis.0/os_desc/interface.rndis/compatible_id
	echo "5162001" > functions/rndis.0/os_desc/interface.rndis/sub_compatible_id
	
	# Set up the rndis device only first
	ln -s functions/rndis.0 configs/c.1
	ln -s configs/c.1 os_desc
	
	echo "ci_hdrc.0" > UDC
	
	ifconfig usb0 192.168.7.100
	ifconfig usb0 up
}

do_stop() {
	# 卸载usb网口
	cd /sys/kernel/config/usb_gadget/g1
	echo "" > UDC
	rm os_desc/c.1/
	rm configs/c.1/rndis.0/
	rmdir configs/c.1/strings/0x409/
	rmdir configs/c.1/
	rmdir functions/rndis.0/
	rmdir strings/0x409/
	cd ..
	rmdir g1/
	 
	rmmod u_ether.ko 
	rmmod usb_f_rndis.ko
	rmmod libcomposite.ko
}

case $1 in
    start)
        echo "Start usb gadget"
        do_start 
        ;;
    stop)
        echo "Stop usb gadget"
        do_stop
        ;;
    *)
        echo "Usage: $0 (stop | start)"
        ;;
esac

配置成U盘

#!/bin/sh

do_start() {
	insmod  libcomposite.ko
	insmod usb_f_mass_storage.ko
	dd bs=1M count=16 if=/dev/zero of=/tmp/lun0.img
	mount -t configfs none /sys/kernel/config
	mkdir /sys/kernel/config/usb_gadget/g1
	cd /sys/kernel/config/usb_gadget/g1
	echo "0x200" > bcdUSB
	echo "0x100" > bcdDevice
	echo "0x03FD" > idVendor
	echo "0x0500" > idProduct
	
	mkdir -p strings/0x409
	echo "0" > strings/0x409/serialnumber
	echo `uname -r` > strings/0x409/manufacturer
	echo `hostname -s` > strings/0x409/product
	
	mkdir -p  functions/mass_storage.0
	
	mkdir -p configs/c.1
	echo 120 > configs/c.1/MaxPower
	
	 mkdir -p   functions/mass_storage.0/lun.0
	echo /tmp/lun0.img > functions/mass_storage.0/lun.0/file
	echo 1 > functions/mass_storage.0/lun.0/removable
	ln -s functions/mass_storage.0 configs/c.1
	echo "ci_hdrc.0" > UDC
}

do_stop() {
	# 卸载USB  U盘
	cd /sys/kernel/config/usb_gadget/g1
	echo "" > UDC
	rm configs/c.1/mass_storage.0/
	rmdir configs/c.1/
	rmdir functions/mass_storage.0/
	rmdir strings/0x409/
	cd ..
	rmdir g1/
	
	rmmod usb_f_mass_storage.ko
	rmmod libcomposite.ko
}

case $1 in
    start)
        echo "Start usb gadget"
        do_start 
        ;;
    stop)
        echo "Stop usb gadget"
        do_stop
        ;;
    *)
        echo "Usage: $0 (stop | start)"
        ;;
esac

配置成串口

#!/bin/sh

do_start() {
	insmod libcomposite.ko
	insmod u_serial.ko
	insmod usb_f_serial.ko
	insmod usb_f_acm.ko 
	mount -t configfs none /sys/kernel/config
	mkdir /sys/kernel/config/usb_gadget/g1
	cd /sys/kernel/config/usb_gadget/g1
	echo "0x200" > bcdUSB
	echo "0x100" > bcdDevice
	echo "0x03FD" > idVendor
	echo "0x0500" > idProduct
	
	mkdir -p strings/0x409
	echo "0" > strings/0x409/serialnumber
	echo `uname -r` > strings/0x409/manufacturer
	echo `hostname -s` > strings/0x409/product
	
	mkdir -p functions/acm.gs0
	
	mkdir -p configs/c.1
	echo 120 > configs/c.1/MaxPower
	ln -s functions/acm.gs0 configs/c.1/
	echo "ci_hdrc.0" > UDC
}

do_stop() {
	# 卸载USB串口
	cd /sys/kernel/config/usb_gadget/g1
	echo "" > UDC
	rm configs/c.1/acm.gs0/
	rmdir configs/c.1/
	rmdir functions/acm.gs0/
	rmdir strings/0x409/
	cd ..
	rmdir g1/
	
	rmmod u_serial.ko
	rmmod usb_f_serial.ko
	rmmod usb_f_acm.ko 
	rmmod libcomposite.ko
}

case $1 in
    start)
        echo "Start usb gadget "
        do_start 
        ;;
    stop)
        echo "Stop usb gadget"
        do_stop
        ;;
    *)
        echo "Usage: $0 (stop | start)"
        ;;
esac

参考

https://www.kernel.org/doc/Documentation/usb/gadget_configfs.txt

https://github.com/STMicroelectronics/meta-st-openstlinux/blob/openstlinux-5.4-dunfell-mp1-20-06-24/recipes-bsp/tools/usbotg-gadget-config/stm32_usbotg_eth_config.sh

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842272/Zynq+Linux+USB+Device+Driver

USB gadget configfs的原理及单片机实现 在单片机实现中,由于硬件资源的限制,不能像Linux内核那样使用configfs,而是需要手动设置各个寄存器的值来实现USB gadget从设备。然而,在某些情况下,我们可能需要一个自己定义的从设备,这时就需要使用USB gadget技术。在这里,我们使用 FFFF 作为我们自己的设备ID,这是一个保留值,表示自己定义的设备。最后,我们需要在USB模块中定义一些回调函数,用于处理USB设备的各种事件,如数据传输、控制命令等。然后,我们需要在USB模块中定义一些数据结构,用于描述各种USB设备的属性和功能。 阅读详情

相关推荐

linux usb gadget从机设备驱动示例程序

在linux gadget zero驱动的基础上实现了文件接口,阻塞读写,设备打开数量限制等功能,支持直接通过cat和echo的重定向机制操作此驱动,实现usb gadget驱动的读写,在linux3,3通过测试。 使用方法,将这些文件拷贝到内核源码目录driver/usb/gadget,在menuconfig中开启usb gadget的zero驱动编译,最好编译成模块,调试方便

Linux: USB Gadget 驱动简介

Linux, USB Gadget

JiMoKuangXiangQu的专栏 1万+

三菱FX5U运动控制(步进)

三菱FX5U脉冲定位控制,原点回归,相对定位,绝对定位,运动控制案例。

weixin_55762091的博客 1万+

ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)

ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能) 之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实现的USB MASS STORAGE的例子已经有很多,而且实现过程几乎不用写代码,使用官方工具便可实现,ZYNQ器件的例子网上却没有找到,自己实现后分享给大家,废话少说,开始吧!

weixin_51627076的博客 5883

CCC数字钥匙3.0标准解读(22)

介绍设备制造商服务器和车辆制造商服务器之间的通信协议.

weixin_41738640的博客 1748

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题!

你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。

smart_boy__的博客 2964

usb-gadget

内核支持usb 的配置nt9856 支持usb 的驱动 USB做dev的一般都在小东西里面CONFIG_USB_GADGET 小东西里面一般有三块 CONFIG_USB_CONFIGFS 这个一般是选着平台的usb控制器驱动 比如我想usb做设备当一个U盘用那么用这个config CONFIG_USB_CONFIGFS_MASS_STORAGE 下面这个就是一个工具让你挂载的目录配置这个驱动一挂载pc上就会出现一个U盘 insmod g_mass_storage.ko file=/dev/mtdbloc

weixin_41884251的博客 5378

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1873

USB Gadget 技术

USB Gadget 是 Linux 内核提供的一项技术,允许具备USB 设备控制器(USB Device Controller)的硬件(如嵌入式开发板、手机)模拟成各种 USB 设备(如 U 盘、串口、网卡、打印机等),从而与主机(如电脑)进行通信。简单来说,普通 USB 设备(如 U 盘)是“被动”被主机识别的,而 USB Gadget 让硬件能“主动”扮演不同的 USB 设备角色,实现灵活的 USB 通信功能。普通 USB 蓝牙适配器:是标准 USB 外设,依赖主机端驱动工作,

qq_45668408的博客 1889

效果炸裂_安装midscene_copw基于midscene操作电脑_基于视觉的软件测试执行_MIDSCENE的安装和使用---AI大模型应用探索0012

摘要:本文介绍了如何通过安装MidSceneJS来增强Copaw的屏幕操作能力。首先需要安装Node.js和npm,并配置淘宝镜像源加速安装。然后全局安装MidScene CLI工具(npm install @midscene/cli -g)。接着配置视觉大模型服务,通过设置环境变量指定模型API密钥、名称、基础URL和家族类型(如qwen3.5-27b),配置文件需存放在C:\Users\Administrator.copaw目录。安装成功后,MidScene已能成功识别并操作屏幕,使用效果良好。文中还提

添柴程序猿的专栏 640

C#实现低通和高通滤波算法

低通滤波器允许通过低于某个截止频率的信号成分,并且抑制高于该频率的成分。而高通滤波器则允许通过高于某个截止频率的信号成分,并抑制低于该频率的成分。巴特沃斯滤波器是一种对称的滤波器,具有平坦的幅度响应和最小的群延迟。低通和高通滤波是数字信号处理中常用的滤波技术,用于滤除或增强信号中的特定频率成分。在本篇文章中,我们将使用C#编程语言来实现低通和高通滤波算法。以上就是使用C#实现低通和高通滤波算法的示例代码。你可以根据自己的需求调整截止频率和采样率,将这些代码应用于你的项目中。是滤波器的截止频率,

XisVisual_Basic的博客 1275

Linux设备驱动子系统第四弹 - USB Gadget

1. 前言 2. 源码架构 3. 枚举过程 1. 前言 Gadget,小饰品。USB Gadget,就是指所开发的电子设备以USB从设备的模式通过USB连接到主机。比如手机用USB线插入PC后,手机就是USB Gadget。本文以Mavell为例,以Gadget插入主机的全过程为主线,分析USB Gadget的架构。   2. 源码架构 USB的源码位于/drivers/usb文

我的嵌入式人生 1万+

华为OD机试 - 机器人活动区域(Java 双机位C卷 200分)

现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。之后M行表示网格数值,每行N个数值(数值大小用k表示),数值间用单个空格分隔,行首行尾无多余空格。说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6。M、N、k均为整数,且1

学Java,找哪吒 916

linux usb gadget 日志

1,USB 协议入门 几种USB控制器类型:OHCI,UHCI,EHCI,XHCI 遇到过一些关于USB的东西(如下),一直没搞明白什么USB1.0/1.1/2.0/3.0之类的,当然我知道它们的各自传输速度都在提升,本文就做点简单的记录吧,尽量下载看到USB的东西和别人提及USB的术语时不要再迷茫了。1. 曾经遇到一些Linux系统对USB3.0的支持不完善,从而导致在有USB3.0设备的P...

Simbazzia的博客 7286

药物对接仿真软件:HADDOCK_(16).实践项目:抗体-抗原对接案例

定义分子结构文件。

kkchenjj的博客 580

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

USB驱动的一点了解(gadget)

参考以下博客: http://blog.youkuaiyun.com/myarrow/article/details/7012230          Linux USB驱动详解 http://blog.youkuaiyun.com/myarrow/article/details/7013198        Linux USB驱动工作流程 http://www.cnblogs.com/general001/a

kinbo88的专栏 9158

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Xilinx zynq USB开发

参考 Zynq Linux USB Device Driver

黑客三遍猪 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ZYNQ基础----裸机USB的使用

前言 在ZYNQ上中有USB的控制器,最近在使用pluto sdr进行数据传输的时候,觉得串口太慢,但是也没有找到关于USB的在裸机下的资料。一般都是用操作系统来做的,这就很郁闷了啊,我一个FPGA小白,现在还不会linux啊。然后就上GitHub上找了找看看有没有人做过zynq裸机的usb的demo,嘿,你别说,还真有。 FPGA工程链接地址如下: Zynq_winUSB FPGA repo 然后还这个作者还提供了一个测试软件,C#写的,看不太懂,但是可以知道是使用libusb这个跨平台的库写的。那么之后

black_pigeon博客 2万+

ZYNQ学习之路8.USB总线学习(一)

通用串行总线(Universal Serial Bus)是连接计算机系统与外部设备的一种串行总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通信产品。USB总线是最复杂的总线之一,但其广泛使用。本文首先直接使用USB相关的驱动的应用,后面再具体开始编程做自己的USB驱动程序。 一.USB概要 1.1 USB的发展历程 USB1.0最早是在1996年出现,速度只...

亦梦云烟的博客 9583

usb hid gadget驱动

一 usb gadget框架层次 1 驱动层 2 复合层 3 控制器驱动层 二 初始化流程 1 驱动层介绍 2 hidg驱动初始化详解 1 至上而下遍历搜索绑定驱动和设备 2 至下而上遍历完成初始化 三 hid gadget应用参考文献因为usb gadget驱动在实际应用中比较少见,通常usb口主要就两个功能,一是供电;二是接外部设备。而且如果是开发usb设备的话,很多是通过usb设备芯片配合fi

叶玄青的博客 1万+

configfs配置usb gadget原理

usb gadget configfs模块的初始化函数为gadget_cfs_init。该函数调用后,会向configfs注册一个子系统,子系统使用configfs_subsystem结构体描述。子系统中又可分为组,使用config_group描述,组内又有成员,使用config_item描述。

我的博客 3495

USB gadget(1)----controller driver

USB gadget usb device driver 分为三部分, usb controller driver, gadget driver 和class driver. 本文从controller driver 开始, 以一个串口gadget 为例进行分析。 USB Controller Driver usb controller driver 负责操作寄存器,填充相应的接口供上层使用。 ...

dongkun152的专栏 1664

USB Gadget 入门一条龙

usb gadget框架, usb device控制器驱动, gadget zero驱动代码 阅读输出.

weixin_45154862的博客 1061

USB子系统学习笔记(二) Gadget驱动框架

描述符:表示自己(设备需要bind描述符)endpoint:数据传输假设host发起两个这样的传输:设置地址、读取描述符。这两个传输都是访问端点0,但是一个的数据、请求是底层提供的,另一个的数据(描述符)是由上层提供的。

jffhgk的博客 3088

OTG功能模拟U盘

龙芯ls2k1000 OTG功能模拟U盘 内核版本是linux-4.19-loongson 一、内核otg配置 二、otg.sh测试脚本 #!/bin/sh #挂载configfs文件系统 mount -t configfs none /sys/kernel/config cd /sys/kernel/config/usb_gadget mkdir g1 cd g1 #设置USB协议版本 echo 0x0200 > bcdUSB #定义产品的VendorID和ProductID ec

大猫的博客 2389
上一篇: linux下搭建网桥
下一篇: 矿板EBAZ4205之SD卡启动
feitingfj
博客等级 码龄12年 58粉丝 39原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值