树莓派4B USB Gadget实战:变身U盘、串口与虚拟网卡的完整指南
2026/9/24 13:07:05 网站建设 项目流程

1. 为什么我建议你把手里的树莓派4B折腾成USB Gadget

先讲一个我自己的场景。有次出差给客户调试一台工控机,那台机器没有网口、没有光驱、系统还进不去,现场唯一的接口就是两个USB口。手边只有一台跑着Ubuntu 22.04的笔记本和一块树莓派4B,客户还在旁边等着,场面相当狼狈。当时我急中生智,把树莓派4B配成了USB Gadget模式,瞬间在电脑上变成了一块U盘,把调试脚本和驱动包拖进去,再从工控机上取出来,问题当场解决。

所谓USB Gadget,核心思路是把Linux设备自己的USB口从"主机模式"切换成"设备模式",让它能以U盘、串口、网卡等从设备身份接入另一台电脑。平时我们插U盘、插手机,是电脑作为主机访问从设备;而USB Gadget正好反过来——树莓派4B通过USB-C口插入电脑后,它不再当"小电脑",而是把自己模拟成一个外设。

这项能力的实用价值被很多人低估了。除了上面那种紧急场景,它至少还能干这几件事:

  • 在没有显示器和网络的条件下,把树莓派变成一个串口调试工具,直接给其他嵌入式设备下发命令;
  • 批量给多台电脑部署文件,不用来回插拔U盘;
  • 把树莓派变成虚拟网卡,让两台电脑在没有路由器的情况下组网通信;
  • 配合脚本动态切换身份,一个设备既能当U盘又能当串口,满足复杂的测试需求。

这篇文章把我的完整操作链路、踩过的坑、排查思路都记录下来。如果你手里正好有一块树莓派4B,或者只是对Linux的USB子系统感兴趣,这篇实战记录都能让你少走不少弯路。整个过程不需要额外的硬件,只要一根合格的数据线。

2. 动手前先检查三件事:硬件批次、系统版本和线缆

很多教程上来就让你跑命令,结果有人成功有人失败,问题多半出在准备工作没做到位。树莓派4B的USB Gadget能不能启用,取决于三个硬性条件,缺一不可。

2.1 确认你的树莓派4B支持OTG模式

树莓派全系列里,只有带有USB-C接口的型号才完整支持USB Gadget,树莓派4B正是其中之一。但有一点要特别留意:早期批次的树莓派4B在USB-C接口的CC电阻上存在设计缺陷,这个缺陷会导致无法通过标准USB-C to USB-C线缆进入设备模式。

怎么判断自己的板子是哪个批次?跑一下命令:

cat /proc/device-tree/model

如果你拿到的板子生产日期在2020年之前,建议直接改用USB-A to USB-C的数据线,也就是一头是标准USB大口、另一头是USB-C小口。这种线在电气连接上绕过了CC引脚协商,反而更稳定。我用的是绿联的USB-A转USB-C数据线,实测没有任何问题。

注意:必须是支持数据传输的线,不是纯充电线。充电线里面只有电源线,没有数据线,插上去电脑完全没反应。区分方法很简单——看线材上有没有"SS"或USB标志,或者直接试插手机看能不能识别。

2.2 系统内核与固件的版本要求

USB Gadget依赖内核里的dwc2libcomposite模块,这两个模块在树莓派官方系统、Ubuntu for Raspberry Pi、Debian等主流系统中都已内置。建议使用64位系统,不仅性能更好,内核模块也更齐全。我实际使用的是Ubuntu 22.04 64位版本,内核版本5.15,整个过程没遇到模块缺失的问题。

升级系统组件到最新版本,避免老固件的兼容问题:

sudo apt update && sudo apt upgrade -y sudo rpi-eeprom-update

rpi-eeprom-update是树莓派专用的EEPROM更新工具,建议顺手检查一下,确保bootloader支持USB Gadget的引导流程。

2.3 准备必要的软件工具

后面操作中会用到以下工具,提前装好:

sudo apt install -y git vim dosfstools usbutils
  • dosfstools:提供mkfs.vfat,用于格式化FAT32分区;
  • usbutils:提供lsusb,用来验证设备是否被电脑识别;
  • vim:编辑配置文件,也可以用nano代替。

这里多说一句,为什么我强调用lsusb而不是dmesg?因为lsusb更直观,直接列出当前的USB设备树,一眼就能看到树莓派是否被电脑识别,很多问题都能通过这个命令快速定位。

