我试图找出USB存储驱动程序在Linux中如何工作的高级概述。我正在寻找一篇简单的文章,甚至是描述它如何运作的图片/流程图。
基本上,我希望能够回答这些问题:
当您将设备插入计算机时,会发生什么?是否有一个守护程序可以接收它,或者该事件是否会在某处触发中断?在将控制权交给USB存储驱动程序之前,核心USB驱动程序是否会读取有关设备的信息?它如何决定它是什么类型的设备?如何安装设备,以及允许它与计算机的文件系统通信的是什么?当我复制文件时,内核中的数据流是什么样的?
我希望问题不是太模糊 - 我试过谷歌无济于事,所以我想知道是否有人知道任何可以解释这一点的文章或图表,或者他们是否可以自己解释它而不需要太多努力。感谢。
答案 0 :(得分:9)
不,这是一个非常好的问题。
使用块设备层在linux中进行块编写。文件系统正在使用此块开发层。
如果这个图层想要写出来,那就告诉usb主设备的驱动程序。这个驱动程序正在与主板的USB控制器芯片通信。
这个芯片很简单:usb实际上是一个串口,有很多扩展,主要针对自动配置和电源管理。但基本上,你可以写出字节,并以字节为单位读取。
您的问题:
当您将设备插入计算机时,会发生什么?是否有一个守护程序可以接收它,或者该事件是否会在某处触发中断?
设备(usb slave)说主人(在主板上):“我在这里”。 USB控制器芯片获取消息并通过中断将其传送给内核(通常)。内核重新初始化并重新扫描usb总线,并说udev:“这是usb树1.3.5上新的1234:5678 usb设备”
“它如何决定它是什么类型的设备?”
Usb设备有供应商和型号ID,他们可以这样说。 Google为“usb ID”。
“设备如何安装,以及允许它与计算机文件系统通信的内容?”
内核只加载驱动程序并说出udev(在用户空间中):“这是设备号22:16上的新块设备”。由此,udev尝试使用某些用户空间守护程序挂载它,它已经依赖于分发。