news 2026/6/11 17:55:09

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/6/10 12:23:08

Micropython HC-SR04超声波传感器完整开发指南:从零到精通的终极教程

想要快速掌握Micropython环境下HC-SR04超声波传感器的开发技巧吗&#xff1f;这份终极指南将带你从基础配置到高级应用&#xff0c;全面解锁这个经典传感器的全部潜力。无论你是物联网新手还是硬件开发老手&#xff0c;这里都有你需要的内容。 【免费下载链接】micropython-hcs…

作者头像 李华
网站建设 2026/6/10 12:32:19

深度剖析Synaptics pointing device driver在OEM系统中的部署流程

深度拆解Synaptics触控驱动在OEM系统中的工程部署实战 你有没有想过&#xff0c;为什么同样是Windows笔记本&#xff0c;有的触控板滑动如丝般顺滑&#xff0c;而另一些却频繁误触、卡顿甚至无响应&#xff1f;这背后的关键差异&#xff0c;往往不在于硬件本身&#xff0c;而在…

作者头像 李华
网站建设 2026/6/9 17:44:35

Qlib前端可视化平台:让量化投资触手可及的全新体验

Qlib前端可视化平台&#xff1a;让量化投资触手可及的全新体验 【免费下载链接】qlib Qlib 是一个面向人工智能的量化投资平台&#xff0c;其目标是通过在量化投资中运用AI技术来发掘潜力、赋能研究并创造价值&#xff0c;从探索投资策略到实现产品化部署。该平台支持多种机器学…

作者头像 李华
网站建设 2026/6/10 13:04:10

UniVRM终极指南:Unity中VRM格式的实战技巧与高效配置

UniVRM终极指南&#xff1a;Unity中VRM格式的实战技巧与高效配置 【免费下载链接】UniVRM UniVRM is a gltf-based VRM format implementation for Unity. English is here https://vrm.dev/en/ . 日本語 はこちら https://vrm.dev/ 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华
网站建设 2026/6/10 11:34:04

终极Garry‘s Mod模组发布神器:gmpublisher完整使用教程

gmpublisher是一款专为Garrys Mod打造的高效Workshop发布工具&#xff0c;采用Rust与Svelte开发&#xff0c;通过Tauri框架构建。它彻底摆脱了对gmad.exe和gmpublish.exe的依赖&#xff0c;让模组作者能够轻松发布、更新Workshop内容&#xff0c;还能提取、搜索GMA文件&#xf…

作者头像 李华