3. 开启OTG模式:改好两个配置,让内核加载dwc2驱动

系统准备好之后,第一步是让树莓派在开机时启用USB设备模式。这涉及两处配置:/boot/config.txt/boot/cmdline.txt

3.1 修改config.txt启用dwc2

打开配置文件:

sudo vim /boot/config.txt

在文件末尾追加一行:

dtoverlay=dwc2

这行配置告诉内核在启动时加载dwc2设备树覆盖层。dwc2是Synopsys DesignWare USB 2.0控制器的驱动,树莓派SoC内部的USB控制器恰好就是这个IP核。加载了它,USB-C口才能脱离主机模式,切换到外设模式。

3.2 修改cmdline.txt加载libcomposite模块

再打开另一个配置:

sudo vim /boot/cmdline.txt

找到以root=开头的那一行,在行尾追加:

modules-load=dwc2,libcomposite

注意,不要换行,cmdline.txt是一整行的内容。追加后重启验证:

sudo reboot

重启后检查dwc2是否正常加载:

lsmod | grep dwc2 lsmod | grep libcomposite

如果都能看到对应的模块信息,说明OTG模式已经启动成功。很多教程到这里就结束了,但实际上还差关键一步——创建USB Gadget配置。

4. U盘模式实战:把树莓派变成一块真正的"U盘"

这次实战的目标很明确:树莓派通过USB-C线插入电脑后,电脑端弹出一个可读写的U盘盘符。我把完整过程拆成四个阶段,每个阶段的命令都可以直接抄。

4.1 创建并格式化镜像文件作为"U盘内容"

USB Gadget的U盘功能,底层其实是借助内核的g_mass_storage模块,把树莓派上的一个文件或块设备暴露给主机。最简单的做法是:先创建一个固定大小的镜像文件,把它挂载到树莓派本地,把想共享的文件放进去,再把整个镜像文件作为U盘的"后盾"交给内核。

创建1GB的镜像文件:

sudo mkdir -p /opt/usb-gadget cd /opt/usb-gadget sudo dd if=/dev/zero of=usbdisk.img bs=1M count=1024 sudo mkfs.vfat usbdisk.img

dd命令用于生成全零填充的文件,mkfs.vfat把它格式化成FAT32文件系统。为什么用FAT32而不是ext4?因为FAT32是Windows、macOS、Linux三大平台都能原生读写的格式,兼容性最好。如果你只需要在Linux主机上用,可以用ext4,但为了通用性,我建议还是FAT32。

接下来把镜像挂载到本地,方便往里面放文件:

sudo mkdir -p /mnt/usbdisk sudo mount -o loop /opt/usb-gadget/usbdisk.img /mnt/usbdisk sudo chmod 777 /mnt/usbdisk

现在你可以往/mnt/usbdisk里拷入任何想通过U盘分享的文件。拷完后,需要先卸载再切换为USB功能,否则文件系统处于占用状态,Gadget侧无法安全接管。

4.2 编写gadget激活脚本

这步是整个流程的核心。USB Gadget的参数通过ConfigFS配置,ConfigFS是一个虚拟文件系统,挂载在/sys/kernel/config下。用户通过创建目录、写入文件来配置设备描述符、接口、端点等信息。

先挂载ConfigFS并创建gadget目录:

sudo modprobe libcomposite sudo mkdir -p /sys/kernel/config/usb_gadget/myusb cd /sys/kernel/config/usb_gadget/myusb

然后写入设备描述符:

echo 0x1d6b > idVendor # Linux Foundation的Vendor ID echo 0x0104 > idProduct # Multifunction Composite Gadget echo 0x0100 > bcdDevice echo 0x0200 > bcdUSB mkdir -p strings/0x409 echo "20240901" > strings/0x409/serialnumber echo "RaspberryPi" > strings/0x409/manufacturer echo "Mass Storage Gadget" > strings/0x409/product

这里解释一下这几个ID的含义。idVendoridProduct是USB设备的身份证,主机通过它们识别设备类型。Linux Foundation的Vendor ID0x1d6b是内核虚拟设备常用的ID,0x0104对应多功能复合设备。如果你想让电脑显示成某个特定厂商的U盘,可以改成对应厂商的ID,但要注意合法性,别侵权。

接着创建配置并添加mass_storage功能:

