从usb storage开始深入linux2.6驱动

Usb otg storage 的调试 1.  内核配置       make menuconfig       Device Drivers  --->              [*] USB support  --->                       USB Gadget Support  --->                             USB Gadget Drivers         阅读详情

usb storage开始深入linux2.6驱动

                                                                                           作者msnhougg@hotmail.com

 

       搞了好久linux基本上还是停留在内核配置编译、启动脚本修改、应用程序等表面的东西。也只能能怪方案提供商或linux把驱动等底层的都做好了,没有给我们个人实践的机会了。

       linux应该看些什么呢?下面仅仅是我的一些观点供大家参考。

       大多数人玩linux 应该还是买一块自己中意的开发板,然后在上面跑linux、图形系统、自己的应用程序。由于是开发板,所以肯定提供了所有相关的文档,看看文档很容易就能跑一个linux了。主要就是bootloader的使用,内核的编译配置。接着你可以看看开发板涉及的驱动,还有就是针对开发板进行的移植部分的代码。

       我最近搞过让系统(2.4.x)支持移动硬盘并让它可以自动装载和卸载,所以就想看看usb storage的东西。并且想了解一下2.6,那就看了2.6usb storage

       我从这里开始看linux-2.6.x/drivers/usb/storage/usb.c。在模块以usb_stor_init函数开始的。最初相关的数据是

static struct usb_driver usb_storage_driver = {

       .owner = THIS_MODULE,

       .name =          "usb-storage",

       .probe =  storage_probe,

       .disconnect =  storage_disconnect,

       .id_table =      storage_usb_ids,

};

先了解模块加载后的运行流程吧,看看函数storage_probe是什么时候被运行的。以下的所有内容就是这个目的。

(图片另存后可看清晰大图)

关键点解释

       内核的设备模型具体我也不是很了解,只能大概的猜一下。最初的usb_storage_driver经过层层注册以后会在内核的设备链表中产生一个struct device结构,这个结构应该包含了设备可以运行起来的所有信息。大概在bus.cbus_add_driver(drv)中加入的吧。其实真正注册进系统的应该是usb_storage_driver的成员struct device_driver driver。所以系统从底层回调上来时传出来的是struct device_driver。那系统如何最后调用到usb_storage_driver中的storage_probe 函数指针呢?见图中usb_probe_interface(dev) 函数中的调用片断。struct usb_driver * driver = to_usb_driver(dev->driver)to_usb_driver 宏调用了container_of宏,该宏的功能就是在知道一个结构中的成员的地址和对应的成员名字以及这个结构的类型的情况下获取这个结构的指针。

 

       到目前也就看了这么点东西,没有实质性的了解代码,仅仅一个函数的运行流程。给自己开始一个修炼linux内功的开始和方向。希望有志同道合的朋友相互切磋一下。

 

参考:

       http://www-128.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html  深入分析 Linux 内核链表

       http://www.blogcn.com/user21/bluehacker/blog/28828622.html Linux 2.6内核的设备模型

 
从零搭建芯片设计环境:在Cadence虚拟机中集成QRC进行寄生参数提取 本文详细介绍了在Cadence虚拟机中集成QRC工具进行芯片设计中的寄生参数提取的全流程。从环境准备、QRC安装配置到实际提取操作,提供了完整的步骤指南和常见问题解决方案,帮助工程师高效搭建芯片设计环境并优化提取性能。 阅读详情

相关推荐

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1696

[Linux] USB-Storage驱动 源码阅读笔记(一)

USB-Storage驱动 源码阅读笔记 最近在研究U盘的驱动,遇到很多难以理解的问题,虽然之前也参考过一些很不错的书籍如:《USB那些事》,但最终还是觉得下载一份最新的源码,慢慢啃源码会有更具象的了解,在这里做一些笔记。本文基于linux-5.16.9描述。 我就USB-Storage的调用栈花了个思维导图,放在这了USB-Storage驱动调用思维导图(免费下载) 一、USB子系统 要想了解USB-Storage驱动,我们就要从USB子系统开始说起。 1.USB Core USB core 是USB

