读Linux那些事儿之我是U盘笔记(一)

简介:

我是U盘
1、 模块
Insmod 设备插入,module_init())被称为驱动程序的初始化入口
Rmmod 设备拔出, module_exit()
2、 Usb core
   什么是usb core?她负责实现一些核心的功能,为别的设备驱动程序提供服务,比如申请内存,比如实现一些所有的设备都会需要的公共的函数;
3、 host controller(主机控制器)
分类:EHCI(enhance),UHCI(universer),OHCI(open)
4、 bus,device,driver关系
bus里面有devices和drivers两个链表,device里面有bus和driver,driver里边有bus和device,device里边的bus告诉设备是属于那条总线,driver说明设备拥有那个驱动,driver同理;driver和device能够配对是靠const struct usb_device_id *id_table;这个结构体相当于一个人的身份证,如果能够匹配,device_bind_driver使得driver和device联系起来;
5、 usb的四类描述符
device:整个设备的特点
configerion:设备的配置
interface:一个interface对应一个usb设备驱动程序.
重要宏:interface_to_usbdev将struct usb_interface转换成struct usb_device结构
Endpoint:
U盘至少有一个控制端点,两个bulk端点
endpoint齐名的有一个叫做管道,或者有文化的人管这个叫 pipe.endpoint 就是通信的发送或者接收点,你要发送数据,那你只要把数据发送到正确的端点那里就可以了.它是有方向的:一个端点是你的目的地,路线是pipe,另一个端点是host controller
            BULK IN(设备到主机)------------------------------>BULK OUT(主机到设备)
6、 usb四种通信方式
   控制传输(C),中断传输(I),批量传输(B),等时传输(T)
   CBI就是Control/Bulk/Interrupt,即控制/批量/中断,使用这种协议的设备有两种通讯方式,一是控制传输,二是批量传输,,控制传输是任何一种 usb 设备都必须支持的,它专门用于传输一些控制信息;bulk 传输,它就是 U盘的主要工作了,读写数据;
   U盘使用Bulk-Only的传输协议

 


 本文转自 曾永刚 51CTO博客,原文链接:http://blog.51cto.com/zyg0227/548128

 



相关文章
|
4月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
247 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
6月前
|
Linux
Linux源码阅读笔记10-进程NICE案例分析2
Linux源码阅读笔记10-进程NICE案例分析2
|
6月前
|
Linux
Linux源码阅读笔记09-进程NICE案例分析1
Linux源码阅读笔记09-进程NICE案例分析1
|
4月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
142 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
6月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
169 2
linux笔记 diff及patch的制作与使用
|
6月前
|
安全 Linux 开发者
Linux笔记之ldd命令详解
`ldd`命令是Linux环境下一个非常实用的工具,用于显示一个程序运行时所需的共享库依赖。它帮助开发者和系统管理员快速诊断程序运行问题,特别是在处理"找不到库文件"或者"错误的库文件版本"等错误时。然而,出于安全的考虑,对于不信任的可执行文件,应该慎用 `ldd`命令,可以考虑使用其他工具如 `objdump`。总的来说,懂得如何妥善且安全地使用 `ldd`,对于维护一个稳定和高效的Linux系统来说,是非常重要的。
175 9
|
6月前
|
存储 缓存 编译器
Linux源码阅读笔记06-RCU机制和内存优化屏障
Linux源码阅读笔记06-RCU机制和内存优化屏障
|
6月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中
|
6月前
|
消息中间件 安全 Java
Linux源码阅读笔记13-进程通信组件上
Linux源码阅读笔记13-进程通信组件上
|
6月前
|
Linux 开发者
Linux源码阅读笔记18-插入模型及删除模块操作
Linux源码阅读笔记18-插入模型及删除模块操作