news 2026/2/22 6:04:49

Linux USB HOST EXTERNAL STORAGE

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux USB HOST EXTERNAL STORAGE

目录

目录

前言

DTS配置的参考

内核配置的参考

USB Subsystem内核配置

USB Phy内核配置

USB Host Core驱动内核配置

USB EHCI驱动内核配置

芯片平台USB Host Controller驱动内核配置

USB Host MSC相关内核配置

文件系统相关内核配置

验证测试的参考

U盘或USB读卡器的验证测试

USB移动硬盘的验证测试

USB移动光盘驱动器的验证测试

总结


前言

USB MSC(USB大容量存储设备类)是基于通用串行总线(USB)的存储设备传输协议,用于计算机与移动设备间的标准化文件交互,属于计算机存储设备领域。该协议通过硬件接口适配多种存储介质,包括U盘、移动硬盘、读卡器及集成SD卡的设备,允许操作系统直接读写数据并支持任意文件系统格式化。

其核心采用批量传输模式(Bulk-Only Transport),通过端点配置实现命令、数据、状态三阶段交互架构。Windows自2000版本原生支持,Mac OS与Linux内核2.4以上版本均内置驱动,Android系统也通过该协议实现存储设备识别。历史应用中,安卓4.0前默认采用MSC模式,后因兼容性调整为与MTP共存,实测传输速率较MTP提升约12%。

USB HOST MSC是主控做HOST端,USB HOST接口接入USB大容量存储设备(USB Mass Storage Device Class,也称为USB MSC或UMS)。

我们常见的USB大容量存储设备有:U盘、USB读卡器、USB移动硬盘和USB移动光盘驱动器等。


DTS配置的参考