mkdir -p configs/c.1/strings/0x409 echo "Mass Storage Config" > configs/c.1/strings/0x409/configuration echo 120 > configs/c.1/MaxPower mkdir -p functions/mass_storage.usb0 echo /opt/usb-gadget/usbdisk.img > functions/mass_storage.usb0/lun.0/file echo 1 > functions/mass_storage.usb0/lun.0/removable echo 0 > functions/mass_storage.usb0/lun.0/ro ln -s functions/mass_storage.usb0 configs/c.1/

这里有个细节:lun.0/file指定的是镜像文件的绝对路径,内核通过它模拟SCSI磁盘。removable设为1表示这是一个可移动设备,ro设为0表示可读写。如果你只想做只读U盘,把ro设为1即可,这在给客户分发资料时非常实用,防止误删。

最后绑定UDC(USB Device Controller):

echo "dwc2" > UDC

执行完这一步,把树莓派通过USB-C线插入电脑,电脑端应该立即识别出一块新的可移动磁盘。

4.3 把脚本固化成服务,开机自动激活

手动执行脚本虽然方便,但每次开机都要重跑一遍太麻烦。我的建议是把上面的命令整合成一个脚本,并注册为systemd服务。

创建脚本文件/usr/local/bin/enable_usb_gadget.sh

#!/bin/bash # 挂载configfs modprobe libcomposite mount -t configfs none /sys/kernel/config GADGET_DIR=/sys/kernel/config/usb_gadget/myusb # 清理已存在的配置 if [ -d "$GADGET_DIR" ]; then echo "" > $GADGET_DIR/UDC 2>/dev/null rm -rf $GADGET_DIR fi mkdir -p $GADGET_DIR cd $GADGET_DIR # 设备描述符 echo 0x1d6b > idVendor echo 0x0104 > idProduct echo 0x0100 > bcdDevice echo 0x0200 > bcdUSB mkdir -p strings/0x409 echo "20240901" > strings/0x409/serialnumber echo "RaspberryPi" > strings/0x409/manufacturer echo "Mass Storage Gadget" > strings/0x409/product # 配置 mkdir -p configs/c.1/strings/0x409 echo "Mass Storage Config" > configs/c.1/strings/0x409/configuration echo 120 > configs/c.1/MaxPower # U盘功能 mkdir -p functions/mass_storage.usb0 echo /opt/usb-gadget/usbdisk.img > functions/mass_storage.usb0/lun.0/file echo 1 > functions/mass_storage.usb0/lun.0/removable echo 0 > functions/mass_storage.usb0/lun.0/ro ln -s functions/mass_storage.usb0 configs/c.1/ # 启用 echo "dwc2" > UDC

赋予执行权限:

sudo chmod +x /usr/local/bin/enable_usb_gadget.sh

创建systemd服务文件/etc/systemd/system/usb-gadget.service

[Unit] Description=Enable USB Gadget Mode After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/enable_usb_gadget.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload sudo systemctl enable usb-gadget sudo systemctl start usb-gadget

这里有个容易踩的坑:ExecStart脚本执行完后,UDC会一直处于被绑定状态,所以服务类型必须是oneshotRemainAfterExit=yes,否则systemd会认为服务已经退出,下次开机可能不会正常触发。

4.4 实测结果与性能数据

我用同一根USB-A to USB-C线把树莓派4B接入一台Windows 11笔记本电脑,系统提示"发现新硬件",并在文件管理器中出现了新的可移动磁盘。实际测速结果如下:

测试项目结果
识别耗时约3秒
顺序写入速度约12 MB/s
顺序读取速度约15 MB/s
文件系统类型FAT32

读写速度受限于树莓派4B的USB 2.0控制器,无法达到USB 3.0的速率。对于传配置文件、拷贝脚本这种轻量任务完全够用。

5. 串口模式实战:当树莓派变成USB转串口设备

U盘模式只是热身,串口模式才是嵌入式调试的灵魂技能。做硬件开发的人都知道,很多开发板、路由器、工控机调试都需要串口,但并不是每台电脑都自带DB9串口接口。这时候树莓派4B的USB Gadget串口功能就能派上大用场。

5.1 配置串口Gadget

串口模式同样基于ConfigFS,核心是f_serialf_acm功能。f_serial是通用串口,f_acm是符合ACM规范的虚拟串口,Windows和Linux对ACM的支持更完善,推荐使用f_acm

在脚本中追加以下部分:

# 串口功能 mkdir -p functions/acm.usb0 # 关联到配置 ln -s functions/acm.usb0 configs/c.1/

