专栏首页WriteSimpleDemo基于树莓派的多功能USB实现--U盘模式和网卡模式

基于树莓派的多功能USB实现--U盘模式和网卡模式

实现原理

一般来说,USB 设备有两种,一种是 Host,比如电脑,可以去读取其他 USB 设备的数据,另外一种是 Device,比如键盘鼠标U盘智能手机。而OTG(文末附录what is OTG)实现了设备在host 和 slave(peripheral)间转换。例如支持OTG功能的智能手机可以作为host读取U盘内容。

在树莓派系统/boot/overlays/README中,关于 USB controller driver的描述如下(文末附录关于dwc_otg与dwc2的区别):

Name:   dwc-otg
Info:   Selects the dwc_otg USB controller driver which has fiq support. This 
        is the default on all except the Pi Zero which defaults to dwc2.
Load:   dtoverlay=dwc-otg
Params: <None>


Name:   dwc2
Info:   Selects the dwc2 USB controller driver
Load:   dtoverlay=dwc2,<param>=<val>
Params: dr_mode                 Dual role mode: "host", "peripheral" or "otg"

        g-rx-fifo-size          Size of rx fifo size in gadget mode

        g-np-tx-fifo-size       Size of non-periodic tx fifo size in gadget
                                mode

这是由于在目前所有树莓派中,只有树莓派Zero系列支持OTG,故只有树莓派Zero的驱动为支持host和slave的dwc2,这使得实现U盘模式和网卡模式等成为可能

实现

网卡模式

可参考“基于树莓派的多功能USB实现--系统安装”一文中“开机准备”->“Plan B”

设置步骤
  1. 在根目录下面的config.txt文件的末尾添加一行
dtoverlay=dwc2
  1. 若要网卡模式,打开 cmdline.txt 在 rootwait 后面添加如下内容。
modules-load=dwc2,g_ether
  1. 重启。
  2. ifconfig会出现usb0网卡