qq_42291035的博客 6851

2004年版中国葡萄酒市场调查研究报告.zip

食品、烟酒、饮料商业计划书

USB U盘Linux mass_storage驱动学习笔记(1)

学习博客地址:https://blog.csdn.net/fudan_abc 学习书名:《Linux那些事之我是USB》 看代码之前,我曾经认真的思考过这么一个问题,我需要关注的仅仅是drivers/usb/storage/目录下面那相关的3000多行代码吗?就是这样几个文件就能让一个个不同的U盘在Linux下面工作起来吗? 很不幸,问题远不是这样简单.外面的世界很精彩,作为U盘,她需要与usb ...

qq_30898641的博客 3668

USB驱动之U盘驱动

U盘使用的是drivers/usb/storage/usb.c驱动 #define DRV_NAME "usb-storage" //插入U盘时一般会打印usb-storage 1-1:1.0: USB Mass Storage device detected static struct usb_driver usb_storage_driver = { .name = DRV_NAME, .probe = storage_probe, .disconnect = usb_sto...

四季帆的博客 4048

yocto linux 添加usb storage 功能

linuxusb storage,原生系统默认是没有的,需要自己配置。那就需要配置usb的gadget功能。在kernel的config开关中需要保证 这些开关打开 CONFIG_USB=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_MXC=y CONFIG_USB_STORAGE=y CONFIG_USB_CHIPIDEA=y CONFIG_USB_CH...

punmpkin的专栏 2022

TIS与数据质量管理平台集成:Great Expectations实践指南

TIS(GitHub推荐项目精选)是一款基于Flink、DataX和Flink-CDC的敏捷DataOps平台,通过Web-UI提供批流一体化的数据同步能力。本文将详细介绍如何将TIS与Great Expectations数据质量管理平台无缝集成,帮助用户构建可靠的数据质量监控体系,确保数据在ETL全流程中的准确性和一致性。 ## 为什么需要数据质量管理? 在现代数据架构中,数据质量直接影响业

gitblog_00681的博客 679

Linux系统上如何禁用 USB 存储

在本方法中,我们往配置文件中添加一行 install usb-storage /bin/true, 这会让安装 usb-storage 模块的操作实际上变成运行 /bin/true, 这也是为什么这种方法叫做伪安装的原因。因此当USB存储器连接到系统上时也就无法加载到驱动程序了,从而导致磁盘不可用,但是这个方法有个小问题,那就是当系统内核更新的时候,usb-storage 模块会再次出现它的默认位置。我是艾西,今天我将聊聊三种不同的方法来禁用 Linux 机器上的 USB 存储设备。最后保存文件并退出。

V13807970340的博客 1699

usb驱动学习笔记