启用后,把树莓派重新插入电脑,主机端会新增一个串口设备:

  • Linux主机:/dev/ttyACM0
  • Windows主机:COM3或类似编号

想要区分U盘和串口功能,可以重新创建gadget配置,把两者都加进去,这样树莓派插入电脑后,会同时识别出"U盘"和"串口"两个设备。这种复合设备模式在调试场景中非常实用——一边通过串口下发命令,一边用U盘拖入新的固件文件。

5.2 主机侧连接与验证

在Linux主机上,可以用screenminicom连接:

sudo apt install -y screen sudo screen /dev/ttyACM0 115200

然后我们在树莓派侧做一个环回测试。可以借助socat工具把树莓派本地的一个伪终端桥接到gadget串口:

sudo apt install -y socat sudo socat -d -d /dev/ttyGS0,raw,echo=0 /dev/ttyAMA0,raw,echo=0

不过更简单的验证方法,是在树莓派侧直接往/dev/ttyGS0写数据:

echo "Hello from Pi" > /dev/ttyGS0

在主机侧如果能看到"Hello from Pi",说明通路正常。

5.3 串口参数与权限问题

串口通信常见的参数包括波特率、数据位、停止位、校验位。默认情况下,g_serial驱动生成的/dev/ttyGS0设备波特率设置可能无效,因为USB CDC ACM设备在主机侧会忽略波特率设置,统一按USB全速或高速模式传输。这一点和传统UART串口不同,很多新手会在这里疑惑半天——其实只要主机和从机两侧的波特率配置一致就行,USB虚拟串口并不像物理串口那样严格要求波特率匹配。

权限问题是另一个容易踩的坑。默认情况下,/dev/ttyACM0的权限属于root用户和dialout组。如果你不想每次都用sudo,需要把当前用户加入dialout组:

sudo usermod -aG dialout $USER

修改完重新登录或重启生效。

6. 高级玩法:U盘和串口同时启用,一台树莓派充当两种外设

前面我提到复合设备,这里展开说说。单功能gadget虽然简单,但实际项目中更多需要的是"既要又要"——既是U盘又是串口,有时候还要是网卡。树莓派4B的dwc2控制器支持多个function组合成一个复合设备,这背后的机制是USB Composite Device。

6.1 复合设备的端点分配逻辑

每个USB功能需要占用端点(Endpoint),dwc2作为USB 2.0高速控制器,可用的端点数量是有限的。算一下账:

功能占用端点端点方向
mass_storage2个(Bulk IN + Bulk OUT)单向
acm_serial2个(Bulk IN + Bulk OUT)+ 1个中断端点双向+中断
ecm_network2个(Bulk IN + Bulk OUT)单向

所以同时启用U盘+串口+网卡是完全可行的,控制器端点资源足够。不过要注意,每个功能的配置文件中都必须在同一个config目录下创建符号链接,多个功能链接到同一个configs/c.1,才能组合成一个复合设备。

6.2 完整三合一配置脚本

把之前的内容整合,这里给出一份完整的脚本,同时启用U盘、串口、网卡(ECM网卡虚拟以太网):

#!/bin/bash modprobe libcomposite mount -t configfs none /sys/kernel/config 2>/dev/null GADGET_DIR=/sys/kernel/config/usb_gadget/mycomposite if [ -d "$GADGET_DIR" ]; then echo "" > $GADGET_DIR/UDC 2>/dev/null rm -rf $GADGET_DIR fi mkdir -p $GADGET_DIR cd $GADGET_DIR # 基本描述符 echo 0x1d6b > idVendor echo 0x0104 > idProduct echo 0x0100 > bcdDevice echo 0x0200 > bcdUSB mkdir -p strings/0x409 echo "20240901" > strings/0x409/serialnumber echo "RaspberryPi" > strings/0x409/manufacturer echo "Multi-function Composite" > strings/0x409/product # 配置 mkdir -p configs/c.1/strings/0x409 echo "Composite Config" > configs/c.1/strings/0x409/configuration echo 120 > configs/c.1/MaxPower # 功能1: 串口 mkdir -p functions/acm.usb0 # 功能2: 网卡(ECM) mkdir -p functions/ecm.usb0 # 设置主机和设备的MAC地址,注意保持唯一 echo "48:6f:73:74:50:43" > functions/ecm.usb0/host_addr echo "42:61:64:55:53:42" > functions/ecm.usb0/dev_addr # 功能3: U盘 mkdir -p functions/mass_storage.usb0 echo /opt/usb-gadget/usbdisk.img > functions/mass_storage.usb0/lun.0/file echo 1 > functions/mass_storage.usb0/lun.0/removable echo 0 > functions/mass_storage.usb0/lun.0/ro # 关联到同一个配置 ln -s functions/acm.usb0 configs/c.1/ ln -s functions/ecm.usb0 configs/c.1/ ln -s functions/mass_storage.usb0 configs/c.1/ # 启用 echo "dwc2" > UDC