root@raspberrypi:~# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4  bytes 444 (444.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 444 (444.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.85.97  netmask 255.255.0.0  broadcast 169.254.255.255
        inet6 fe80::ebd3:772b:6391:bfde  prefixlen 64  scopeid 0x20<link>
        ether 32:f7:c3:1c:e2:00  txqueuelen 1000  (Ethernet)
        RX packets 942  bytes 69082 (67.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 31  bytes 5556 (5.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.18.10  netmask 255.255.255.0  broadcast 192.168.18.255
        inet6 2408:8210:904a:ce10:ba27:ebff:fed6:bd35  prefixlen 128  scopeid 0x0<global>
        inet6 fe80::d265:e222:f80b:bafe  prefixlen 64  scopeid 0x20<link>
        inet6 2408:8210:904a:ce10:9858:ac15:2a92:ac26  prefixlen 64  scopeid 0x0<global>
        ether b8:27:eb:d6:bd:35  txqueuelen 1000  (Ethernet)
        RX packets 1322  bytes 88862 (86.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 93  bytes 18435 (18.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
应用

该模式目前个人主要用于ssh连接树莓派

U盘模式

设置步骤
  1. 在根目录下面的config.txt文件的末尾添加一行
dtoverlay=dwc2
  1. 若要网卡模式,打开 cmdline.txt 在 rootwait 后面添加如下内容
modules-load=dwc2,g_mass_storage
  1. 重启
  2. 新建一个2g的镜像文件
dd if=/dev/zero of=/home/my_u_disk.bin bs=1024 count=1000000
  1. 然后格式化成vfat格式
mkfs.vfat /home/my_u_disk.bin
  1. 执行以下命令后,若树莓派Zero插在电脑上,则在电脑上会弹出U盘设备
modprobe g_mass_storage file=/home/my_u_disk.bin removable=1 dVendor=0x0781 idProduct=0x5572 bcdDevice=0x011a iManufacturer="SanDisk" iProduct="Cruzer Switch" iSerialNumber="1234567890"
应用

该模式可以用于模拟普通U盘,也可配合菜单选项中Export log,导出操作log 需要注意的是,当U盘镜像文件modprobe为外界U盘时,如果mountU盘镜像文件到树莓派系统本地会发现,外界U盘的文件增删查改操作并不会同步显示,需umountrmmod之后再mountmodprobe一遍才能同步。 故在交互菜单栏中有Flash U Disk选项,以便在Export log后更新U盘显示内容

附录

dwc_otg与dwc2

dwc_otg is the driver that has been heavily patched to squeeze most performance & function in host mode on the Pi: the fiq stuff etc. So heavily patched that, despite the name, it only does host mode & not OTG. dwc2 is an upstream driver which can do the OTG host/gadget flip dictated by OTG_SENSE. In host mode performance will pale of dwc_otg, hence it's only recommended for gadget mode.

what is OTG

USB On-The-Go (USB OTG or just OTG) is a specification first used in late 2001 that allows USB devices, such as tablets or smartphones, to act as a host, allowing other USB devices, such as USB flash drives, digital cameras, mice or keyboards, to be attached to them. Use of USB OTG allows those devices to switch back and forth between the roles of host and device. A mobile phone may read from removable media as the host device, but present itself as a USB Mass Storage Device when connected to a host computer.

三种模式

Using the modules

  • g_serial - To use the standard serial module, you need to tell the Pi to forward the serial console to it with sudo systemctl enable getty@ttyGS0.service, then you can connect to the device via Putty or Screen.
  • g_ether - Using virtual ethernet, you should simply be able to ssh into the address of your Raspberry Pi. To do this, there is a little extra configuration required though. There is a few ways we could set up the point to point networking. The proper way would be to set up a DHCP server on one of the ends. A far simplier was though is just to give the Raspberry Pi a fixed IP address. To do this, you will need to run sudo echo -e "interface usb0 \nstatic ip_address=169.254.64.64" >> /etc/dhcpcd.conf. You can then access the Raspberry Pi Zero by connecting to 169.254.64.64, or by using raspberrypi.local if your computer has Bonjour installed (Mac and most Linux OSs including Raspbian). Note this method does not support adding a fixed address to the cmdline.txt file. For that, you have to use the Ethernet only kernel below.
  • g_mass_storage - To have your Pi Zero appear as a mass storage device (flash drive), first create a mini filesystem in a file on your Pi with sudo dd if=/dev/zero of=/piusb.bin bs=512 count=2880 and set it up as a fat32 filesystem with sudo mkdosfs /piusb.bin. Then, when enabling it, add file=/piusb.bin stall=0 onto the end, for example sudo modprobe g_mass_storage file=/piusb.bin stall=0.

In theory, most USB devices should work alongside these kernels, to switch to USB OTG mode, simply don't use an OTG adapter cable and use a standard USB cable to plug your Pi Zero into another computer, it should auto switch.

参考链接

Difference between DWCOTG and DWC2(https://www.raspberrypi.org/forums/viewtopic.php?t=179259) USB On-The-Go(https://en.wikipedia.org/wiki/USB_On-The-Go) 树莓派 /boot/overlays/README Raspberry Pi Zero OTG Mode(https://gist.github.com/gbaman/50b6cca61dd1c3f88f41)

往期回顾

基于树莓派的多功能USB实现--系统安装

基于树莓派的多功能USB实现--显示屏和按键交互菜单

假期结束返回工作地的我们。。。

本文分享自微信公众号 - WriteSimpleDemo(this_is_a_wechat),作者:PedroQin

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于树莓派的多功能USB实现--系统安装

    优势:保证功能健全的同时体积不到传统Raspberry Pi尺寸的一半。但是最主要的优势是:

    PedroQin
  • 基于树莓派的多功能USB实现--BadUSB模式

    https://github.com/pedroqin/RaspberryPi-based-multi-functional-USB-Device

    PedroQin
  • 在树莓派3b上运行uboot

    最近想研究一下树莓派3b的一些底层驱动的代码,比较好的就是直接可以看树莓派3b的实现。因为usb驱动,网卡驱动,以及lcd驱动,都可以在uboot中直接找到。有...

    bigmagic
  • 基于树莓派的多功能USB实现--无线AP模式

    树莓派最终作为独立的多功能USB设备时,可能会面对相对复杂的应用环境。为了脱离HDMI转接线,路由器,电脑等环境的限制,故添加了无线AP模式以应对特殊使用场景。...

    PedroQin
  • 第一章 漫谈RaspberryPi

       Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统...

    张国平
  • 用树莓派制作红白游戏机

    小时候,最喜欢玩游戏机了,最开始的坦克大战,然后是红斗罗,接着是超级玛丽等等。当时的电子设备很匮乏,没有什么电脑,手机之类的,不像现在的电子设备那样发达。也没有...

    bigmagic
  • 想自己搭建服务器,永久运行网站?一个 U 盘大小的树莓派就够了!

    用我的话理解就是树莓派就是一台主机,你可以外接显示器,键盘鼠标,u盘等等外设,因为它体积很小,而且又有很多串口和外接的口,可以直接调用很多底层硬件。

    全栈程序员站长
  • 树莓派4b性能怎么样,值不值得买

    树莓派自2012问世以来,从第一款Pi 1到现在的Pi 4经历了4个大版本,在RAM大小和外围设备支持方面都发生了很大的变化。那么2019年千呼万唤始出来的树莓...

    用户6968133
  • 如何组装、搭建一台永久运行的个人服务器?

    由于本人在这段时候,看到了一个叫做树莓派的东东,初步了解之后觉得很有意思,于是想把整个过程记录下来。

    Leetcode名企之路
  • 我也有了树莓派

    心心念念很久的树莓派终于来啦,在芯片短缺的2021年,我曾无数次在小黄鱼搜索「树莓派」,但都忍住没有剁手。直到那天在群里说了一句「我下定决心买树莓派啦」,朋友看...

    ImQimu
  • 成为物理黑客吧!利用树莓派实现P4wnP1项目进行渗透测试

    大家在小的时候可能在电影中看到过,一个大黑阔从手里掏出了一个U盘,然后噼里啪啦的操作一番,某大BOSS电脑就被打开了。在电脑被破解的那一刻,大家是否也想过,总有...

    FB客服
  • Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建

    目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2)。其中,Galil...

    ShiJiong
  • 高效搭建树莓派3b rt-thread的开发环境

    由于电子设备的普及,越来越多人拥有树莓派,不管是作为电子极客,还是作为普通普通人,很多人都会玩一下树莓派,可以学习一些c语言,也可以学习嵌入式。...

    bigmagic
  • 树莓派基本配置与Docker的安装

    https://www.raspberrypi.org/downloads/raspbian/

    緣來
  • 树莓派折腾记:纯手机+数据线连接树莓派

    美丽应用
  • 牛人教你DIY!用树莓派 Zero做飞控图传

    虽然可以买到商品成品,且会比我们做出来的东西更美观,性能指标更强,但是在折腾中学习,按照自己的需求进行优化改动,享受创造的喜悦,不正是创客精神嘛。 本项目使用手...

    机器人网
  • 树莓派:开机使用

    树莓派是一款信用卡大小的超小型电脑,由英国的树莓派基金会研发。由于超小的体积,树莓派从2012年发行起就风靡全球。别看树莓派身板小,它可是一台功能完整的电脑。连...

    Vamei
  • 树莓派搭建弱网测试环境全纪录(1)

    接上一篇文章APP网络性能测试白皮书,当前APP网络环境比较复杂,网络制式有2G、3G、4G网络,还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异,...

    岛哥的质量效能笔记
  • 树莓派:开机使用

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

    Vamei

扫码关注云+社区

领取腾讯云代金券