/* usb20 host controller */ usb_1: usb1@YYYYYYYY { compatible = "xxx,xxx-usb"; reg = <0xYYYYYYYY 0xYYY>; interrupts = <GIC_SPI INT_USB20_HOST IRQ_TYPE_LEVEL_HIGH>; clocks = <&ahbX_gate 9>, <&ahbX_reset 9>; clock-names = "usb_gate", "usb_reset"; xxx,usbphy = <&usbphy_1>; dr_mode = "host"; /* 配置成了USB host模式 */ ...

内核配置的参考

USB Subsystem内核配置

CONFIG_USB_SUPPORT=y CONFIG_USB_ARCH_HAS_HCD=y

USB Phy内核配置

CONFIG_USB_PHY=y CONFIG_USB_NX_PHY=y

USB Host Core驱动内核配置

CONFIG_USB_COMMON=y CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_DEFAULT_PERSIST=y

USB EHCI驱动内核配置

CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_EHCI_HCD_PLATFORM=y

芯片平台USB Host Controller驱动内核配置

CONFIG_USB_XXX=y CONFIG_USB_XXX_HOST=y CONFIG_USB_XXX_DEBUG=y

USB Host MSC相关内核配置

CONFIG_MSDOS_PARTITION #多分区支持 CONFIG_SCSI=y CONFIG_BLK_DEV_SD=y #支持U盘、USB读卡器和USB移动硬盘等 CONFIG_BLK_DEV_SR=y #支持USB移动光盘驱动器 CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE_DEBUG=y

文件系统相关内核配置

# USB移动光盘驱动器的配置 CONFIG_ISO9660_FS=y CONFIG_JOLIET=y CONFIG_ZISOFS=y CONFIG_UDF_FS=y # 小于2TB的U盘和USB读卡器的文件系统配置 CONFIG_MSDOS_FS=y CONFIG_VFAT_FS=y CONFIG_FAT_FALLOCATE=y # USB移动硬盘的文件系统配置 CONFIG_NTFS_FS=y CONFIG_NTFS_DEBUG=y CONFIG_NTFS_RW=y

验证测试的参考

U盘或USB读卡器的验证测试

1. 编译并烧录固件后,正常开机,接入USB大容量存储设备(比如U盘),查看该设备是否已经被挂载,例如:

# mount | grep "sda" /dev/sda on /mnt/usb type vfat (rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=936,iocharset=utf8,shortname=mixed,errors=remount-ro)

2. 若需要格式化USB大容量存储设备,可以执行如下命令:

# umount /mnt/usb (若该设备已经被挂载则需要先卸载) # mkfs.vfat -F 32 -n U-DISK /dev/sda mkfs.fat 4.1 (2023-05-25)

其中:

  • -F:用于指定FAT类型,可以使用-F FAT12、-F FAT16、-F FAT32来指定所创建的FAT文件系统的类型。默认情况下,mkfs.vfat将根据设备的大小来选择FAT类型;
  • -n:用于指定卷标,用于标识和描述存储介质。

3. 若需要手动挂载USB大容量存储设备,可以执行如下命令:

# mount -t vfat -o iocharset=utf8,codepage=936 /dev/sda /mnt/usb # mount | grep "sda" (查看该设备是否已经被挂载) /dev/sda on /mnt/usb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=936,iocharset=utf8,shortname=mixed,errors=remount-ro)

4. 查看`/mnt/usb`目录的文件。例如:

# ls -l /mnt/usb total 0

5. 拷贝一个文件到`/mnt/usb`目录并列出文件。例如:

# cp -rvf /etc/shadow /mnt/usb/ '/etc/shadow' -> '/mnt/usb/shadow' # ls -l /mnt/usb total 16 -rwxrwxrwx 1 root root 164 Jun 14 00:35 shadow

6. 测试拔插USB大容量存储设备(比如U盘)。例如:

# sda umount usb disk ok sda usb insert /dev/sda start to mount sda usb device mount sda usb device ok # ls -l /mnt/usb total 0 -rwxrwxrwx 1 root root 0 Jun 14 00:35 shadow

USB移动硬盘的验证测试

1. 烧录固件后,正常开机,接入USB移动硬盘,查看是否生成对应的设备。

# ls -l /dev/sda* brw------- 1 root root 8, 0 Jan 1 23:02 /dev/sda brw------- 1 root root 8, 1 Jan 1 23:02 /dev/sda1 brw------- 1 root root 8, 2 Jan 1 23:02 /dev/sda2 brw------- 1 root root 8, 5 Jan 1 23:02 /dev/sda5

2. 若需要手动挂载USB移动硬盘设备,可以执行如下命令:

# mount -t ntfs /dev/sda1 /mnt/usb # mount | grep "sda" /dev/sda1 on /mnt/usb type ntfs (rw,relatime,uid=0,gid=0,fmask=0177,dmask=077,nls=iso8859-1,errors=continue,mft_zone_multiplier=1)

3. 查看`/mnt/usb`目录的文件。例如:

# ls -l /mnt/usb total 16 drwx------ 1 root root 4096 Jul 11 2024 $RECYCLE.BIN drwx------ 1 root root 4096 Apr 15 2025 System Volume Information drwx------ 1 root root 8192 Aug 24 2025 TEST drwx------ 1 root root 0 Apr 15 2025 found.000 drwx------ 1 root root 0 Apr 13 2025 TEST_FILE

USB移动光盘驱动器的验证测试

1. 烧录固件后,正常开机,接入USB移动光盘驱动器,查看是否生成对应的设备。

# ls -l /dev/sr* brw------- 1 root root 11, 0 Jan 1 23:10 /dev/sr0

2. 弹出光驱托盘并放置测试用的光盘,弹出光驱托盘命令如下:

# eject -s /dev/sr0

3. 若需要手动挂载USB移动光盘驱动器设备,可以执行如下命令:

# mount -t iso9660 /dev/sr0 /mnt/usb # mount | grep "/dev/sr" /dev/sr0 on /mnt/usb type iso9660 (ro,relatime,norock,check=r,map=n,blocksize=2048)

4. 查看`/mnt/usb`目录的文件。例如:

# ls -l /mnt/usb total 161 dr-xr-xr-x 1 root root 2048 Jul 16 2012 AUDIO -r-xr-xr-x 1 root root 156160 Jul 19 2012 VIDEO dr-xr-xr-x 1 root root 2048 Jul 19 2012 Android dr-xr-xr-x 1 root root 2048 May 24 2012 PPT dr-xr-xr-x 1 root root 2048 Jul 19 2012 TMP

总结

在Linux系统中,USB Mass Storage(USB大容量存储)设备通常指的是通过USB接口连接的外部硬盘、USB闪存驱动器或其他存储设备,这些设备可以被用作文件存储、数据备份、数据传输等。而主控端识别USB MSC设备中的文件,本质上是通过多层协议协作实现的,涉及USB枚举、SCSI命令传输和文件系统解析三个核心环节。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/18 18:59:15

企业级后台管理系统快速搭建:从架构解耦到效率革命

还在为传统后台系统开发中复杂的权限控制、繁琐的路由配置和重复的UI集成而耗费大量时间吗&#xff1f;企业级后台管理系统的开发往往面临技术架构与业务逻辑的深度耦合&#xff0c;导致开发效率低下和维护成本高昂。本文将通过现代化的技术框架&#xff0c;带你实现从传统开发…

作者头像 李华
网站建设 2026/2/20 9:13:43

Windows环境下Multisim数据库访问异常实战案例

Multisim数据库连接失败&#xff1f;一文搞懂Windows下的深层排查与实战修复 你有没有遇到过这样的场景&#xff1a;刚打开Multisim准备做电路仿真&#xff0c;结果弹出一个冷冰冰的提示——“ 无法访问数据库 ”、“ 元件库加载失败 ”&#xff0c;甚至软件直接卡在启动界…

作者头像 李华
网站建设 2026/2/17 21:54:24

OpenXR-Toolkit完全指南:三分钟掌握VR应用性能优化秘诀

OpenXR-Toolkit完全指南&#xff1a;三分钟掌握VR应用性能优化秘诀 【免费下载链接】OpenXR-Toolkit A collection of useful features to customize and improve existing OpenXR applications. 项目地址: https://gitcode.com/gh_mirrors/op/OpenXR-Toolkit OpenXR-To…

作者头像 李华
网站建设 2026/2/18 19:41:12

LogicFlow节点缩放终极指南:从问题定位到完美解决方案

LogicFlow节点缩放终极指南&#xff1a;从问题定位到完美解决方案 【免费下载链接】LogicFlow A flow chart editing framework focusing on business customization. 专注于业务自定义的流程图编辑框架&#xff0c;支持实现脑图、ER图、UML、工作流等各种图编辑场景。 项目地…

作者头像 李华
网站建设 2026/2/17 5:15:14

Vue3迁移终极指南:vue-admin-better完整适配方案与实战避坑

Vue3迁移终极指南&#xff1a;vue-admin-better完整适配方案与实战避坑 【免费下载链接】vue-admin-better &#x1f389; vue admin,vue3 admin,vue3.0 admin,vue后台管理,vue-admin,vue3.0-admin,admin,vue-admin,vue-element-admin,ant-design,vab admin pro,vab admin plus…

作者头像 李华
网站建设 2026/2/20 9:07:19

AlphaPose终极指南:从零掌握实时多人姿态估计算法

AlphaPose作为业界领先的实时多人姿态估计算法&#xff0c;在计算机视觉领域树立了新的技术标杆。这个由上海交通大学MVIG实验室精心打造的开源项目&#xff0c;通过创新的区域多人姿态估计算法框架&#xff0c;为开发者提供了强大而灵活的技术支持。 【免费下载链接】AlphaPos…

作者头像 李华