1. 概述

1.1 目标

通过嵌入式 Linux 系统配置,将 RAM 空间虚拟为 U 盘设备,实现以下功能:

  • PC 端识别:通过 USB 线缆连接后,PC 端可将其识别为标准 U 盘(FAT32 文件系统)
  • 终端访问:嵌入式终端通过文件系统直接读写虚拟 U 盘存储内容
  • 数据同步:两端操作实时同步,基于镜像文件/opt/vfat.img实现存储共享

2. 系统核心配置解析

2.1 设备基础配置文件(/etc/device_config

# USB设备信息

PRODUCT="PlutoSDR (ADALM-PLUTO)"    ; 设备显示名称(PC端可见)

USBPID=0xb673                       ; USB产品ID(设备唯一标识)

ENDPOINTS=3                         ; USB功能端点数量(支持复合设备)

# 存储配置

FIRMWARE=/mnt/msd/ant.frm            ; 固件存储路径(位于虚拟U盘)

2.2 USB 复合设备路径($GADGET

  • 完整路径/sys/kernel/config/usb_gadget/composite_gadget
  • 核心目录结构

composite_gadget/

├── functions/          # 功能模块

│   └── mass_storage.0/ # 虚拟U盘功能

│       └── lun.0/      # 逻辑单元配置

│           └── file    # 存储镜像文件路径(必须为绝对路径)

└── UDC                 # USB控制器节点(启动设备)

  • 关键配置functions/mass_storage.0/lun.0/file内容必须为/opt/vfat.img,指定虚拟 U 盘的存储镜像文件

3. 存储镜像与loop设备机制

3.1 核心组件关系

组件

描述

/opt/vfat.img

虚拟 U 盘的存储载体,本质为文件,需格式化为 FAT32 文件系统,模拟 U 盘存储介质

loop设备

Linux 内核虚拟块设备(如/dev/loop7),用于将文件映射为块设备以便挂载

configfs

设备配置文件系统,用于定义 USB 设备功能(如虚拟 U 盘)

3.2 loop设备工作原理

  1. 自动关联:系统启动虚拟 U 盘功能时,会自动从loop0开始查找可用设备,首次找到的未使用设备(如loop7)将关联/opt/vfat.img

losetup -a  # 查看关联状态,输出示例:/dev/loop7: 512 /opt/vfat.img

  1. 唯一性规则:单个loop设备同一时间只能关联一个文件,如需更换关联文件,需先解除现有关联:

losetup -d /dev/loop7  # 解除loop7与当前文件的关联

4. 操作步骤详解(关键命令)

4.1 初始化准备

4.1.1 创建本地挂载点

mkdir -p /mnt/usbimg  # 创建虚拟U盘的挂载目录(建议使用/mnt或/media)

chmod 755 /mnt/usbimg  # 设置目录权限(确保root用户可读写)

4.1.2 确认loop设备关联

losetup -a  # 必须执行此步骤,获取实际关联的loop设备编号(如loop7)

# 输出示例:/dev/loop7: 512 /opt/vfat.img

4.2 挂载虚拟 U 盘(核心步骤)

正确命令(根据losetup -a输出调整设备编号):

mount -t vfat -o rw /dev/loop7 /mnt/usbimg  # 以读写模式挂载到本地目录

参数说明

  • -t vfat:指定文件系统类型为 FAT32(与镜像文件格式一致)
  • -o rw:允许读写操作(需确保 PC 端未以只读模式挂载)
  • /dev/loop7:通过losetup -a获取的实际关联设备,非固定为loop0

4.3 与 PC 端交互

  1. 物理连接:使用 USB 线缆连接嵌入式设备与 PC,PC 端自动识别为 U 盘(名称为device_config中的PRODUCT值)。
  2. 数据访问
    • Windows:资源管理器中直接通过盘符读写(如PlutoSDR (U盘)
    • Linux:自动挂载或手动挂载(需识别设备节点,如/dev/sdb1

5. 关键命令速查表

操作类型

命令示例

说明

查看 loop 关联

losetup -a

列出所有 loop 设备及其关联的文件,获取实际设备编号(如 loop7)

挂载虚拟 U 盘

mount -t vfat -o rw /dev/loop7 /mnt/usbimg

必须使用losetup -a获取的设备编号,确保与镜像文件关联一致

解除 loop 关联

losetup -d /dev/loop7

释放指定 loop 设备,用于更换关联文件或释放资源

卸载本地挂载

umount /mnt/usbimg

断开终端访问前必须执行,避免文件系统损坏

查看系统日志

`dmesg

grep mount`

6. 注意事项与故障处理

6.1 必看注意事项

  1. 权限要求:所有操作需以 root 用户执行(嵌入式终端默认 root 权限,无需sudo)。
  2. 格式一致性vfat.img必须为 FAT32 格式,PC 端勿对其执行格式化,避免破坏镜像文件。
  3. 安全断开:断开 USB 连接前,先在终端执行umount /mnt/usbimg,再移除线缆。

6.2 常见故障处理

故障现象

原因分析

解决步骤

mount: No such file or directory

loop 设备编号错误(如使用 loop0)

1. 执行losetup -a获取正确设备编号(如 loop7)2. 修正挂载命令中的设备号

PC 端无法识别 U 盘

设备功能未启动

1. 检查composite_gadget/UDC是否正确设置(如echo ci_hdrc.0 > UDC)2. 重启设备后重新连接

终端无法写入文件

挂载权限错误

确保挂载命令包含-o rw,或使用mount -o remount,rw /mnt/usbimg重新挂载

7. 扩展配置(高级操作)

7.1 手动指定loop设备

如需固定使用某个loop设备(如loop5),可手动关联:

losetup /dev/loop5 /opt/vfat.img  # 强制关联loop5与镜像文件

mount -t vfat -o rw /dev/loop5 /mnt/usbimg  # 使用指定设备挂载

7.2 镜像文件位置修改

若需变更存储路径(如改为/ramdisk/vfat.img),需同步修改:

  1. composite_gadget/functions/mass_storage.0/lun.0/file内容为新路径
  2. 挂载命令中的目标文件路径同步更新

8. 附录:系统文件结构参考

8.1 虚拟 U 盘核心文件链

嵌入式终端:

├── /sys/kernel/config/usb_gadget/composite_gadget/functions/mass_storage.0/lun.0/file  # 指向镜像文件

├── /opt/vfat.img                                                               # 存储镜像(FAT32格式)

└── /mnt/usbimg                                                                 # 本地挂载点(访问入口)

PC端:

└── 可移动磁盘(PlutoSDR)                                                      # 识别为标准U盘

8.2 命令执行流程图

初始化准备 → losetup -a获取loop设备 → mount命令挂载 → PC端识别并访问 → umount卸载 → losetup -d释放设备

通过本手册的步骤操作,可稳定实现嵌入式 Linux 终端与 PC 端的虚拟 U 盘数据交互,确保存储内容在两端的高效共享与安全操作。建议在操作前备份/opt/vfat.img文件,避免配置错误导致数据丢失。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