配置完成后,树莓派插入电脑会同时看到串口、U盘和一个虚拟网卡。在Linux主机上执行ip addr能看到一个新的usb0网卡接口,给它配一个IP:

sudo ip addr add 192.168.7.2/24 dev usb0 sudo ip link set usb0 up

树莓派侧也配置好IP:

sudo ip addr add 192.168.7.1/24 dev usb0 sudo ip link set usb0 up

两边互相ping一下,通了就说明虚拟网卡链路正常。这个功能在没有路由器的临时组网场景中非常有用。

6.3 复合设备与各系统兼容性

我实测下来,Windows对复合USB设备的识别有时会慢一些,尤其是首次插入需要安装驱动。如果Windows只识别出其中一个功能,另一个显示"未知设备",多半是驱动问题。去设备管理器里更新驱动,选择"自动搜索"即可。Linux和macOS则基本是即插即用,体验顺畅得多。

7. 避坑实录:我把所有踩过的坑一次说清楚

玩USB Gadget这段时间,踩坑无数。这里把最常见的几个问题整理成排查手册,按"现象-原因-解决方案"的顺序讲,方便你直接对照。

7.1 电脑完全没反应:大概率是线缆或端口问题

这是出现频率最高的问题。树莓派插上电脑后,电脑一点反应都没有,lsusb也看不到任何新设备。

排查步骤:

  1. 换一根确定支持数据传输的USB线,最好用USB-A to USB-C;
  2. 确认树莓派已经正常启动,SSH能连上,或者风扇在转、电源灯亮;
  3. 确认dwc2libcomposite已经加载:lsmod | grep dwc2
  4. 确认/sys/kernel/config/usb_gadget目录存在且非空;
  5. 最后看内核日志:dmesg | tail -20

我遇到过一次很诡异的情况:lsmod里明明有dwc2,但UDC绑定时报错"device or resource busy"。最后发现是桌面环境下NetworkManager自动把USB网卡功能启用了,占用了UDC。解决办法是禁用NetworkManager的USB网卡管理,或者直接使用纯命令行系统跑gadget服务。

7.2 Windows识别成未知设备

树莓派在Windows下被识别为"未知USB设备"或者黄色感叹号,最常见的原因是设备描述符里的PID/VID设置冲突。可以试试修改idProduct的值,比如改成0x5702或者0x0100,有些PID在Windows的驱动匹配逻辑里优先级更高。

另外,如果你的Windows系统是精简版,可能缺少USB Composite Device驱动,去设备管理器手动更新驱动,选择"从计算机的设备驱动程序列表中选择",再选"USB Composite Device"即可。

7.3 U盘模式挂载后无法写入

插入电脑后能识别U盘,但写入文件报错"设备正忙"或"只读文件系统"。多半是因为在树莓派侧没有卸载挂载点,或者gadget的lun.0/ro被设成了1。

还有一个隐蔽原因:FAT32镜像文件在树莓派侧挂载时产生了日志或索引文件,拔掉USB线后没有正常卸载,导致文件系统处于不一致状态。Windows会把这种U盘标记为"有问题的磁盘",拒绝写入。解决办法是,每次使用完树莓派侧,先执行sync并卸载:

sudo sync sudo umount /mnt/usbdisk

如果你需要频繁在"U盘模式"和"树莓派本地访问"之间切换,建议写一个切换脚本,先卸载gadget,再挂载镜像到本地,避免文件系统损坏。

7.4 串口乱码

串口连接后输出乱码,绝大多数情况是波特率不匹配。检查主机侧和树莓派侧配置的波特率是否一致。如果确认一致还乱码,尝试用stty -F /dev/ttyGS0 115200重新设置树莓派侧参数。USB虚拟串口虽然不强制要求波特率匹配,但个别驱动实现会参考这个值,统一设置更保险。

7.5 网卡功能无法ping通

ECM网卡配置好后,两边都配了IP但还是ping不通,先检查防火墙。树莓派Ubuntu系统默认可能启用了ufw或nftables,放行规则后就通了:

