usb Mass Strorage分析(1)

usb Mass Strorage分析(2) USB MASS Storage驱动分层很多层次: 1. 从最简单的“ 物理层”开始,先介绍一下MSC(Mass Storage Class) Device 与USB Host的结构: 上图中,Storage Media,就是我们例子中的Nand Flash芯片。 而例子中的那个控制芯片,是Microcontroller with embedded USB device co 阅读详情


接上一篇: usb-skeleton.c到 usb core层的分析

对于存储设备的USB,Linux源码中有关于USB MASS Storage 的驱动程序(/drivers/usb/storage下),其中/drivers/usb/storage/usb.c 实现了驱动初始化,和usb-skeleton.c 例子以一样,调用    retval = usb_register(&usb_storage_driver); 注册usb设备,

static struct usb_driver usb_storage_driver = {
    .name =        "usb-storage",
    .probe =    storage_probe,
    .disconnect =    storage_disconnect,
#ifdef CONFIG_PM
    .suspend =    storage_suspend,
    .resume =    storage_resume,
    .reset_resume =    storage_reset_resume,
#endif
    .pre_reset =    storage_pre_reset,
    .post_reset =    storage_post_reset,
    .id_table =    storage_usb_ids,
    .soft_unbind =    1,
};

static int storage_probe(struct usb_interface *intf,
             const struct usb_device_id *id)
{


.....................

    /*
     * Ask the SCSI layer to allocate a host structure, with extra
     * space at the end for our private us_data structure.
     */
    host = scsi_host_alloc(&usb_stor_host_template, sizeof(*us));
    if (!host) {
        printk(KERN_WARNING USB_STORAGE
            "Unable to allocate the scsi host\n");
        return -ENOMEM;
    }

 
    result = get_device_info(us, id);
    if (result)
        goto BadDevice;

    result = get_transport(us);   //获得usb设备端的的数据,并进行相应设置,见下面
    if (result)
        goto BadDevice;
    result = get_protocol(us);   //获得usb设备端协议的数据,并进行相应设置,见下面
    if (result)
        goto BadDevice;
    result = get_pipes(us);    //获得endpoint管道的数据,并进行相应设置,见下面
    if (result)
        goto BadDevice;
.........................

    result = usb_stor_acquire_resources(us);   //获得资源,开启了一个控制内核的线程static int usb_stor_control_thread(void * __us),用于接收上层命令,该线程会在有命令的时候(休眠等待),调用struct us_data(在storage中定义的数据)中的proto_handler方法,从而调用transport,向usbcore发送命令。非常重要,见下面代码
    if (result)
        goto BadDevice;
    result = scsi_add_host(host, &intf->dev);    增加到SCSI host
    if (result) {
        printk(KERN_WARNING USB_STORAGE
            "Unable to add the scsi host\n");
        goto BadDevice;
    }

    /* Start up the thread for delayed SCSI-device scanning */
    th = kthread_create(usb_stor_scan_thread, us, "usb-stor-scan");
   
}

流程结构图:

以下是进行usb设备端信息获取,同时设置us参数的函数get_transport()、get_protocal()、getPipes(),对应着上图中的Protocal Layer 和 Transfer Layer,分别在/drivers/usb/storage/protocal.c、transport.c中实现。初始化完成了交给SCSI层的接口后就由上层处理。




