【问题标题】:How does the USB storage driver works in Linux?USB 存储驱动程序在 Linux 中如何工作?
【发布时间】:2013-12-21 11:53:26
【问题描述】:
我试图从高级别的角度了解 USB 存储驱动程序在 Linux 中的工作原理。我正在寻找一篇简单的文章,甚至是描述其工作原理的图片/流程图。
基本上,我希望回答这些问题:
当您将设备插入计算机时,会发生什么?是否有一个守护进程可以接收它,或者该事件是否在某处触发了中断?在将控制权交给 USB 存储驱动程序之前,核心 USB 驱动程序是否会读取有关设备的信息?它如何决定它是什么类型的设备?设备是如何挂载的,是什么允许它与计算机的文件系统通信?当我复制文件时,内核中的数据流是什么样的?
我希望这个问题不会太含糊 - 我尝试了谷歌但无济于事,所以我想知道是否有人知道任何可以解释这一点的文章或图表,或者他们是否可以自己解释而无需太多努力。谢谢。
【问题讨论】:
标签:
linux
module
usb
kernel
driver
【解决方案1】:
不,这是一个很好的问题。
块写入在 linux 中使用块设备层进行。文件系统正在使用这个块开发层。
如果这一层想写点什么,就告诉usb主设备的驱动。该驱动正在与主板的usb控制器芯片通信。
这个芯片很简单:usb其实就是一个串口,有很多扩展,主要针对自动配置和电源管理。但基本上,你可以写出字节,读入字节。
您的问题:
当您将设备插入计算机时,会发生什么?是否有一个守护进程来处理它,或者该事件是否在某处触发了中断?
设备(usb slave)说master(在主板上):“我在这里”。 usb 控制器芯片收到消息并通过中断将其告知内核(通常)。内核重新初始化并重新扫描 USB 总线,并显示 udev:“这里是 USB 树 1.3.5 上的一个新的 1234:5678 USB 设备”
“它如何决定它是什么类型的设备?”
Usb 设备有供应商和型号 ID,他们可以在询问时说出来。谷歌搜索“usb ids”。
“设备是如何被挂载的,什么允许它与计算机的文件系统通信?”
内核仅加载驱动程序并显示 udev(在用户空间中):“这是设备号 22:16 上的新块设备”。由此,udev 尝试使用一些用户空间守护进程挂载它,它已经依赖于分发。