sudo ufw allow from 192.168.7.0/24 sudo ufw allow to 192.168.7.0/24

另外,树莓派的usb0接口默认可能没有启用,需要手动ip link set usb0 up

7.6 开机后gadget服务失败

如果配置了systemd服务但开机后没生效,执行systemctl status usb-gadget能看到具体报错。最常见的失败原因是/opt/usb-gadget/usbdisk.img路径不存在,或者挂载点还没准备好。建议在服务配置中加上After=local-fs.target确保文件系统已经挂载,脚本里也加上文件存在性检查。

8. 进阶思路:动态切换Gadget身份,一个设备多面手

前面讲的都是静态配置——开机后固定是U盘或串口。但在实际项目中,我经常需要"一会儿当U盘、一会儿当串口",甚至要临时切出一个网卡来。USB Gadget支持热切换,不需要重启树莓派,只要重新配置ConfigFS就可以。

8.1 热切换原理

UDC同一时间只能绑定一个有效的gadget配置。切换的思路是:先解绑当前的gadget,清理目录,再创建新的gadget并重新绑定UDC。整个过程大约耗时1到2秒。

写一个简单的切换脚本/usr/local/bin/switch_gadget.sh

#!/bin/bash # 解绑当前gadget GADGET_DIR=/sys/kernel/config/usb_gadget for dir in $GADGET_DIR/*; do if [ -f "$dir/UDC" ]; then echo "" > $dir/UDC fi done # 清理 rm -rf $GADGET_DIR/myusb rm -rf $GADGET_DIR/mycomposite # 根据参数执行不同配置 case "$1" in disk) /usr/local/bin/enable_usb_gadget.sh ;; serial) /usr/local/bin/enable_serial_gadget.sh ;; composite) /usr/local/bin/enable_composite_gadget.sh ;; *) echo "Usage: $0 {disk|serial|composite}" exit 1 ;; esac

这样在PC端看到的设备类型会动态变化,免去反复插拔的麻烦。

8.2 配合udev规则自动切换

如果你希望树莓派一插上某个特定主机就自动变成串口,插上另一台就自动变成U盘,可以利用udev规则监听USB电源事件。虽然这个场景比较小众,但对自动化测试的团队来说非常香。

还有一个更激进的想法:把gadget配置写成嵌入式脚本,在树莓派上跑一个服务,通过GPIO按钮控制切换。我甚至见过有人用它做了一个"硬件调试工具箱",五个按键分别模拟U盘、串口、网卡、键盘和鼠标,拿到任何一台电脑上都能即插即用。

8.3 结合Docker的使用

如果你喜欢用Docker管理环境,也可以把gadget配置脚本封装到容器里。不过要注意,容器要能够访问宿主机的/sys/kernel/config/sys/class/udc,需要在docker run时加--privileged标志,或者使用--device挂载指定设备节点。我个人的建议是,直接用systemd服务管理脚本就行,没必要为了这个功能引入Docker,保持系统简洁。

9. 写在最后:树莓派4B USB Gadget的更多可能性

树莓派4B的USB Gadget功能,本质上是把Linux强大的USB子系统能力释放了出来。当你理解了ConfigFS的操作逻辑后,不只是U盘和串口,你还可以模拟键盘、鼠标、游戏手柄、MIDI设备、蓝牙适配器等。这意味着:

  • 用树莓派模拟HID键盘,在自动化测试中批量输入指令;
  • 把树莓派变成虚拟网卡,配合NAT做随身路由器;
  • 用树莓派模拟U盘 + 键盘的"BadUSB"攻击方式,但用于合法的渗透测试和硬件安全研究。

这里提醒一句,模拟键盘鼠标等HID设备具有一定的双面性,请确保你的使用场景合法合规,只在自有设备和授权测试环境中操作。

回到这篇文章的主题。如果你只是为了临时把树莓派变成U盘用,5分钟确实足够——前提是你已经看完了前面这些坑,尤其是线缆、批次、模块加载这三项。如果你是想长期作为调试工具,我强烈建议按systemd服务的方式固化下来,把串口、U盘、网卡整合成复合设备,用起来才是真香。

最后分享一个我个人很受用的习惯:每次配置完gadget,都会在树莓派上保留一份完整的配置脚本和README,记录硬件批次、系统版本、使用的线缆型号。因为这类项目依赖的环境状态太多了,三个月后再回来看,没有记录基本等于重新踩坑。希望这篇文章能帮你少走这些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询