1. usb-storage 驱动注册过程.  module_init(usb_stor_init); usb_stor_init(void) drivers/usb/storage/usb.c>     usb_register(&usb_storage_driver);         usb_register_driver(driver, THIS_MODU

hs6662668的专栏 1307

Linux下大容量存储,第 2 章 USB Mass Storage大容量存储的基本知识

2USB Mass Storage大容量存储的基本知识摘要USB Mass Storage所对应的层次和要实现哪些东西:图2.1.USB Mass Storage FrameworkPC电脑和U盘之间的关系,以及物理上的组成,可以用下图表示:图2.2.PC和U盘更深入的剖析,对于普通U盘的内部结构,则是一个USB物理接口,加上对应的控制芯片(微控制器(含Nand Flash的控制...

weixin_42305377的博客 885

linux之U盘使用

我现使用的是Red Flag Linux Desktop 5.0是自识别的,当然我在家用的是Red Hat 9.0就有这个需要本文为转载文章方案一:Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。USB移动存储设备通常被识别为sda1,具体可以通过fdisk -l命令查询。在使用U盘前,我们先要为外挂点新建一个子目录,一般外挂

465

Linux usb mass,怎么实现Linux下的U盘(USB Mass Storage驱动

2USB Mass Storage大容量存储的基本知识目录2.1. USB Mass Storage相关的协议2.1.1. USB Mass Storage相关协议简介2.1.1.1. USB MSC Control/Bulk/Interrupt (CBI) Transport2.1.1.2. USB MSC Bulk-Only (BBB) Transport2.1.1.2.1. 为何U...

weixin_42099987的博客 917

linux USB大容量设备驱动入门之读取U盘容量

linux USB大容量设备驱动入门之读取U盘容量

我的博客 1193

linux usb mass storage,如何实现Linux下的U盘(USB Mass Storage驱动

关于U盘,估计大家都用过。比如,笔者手上的宇瞻AH320的8G的U盘:图 1. U盘最常见的用法就是,直接将此8GU盘插到电脑的USB口上,然后系统(Windows的XP或者Linux)就会自动检测到你的U盘然后生成一个移动盘符,然后你就可以打开对应盘符,读写文件数据了。而此文呢,目的就是,要搞懂,作为驱动开发者来说,对于这样一个U盘,如何在Linux平台下,去实现U盘驱动,即USB Mass S...

weixin_33462050的博客 743

usb storage驱动分析

本文以usb storage设备驱动来分析

鹤冲云霄的专栏 1万+

usb storage

usb驱动分析一:http://wenku.baidu.com/view/fbce5512a2161479171128f5.html   USB驱动分析(二)                分类:            USB驱动2012-07-18 10:59615人阅读评论(0)收藏举报 structinterfacedescriptor数据结构semaphoretable

热爱生活,热爱android. 6159

UsbStorage驱动开发

前段时间发现有网友在开发驱动的过程中遇到问题,所以今天我整理了一下我在写驱动中的一点心得。希望大家指导!    win2k的UsbStorage不需要驱动程序就能运行,但是如果我们的设备有特殊功能,像前几天有网友问的那种要显示自已的标号的。那么UsbStor.sys就不能满足我们的需求。当然如果要实现自己的功能,我们也只需要UsbStor.sys的基础上修改就行了!     USB磁盘驱动程序是一

Welcom to zougangx's blog 2649

Linux下的硬件驱动——USB设备

最困难的是,usb 设备可以在任何时间点从系统中取走,即使程序目前正在访问它。usb驱动程序必须要能够很好地处理解决此问题,它需要能够切断任何当前的读写,同时通知用户空间程序:usb设备已经被取走。  如果程序有一个打开的设备句柄,在当前结构里,我们只要把它赋值为空,就像它已经消失了。对于每一次设备读写等其它函数操作,我们都要检查 usb_device结构是否存在。如果不存在,就表明设备已经消失,

激情成就梦想--关注移动互联网 1522

usb基本知识

几个重要的概念:       cpu ----usb core)----->host controller(usb控制器) +(集成)+root hub(可以连接多个usb设备) usb主机----(usb协议)--->usb设备 usb core核心:初始化usb系统,初始化root hub usb host :初始化usb控制器 usb控制器的分类:OHCI 1.1接口...

sinat_37817094的博客 903

linux 系统加载优盘

1,以root用户登陆 先加载USB模块 modprobe usb-storage 用fdisk -l 看看U盘的设备 假如U盘是sdc1 2,mkdir /mnt/usb_disk,成功后进行下一步。 #mkdir -p /mnt/usb 注:建立一个目录用来作挂接点(mount point) #mount -t vfat /dev/sdd1 /mnt/usb 注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。 #moun...

qq_23251505的博客 1483

linux-3.6.6移植usbhost(u盘)、sd卡及自动挂载

//-------------------------------------------------------------------------------------------- // 作者:longtian635241(longtian_huang@urbetter.com) // 论坛ID:idea6410 // 版权:idea6410 // 平台:友坚idea6410开发板

longtian635241的专栏 2683
上一篇: Linux系统:疑难杂症的解决(Ubuntu)
下一篇: Monqueror源码简介
houen
博客等级 码龄22年 15粉丝 34原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值