news 2026/4/18 18:00:15

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/4/17 18:38:27

WinPmem:跨平台内存采集的终极解决方案

WinPmem&#xff1a;跨平台内存采集的终极解决方案 【免费下载链接】WinPmem The multi-platform memory acquisition tool. 项目地址: https://gitcode.com/gh_mirrors/wi/WinPmem WinPmem是一款功能强大的开源内存采集工具&#xff0c;专为安全分析和系统监控而设计。…

作者头像 李华
网站建设 2026/4/19 6:45:15

OpenWMS完整部署实战:从零构建现代化仓库管理系统

OpenWMS完整部署实战&#xff1a;从零构建现代化仓库管理系统 【免费下载链接】org.openwms Open Warehouse Management System 项目地址: https://gitcode.com/gh_mirrors/or/org.openwms 面对仓库管理系统的复杂部署需求&#xff0c;许多技术团队在架构设计和环境配置…

作者头像 李华
网站建设 2026/4/17 14:12:11

Dynamic Wallpaper:让你的Linux桌面24小时自动变换的终极解决方案

Dynamic Wallpaper&#xff1a;让你的Linux桌面24小时自动变换的终极解决方案 【免费下载链接】dynamic-wallpaper A simple bash script to set wallpapers according to current time, using cron job scheduler. 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-wal…

作者头像 李华
网站建设 2026/4/18 1:17:16

3分钟零代码建站:Hugo Blox Builder让每个人都能拥有专业网站

3分钟零代码建站&#xff1a;Hugo Blox Builder让每个人都能拥有专业网站 【免费下载链接】hugo-blox-builder &#x1f60d; EASILY BUILD THE WEBSITE YOU WANT - NO CODE, JUST MARKDOWN BLOCKS! 使用块轻松创建任何类型的网站 - 无需代码。 一个应用程序&#xff0c;没有依…

作者头像 李华
网站建设 2026/4/18 7:08:08

DiffDock:基于扩散模型的蛋白质配体对接技术深度实践

DiffDock&#xff1a;基于扩散模型的蛋白质配体对接技术深度实践 【免费下载链接】DiffDock Implementation of DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking 项目地址: https://gitcode.com/gh_mirrors/di/DiffDock 在当前AI药物发现快速发展的…

作者头像 李华
网站建设 2026/4/18 12:05:34

PaddlePaddle镜像部署常见问题及解决方案汇总

PaddlePaddle镜像部署常见问题及解决方案汇总 在深度学习项目落地的过程中&#xff0c;环境配置往往是开发者最头疼的一环。明明本地训练跑得通&#xff0c;换一台机器就报错&#xff1b;CUDA版本不匹配、Python依赖冲突、cuDNN找不到……这些“在我电脑上好好的”问题&#x…

作者头像 李华