USB MSC

news2025/6/2 9:55:35

主机(如电脑)识别USB MSC(Mass Storage Class)设备中的文件,本质上是通过多层协议协作实现的,涉及USB枚举、SCSI命令传输和文件系统解析三个核心环节。以下是详细机制:


🔍 ​一、USB枚举:设备身份识别(主机→设备)​

当USB MSC设备(如U盘)插入主机时,主机通过USB协议进行设备枚举:

  1. 设备描述符获取
    • 主机请求设备描述符(Device Descriptor),确认设备类型(bDeviceClass=0x00,接口类为MSC)。
    • 关键字段:bInterfaceClass=0x08(MSC类)、bInterfaceSubClass=0x06(SCSI指令集)、bInterfaceProtocol=0x50(Bulk-Only传输协议)。
  2. 配置与端点激活
    • 主机获取配置描述符,分配端点(Bulk-In/Bulk-Out端点用于数据传输),完成USB通信通道建立。

✅ ​此阶段目标​:主机确认设备是USB MSC设备,并准备好SCSI命令传输通道。


⚙️ ​二、SCSI命令交互:读取存储结构(主机→设备)​

主机通过SCSI命令集访问存储介质结构,核心命令包括:

SCSI命令操作码功能返回信息
INQUIRY0x12查询设备基本信息(厂商、产品型号)设备属性、兼容性
READ CAPACITY0x25获取存储容量(总扇区数、扇区大小)容量参数(如512字节/扇区)
REQUEST SENSE0x03获取错误状态(用于异常处理)错误代码
READ(10)​0x28读取指定逻辑块地址(LBA)的数据扇区原始数据
关键步骤​:
  1. 读取MBR(主引导记录)​
    • 主机发送 READ(10) 命令,LBA=0,读取磁盘第一个扇区(512字节)。
    • MBR包含分区表​(64字节),记录分区起始LBA、大小及文件系统类型(如FAT32/NTFS)。
  2. 读取DBR(DOS引导记录)​
    • 根据MBR的分区表,主机定位到分区起始扇区(如LBA=2048),再次发送 READ(10) 读取DBR。
    • DBR的BPB(BIOS参数块)​​ 包含文件系统关键参数:
      • bpbResSectors:保留扇区数(FAT表之前的扇区数)
      • bpbFATsecs:每个FAT表大小(扇区数)
      • bpbRootEntCnt:根目录条目数(FAT32中为0)。

📂 ​三、文件系统解析:定位文件(主机操作系统)​

主机操作系统(如Windows/Linux)根据DBR参数解析文件系统:

  1. 定位FAT表与根目录
    • FAT1起始扇区 = 分区起始LBA + 保留扇区数(bpbResSectors)。
    • 根目录起始扇区(FAT32) = FAT1起始扇区 + FAT表数量 × 每个FAT表大小。
  2. 遍历目录条目
    • 根目录的每个条目(32字节)包含:
      • 文件名(8.3格式或长文件名)
      • 文件属性(目录/文件/隐藏)
      • 起始簇号
      • 文件大小。
  3. 文件内容读取
    • 根据起始簇号,在FAT表中查找簇链,通过 READ(10) 命令读取连续簇的数据。

🌰 ​示例​:读取test.txt文件:

  1. 根目录找到条目,获起始簇号=2。
  2. 查FAT表:簇2→簇3→簇4(链式存储)。
  3. 计算簇2的LBA = 数据区起始LBA + (簇号-2) × 每簇扇区数。
  4. 发送 READ(10) 读取对应扇区。

💎 ​总结:主机识别文件的完整流程

[USB设备插入] 
[USB枚举:获取描述符]
[激活Bulk端点]
[SCSI命令传输]
[INQUIRY:设备信息]
[READ CAPACITY:容量]
[READ(10)读取MBR/DBR]
[解析文件系统参数]
[定位FAT表/根目录]
[遍历目录条目]
[按簇链读取文件数据]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2393556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FART 自动化脱壳框架一些 bug 修复记录

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ open() 判断不严谨 https://github.com/CYRUS-STUDIO/FART/blob/master/fart10/art/runtime/art_method.cc 比如: int dexfilefp open(dex_pat…

基于Flask实现豆瓣Top250电影可视化

项目截图 概述 该项目旨在对豆瓣Top 250电影进行全面的数据分析,使用了Python爬虫、Flask框架进行开发,并采用了Echarts进行数据可视化以及WordCloud进行词云分析。应用展示了多个功能,如电影列表、评分分布、词频统计和团队信息。 主要功能…

More SQL(Focus Subqueries、Join)

目录 Subqueries Subqueries That Return One Tuple Subqueries and Self Connection The IN Operator The Exists Operator The Operator ANY The Operator ALL Union, Intersection, and Difference(交并差) Bag Semantics Controlling Dupl…

从图像处理到深度学习:直播美颜SDK的人脸美型算法详解

在直播的镜头前,每一位主播都希望自己“光彩照人”。但在高清摄像头无死角的审视下,哪怕是天生丽质,也难免需要一点技术加持。于是,美颜SDK应运而生,成为直播平台提升用户粘性和视觉体验的重要工具。 尤其是在“人脸美…

zTasker一款Windows自动化软件,提升效率:大小仅有10MB,免费无广告

一、zTasker是什么? zTasker是一款发布于2023年9月的免费无广告工具,专为Windows用户打造。它以仅8MB的轻量体积、极低资源占用(内存消耗不足10MB)和秒级启动速度脱颖而出,堪称“任务计划程序的终极强化版”。无论是定…

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现

