news 2026/9/3 2:24:43

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/9/3 0:25:07

PaddlePaddle Panoptic Segmentation全景分割实现

PaddlePaddle 全景分割实战&#xff1a;从原理到部署的完整路径 在自动驾驶感知系统中&#xff0c;一个常见的挑战是&#xff1a;如何同时准确识别“画面中有多少辆汽车”&#xff0c;并精确勾勒出“每一辆车的轮廓边界”&#xff1f;传统方案往往需要串联多个模型——分类、目…

作者头像 李华
网站建设 2026/9/2 23:34:23

PaddlePaddle镜像一键部署:高效开启中文NLP与CV开发之旅

PaddlePaddle镜像一键部署&#xff1a;高效开启中文NLP与CV开发之旅 在企业加速AI落地的今天&#xff0c;一个常见的困境是&#xff1a;算法团队花了两周时间终于跑通了模型&#xff0c;结果工程团队却反馈“环境配不起来”。这种“在我机器上能跑”的尴尬&#xff0c;在中文自…

作者头像 李华
网站建设 2026/9/3 0:46:46

PaddlePaddle MobileNet轻量化模型部署指南

PaddlePaddle MobileNet轻量化模型部署实战指南 在移动设备、嵌入式终端和工业边缘场景中&#xff0c;AI模型的“落地难”问题长期困扰开发者&#xff1a;训练好的深度学习模型往往体积庞大、推理缓慢&#xff0c;难以在算力有限的设备上稳定运行。而与此同时&#xff0c;市场对…

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

PaddlePaddle公式识别LaTeX输出:学术论文数字化

PaddlePaddle公式识别LaTeX输出&#xff1a;学术论文数字化 在高校图书馆的档案室里&#xff0c;一摞泛黄的博士论文静静躺在角落——它们承载着数十年前的研究智慧&#xff0c;却因缺乏电子化手段而难以被检索、复用。类似场景在全球科研机构中屡见不鲜&#xff1a;大量珍贵知…

作者头像 李华
网站建设 2026/9/3 1:15:18

李跳跳自定义规则:手机弹窗终极解决方案

李跳跳自定义规则&#xff1a;手机弹窗终极解决方案 【免费下载链接】LiTiaoTiao_Custom_Rules 李跳跳自定义规则 项目地址: https://gitcode.com/gh_mirrors/li/LiTiaoTiao_Custom_Rules 还在为手机应用里不断弹出的广告、更新提示和权限请求而烦恼吗&#xff1f;李跳跳…

作者头像 李华
网站建设 2026/9/2 18:55:21

PaddlePaddle图像哈希感知Hash生成:查重与检索

PaddlePaddle图像哈希感知Hash生成&#xff1a;查重与检索 在短视频平台每天上传数百万条内容的今天&#xff0c;如何快速识别重复或高度相似的图片和视频帧&#xff1f;电商平台面对海量商品图&#xff0c;怎样实现“以图搜图”的流畅体验&#xff1f;这些问题背后&#xff0c…

作者头像 李华