static int get_transport(struct us_data *us)
{
    switch (us->protocol) {
    case US_PR_CB:
        us->transport_name = "Control/Bulk";
        us->transport = usb_stor_CB_transport;
        us->transport_reset = usb_stor_CB_reset;   //在transport.c中定义 usb_stor_CB_reset
        us->max_lun = 7;
        break;

    case US_PR_CBI:
        us->transport_name = "Control/Bulk/Interrupt";
        us->transport = usb_stor_CBI_transport;
        us->transport_reset = usb_stor_CB_reset;  //同上
        us->max_lun = 7;
        break;

    case US_PR_BULK:
        us->transport_name = "Bulk";
        us->transport = usb_stor_Bulk_tr

STM32 HAL库架构解析:从驱动分层到工程实践 HAL库是嵌入式系统中硬件抽象层(HAL)的核心实现,其本质是通过标准化C语言API屏蔽底层寄存器差异,实现跨MCU系列的可移植驱动开发。它基于CMSIS标准构建,依托句柄(Handle)机制封装外设状态与配置,在可移植性、易用性与完备性之间取得平衡。技术价值体现在降低开发门槛、保障代码长期可维护性,并天然支持CubeMX图形化配置与中间件集成。典型应用场景包括STM32全系列工业控制、IoT终端及HMI设备开发,尤其适用于需兼顾快速原型验证与后期性能优化的项目。本文深入剖析HAL库在STM32Cube生态 阅读详情

相关推荐

Linux下的USB总线驱动(三)

版权所有,转载请说明转自 http://my.youkuaiyun.com/weiqing1981127       4.U盘驱动分析 USB Mass Storage是一类USB存储设备,这些设备包括USB磁盘、USB硬盘、USB磁带机、USB光驱、U盘、记忆棒、智能卡和一些USB摄像头等,这类设备由USB协议支持。 首先我想去看看/driver/usb/storage/Makefile E

weiqing的专栏 4336

别再手动巡检了!用Zabbix 5.0 + SNMPv2自动监控华为S系列交换机(附完整命令集)

本文详细介绍了如何利用Zabbix 5.0与SNMPv2实现华为S系列交换机的自动化监控,告别低效的手动巡检。通过配置SNMPv2c安全基线、核心功能启用及Zabbix Server端深度配置,构建7×24小时监控体系,实时预警接口状态、流量波动等关键指标,大幅提升运维效率与故障响应速度。

weixin_30940783的博客 628

用Docker部署ERPNext V15:从架构原理到生产落地的完整指南

容器化部署正在重塑企业级应用的分发与运维方式,ERPNext作为开源ERP中的佼佼者,其基于Frappe框架的模块化设计天然适合用Docker进行编排。理解容器、镜像与编排的关系,是掌握ERP系统部署的基础。Frappe框架负责数据模型与API,ERPNext则承载销售、采购、财务等业务逻辑,两者通过Docker容器解耦为可独立扩展的组件。这种架构带来的价值在于:环境一致性、快速迁移与弹性伸缩,使中小团队也能以较低成本自托管业务系统。无论是替代传统SaaS,还是构建内部管理平台,掌握容器化部署已成为运维与开

weixin_32325225的博客 138

EtherCAT-1 技术概述

1.EtherCAT简介①开放的技术EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。②快速性相比传统现场总线,EtherCAT的数据传输速率有了极大的提升,可选10Mbit/s或100Mbit/s,甚至依托补充

tianya_xuan的博客 3543

CST Studio Suite安装详细教程(附安装包)CST Studio Suite 2024超详细安装教程

CST Studio Suite 2024安装指南摘要:本文详细介绍了CST Studio Suite 2024电磁仿真软件的下载与安装流程,包含23个图文步骤说明,从解压安装包到配置许可证服务器。重点提示了以管理员身份运行、自定义安装路径等关键步骤,并提供了常见问题解决方案和入门技巧。该软件适用于天线设计、PCB分析等高频电磁场仿真,安装后需通过localhost:27000连接许可证服务器完成激活。

pythonqiang9的博客 1万+

工业质检封神!YOLOv8实战金属表面缺陷检测,自建数据集mAP突破95%

本文详细介绍了基于YOLOv8的金属表面缺陷检测实战方案。针对工业质检中的光照不均、纹理复杂、小样本等挑战,作者构建了12000张图像的数据集,提出针对性数据增强策略和两阶段训练方法。通过优化损失函数、调整超参数等技术手段,最终在测试集上达到95.1%的mAP@0.5,检测速度32FPS。相比传统方法,该方案在精度和鲁棒性上均有显著提升,为工业视觉质检提供了可复现的落地解决方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 428

面向口齿不清者的语音识别新突破:用大模型拯救“听不懂”的声音

面向构音障碍患者的语音识别新突破:大语言模型显著提升识别准确率 国际语音研究团队在Interspeech 2025发表最新成果,通过将大语言模型(LLM)融入语音识别系统,显著改善了对构音障碍(dysarthria)患者语音的识别效果。研究表明: 传统语音识别(如CTC模型)对构音障碍语音的词错误率(WER)高达50-54%,Whisper模型降至38-40%。 引入LLM解码器后,BART模型将WER降至30-32%,而Whisper-Vicuna组合更将WER降低至21-26%。 关键优势:LLM能有效

帅小柏的博客 270

知道LPDDR和DDR什么关系吗?

话不多说,先上大白话,一个网友总结的很好:简单地说DRR4是标准电压版的PC和服务器内存,LPDDR4属于手机等嵌入式移动设备使用的低电压低功耗内存,LPDDR4X则是LPDDR4的升级版,下面详细看看老哥的博客。LPDDR4是与DDR4内存等效的移动设备。。LPDDR4具有两个16位通道,从而使每个DIMM的总线总长度为32位。相比之下,DDR4每个DIMM具有64位通道。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 2805

Python在振动信号处理中的应用(一):振动信号消除多项式趋势项

文章目录一、概述二、最小二乘法去除趋势项原理三、python模块介绍3.1 scikitlearn简介(1)转化器(Transformer)(2)估计器(Estimator)3.2 线性回归LinearRegression3.3 多项式PolynomialFeatures3.4 工作流Pipeline四、python代码实现4.1 构造模拟信号4.2 编写去除趋势项主代码4.3 展示算法效果五、TIPS 一、概述   在振动测试过程中,传感器或采集设备由于自身性能问题或受环境干扰(如温度、供电等影响),容易

白银时代的博客 8578

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: usb-skeleton.c到 usb core层的分析
下一篇: usb Mass Strorage分析(2)
shareCode
博客等级 码龄15年 125粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值