嵌入式 Linux 终端虚拟 U 盘功能实现手册
├── /sys/kernel/config/usb_gadget/composite_gadget/functions/mass_storage.0/lun.0/file# 指向镜像文件。mount -t vfat -o rw /dev/loop5 /mnt/usbimg# 使用指定设备挂载。mkdir -p /mnt/usbimg# 创建虚拟U盘的挂载目录(建议使用/mnt或/media)lo
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设备工作原理
- 自动关联:系统启动虚拟 U 盘功能时,会自动从loop0开始查找可用设备,首次找到的未使用设备(如loop7)将关联/opt/vfat.img。
|
losetup -a # 查看关联状态,输出示例:/dev/loop7: 512 /opt/vfat.img |
- 唯一性规则:单个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 端交互
- 物理连接:使用 USB 线缆连接嵌入式设备与 PC,PC 端自动识别为 U 盘(名称为device_config中的PRODUCT值)。
- 数据访问:
- 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 必看注意事项
- 权限要求:所有操作需以 root 用户执行(嵌入式终端默认 root 权限,无需sudo)。
- 格式一致性:vfat.img必须为 FAT32 格式,PC 端勿对其执行格式化,避免破坏镜像文件。
- 安全断开:断开 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),需同步修改:
- composite_gadget/functions/mass_storage.0/lun.0/file内容为新路径
- 挂载命令中的目标文件路径同步更新
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文件,避免配置错误导致数据丢失。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)