USB存储驱动程序在Linux中是如何工作的



我正试图了解USB存储驱动程序在Linux中的工作原理。我正在寻找一篇简单的文章,甚至一张图片/流程图来描述它是如何工作的。

基本上,我希望得到这些问题的答案:

当你把设备插入电脑时,会发生什么?是否有守护进程接收到它,或者该事件是否在某个地方触发了中断?在将控制权移交给USB存储驱动程序之前,核心USB驱动程序是否读取了有关设备的信息?它如何决定它是什么类型的设备?设备是如何安装的,是什么允许它与计算机的文件系统通信?当我复制一个文件时,内核中的数据流是什么样子的?

我希望这个问题不要太模糊——我试过谷歌,但没有成功,所以我想知道是否有人知道任何文章或图表可以解释这一点,或者他们是否可以自己解释,而不需要太多努力。谢谢

不,这是一个很好的问题。

区块写入是在linux中使用区块设备层进行的。文件系统使用这个块开发层。

如果这个层想写一些东西,就告诉usb主设备的驱动程序。这个驱动程序正在与主板的usb控制器芯片通话。

这个芯片非常简单:usb实际上是一个串行端口,有很多扩展,主要针对自动配置和电源管理。但基本上,你可以写出字节,也可以读入字节。

您的问题:

当您将设备插入计算机时,会发生什么?是否有守护进程接收到它,或者该事件是否在某个地方触发了中断

设备(usb从设备)告诉主机(在主板上):"我在这里"。usb控制器芯片获得消息,并通过中断将其告知内核(正常情况下)。内核重新初始化并重新扫描usb总线,并告诉udev:"这是usb树1.3.5上的一个新的1234:5678 usb设备"

"它如何决定它是什么类型的设备?"

Usb设备有一个供应商和型号id,他们可以根据要求这样说。谷歌搜索"usb id"。

"设备是如何安装的,是什么允许它与计算机的文件系统通信?"

内核只加载驱动程序,并告诉udev(在用户空间中):"这是设备编号22:16上的一个新块设备"。由此,udev试图用一些用户空间守护进程装载它,它已经依赖于分发。

最新更新