最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现 一、网络流问题与相关概念1.1 网络流问题定义1.2 关键概念 二、Ford-Fulkerson算法原理2.1 核心思想2.2 算法步骤 三、Ford-Fulkerson算法的代码实现3.1 Python实现3.2 C实现3.3 Java实现 四、Ford-Fulkerson算法的时间…

【测试】Bug和用例

软件测试贯穿于软件的整个⽣命周期 软件测试的⽣命周期是指测试流程,这个流程是按照⼀定顺序执⾏的⼀系列特定的步骤,去保证产品质量符合需求。在软件测试⽣命周期流程中,每个活动都按照计划的系统的执⾏。每个阶段有不同的⽬标和交付产物 Bu…

鸿蒙OS的5.0.1.120版本体验怎么样?

点击上方关注 “终端研发部” 设为“星标”,和你一起掌握更多数据库知识 越来越是好用了,之前是凑合能用,现在是大多能用。 我朋友的mate30PRO和PuraX一起用,新系统确实满足我90%以上的需求 一个系统适配一款机型,是要…

使用ssh-audit扫描ssh过期加密算法配置

使用ssh-audit扫描ssh过期加密算法配置 安装检查ssh的加密算法配置修改ssh的加密算法配置 安装 # pip3安装ssh-audit pip3 instal ssh-audit检查ssh的加密算法配置 # 检查ssh的配置 ssh-audit 192.168.50.149修改ssh的加密算法配置 # 查看ssh加密配置文件是否存在 ls /etc/c…

Java+Playwright自动化-2-环境准备与搭建-基于Maven

1.简介 上一章中已经讲如何通过引入jar包来搭建JavaPlaywright自动化测试环境,这一种是比较老的方法,说白了就是过时的老古董,但是我们必须了解和知道,其实maven搭建无非也就是下载引入相关的jar包,只不过相比之下是简…

由sigmod权重曲线存在锯齿的探索

深度学习的知识点,一般按照执行流程,有 网络层类型,归一化,激活函数,学习率,损失函数,优化器。如果是研究生上课学的应该系统一点,自学的话知识点一开始有点乱。 一、激活函数Sigmod…

二、OpenCV图像处理-图像处理

目录 1、连通性 2、形态学操作 2.1腐蚀和膨胀 2.2开闭运算 2.3礼帽和黑帽 2.4总结 3、图像平滑 3.1图像噪声 3.2均值滤波 3.3高斯滤波 3.4中值滤波 3.5总结 4、直方图 4.1直方图的原理与显示 4.2掩膜的应用 4.3直方图均衡化 4.4自适应均衡化 4.5总结 5、边缘…

UPS的工作原理和UPS系统中旁路的作用

UPS(不间断电源)根据工作原理和适用场景的不同,主要分为以下三种类型,每种类型的特点和适用场景如下: 1. 后备式UPS(Offline/Standby UPS) 工作原理: 正常供电时,负载直接…

麒麟系统 Linux(aarch64处理器)系统java项目接入海康SDK问题

1. 麒麟系统部署海康摄像头时的 JNA 链接错误&#xff0c; 海康提供的jna sdk版本太低&#xff0c;需升级版本4.5及以上&#xff0c;把集成的Structure 替换成以下类 public class SDK_Structure extends Structure {protected List<String> getFieldOrder() {List<St…

Python图片格式批量转换器教程

&#x1f4da; 前言 编程基础第一期《11-30》-- 在图像处理工作中&#xff0c;我们经常需要将大量图片从一种格式转换为另一种格式。本教程将介绍如何使用Python的Pillow库开发一个简单但功能强大的图片格式批量转换器&#xff0c;帮助你高效处理图片格式转换任务。 目录 &…

从公开到私密:重新思考 Web3 的数据安全

去中心化存储是 Web3 的基石之一&#xff0c;使用户和应用能够在无需依赖中心化服务商的情况下存储数据。但自由也带来了一个重大挑战&#xff1a;数据安全。在一个无许可的世界中&#xff0c;如何确保用户文档、游戏资产或 AI 数据集等敏感内容是私密的、可控访问的&#xff0…

计算机网络常见体系结构、分层必要性、分层设计思想以及专用术语介绍

计算机网络体系结构 从本此开始&#xff0c;我们就要开始介绍有关计算机网络体系结构的知识了。内容包括&#xff1a; 常见的计算机网络体系结构 计算机网络体系结构分层的必要性 计算机网络体系结构的设计思想 举例说明及专用术语 计算机网络体系结构是计算机网络课程中…

接口自动化测试用例的编写方法

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式的接口是上传接口&#xff0c;需要对接口头部进行封装&#xff0c;所以没有办法在浏览器下直接调…

基于SpringBoot的商家销售管理网站的设计与实现

湖南软件职业技术大学 本科毕业设计(论文) 设计(论文)题目 基于SpringBoot的商家销售管理网站的设计与实现 学生姓名 学生学号 所在学院 专业班级 校内指导教师 企业指导教师 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕…

word中表格拉不动以及插入图片有间距

1、word中表格插入图片始终有间隙&#xff0c;怎么调表格高度和宽度都消除不了间隙&#xff0c;如下所示&#xff1a; 可以在表布局—单元格边距—修改上下左右边距为0即可 2、经过上述调整后左右没有间隔了&#xff0c;但图片上下有间隔&#xff0c;直觉是行距问题&#xff0c…