Linux kernel 如何在'/开发和#x27;匹配Linux';设备的型号是什么?

Linux kernel 如何在'/开发和#x27;匹配Linux';设备的型号是什么?,linux-kernel,linux-device-driver,embedded-linux,Linux Kernel,Linux Device Driver,Embedded Linux,以下是我对打开文件进行读/写的理解 在应用层,我可以调用fopen()函数 fwrite()函数将调用系统调用open() 在操作系统接收到open()调用后,它将把命令传递给VFS(虚拟文件系统) VFS查找文件名,包括所需的任何目录,并进行必要的访问检查 如果这在RAM缓存中,则不需要访问磁盘。如果没有,VFS将向特定的文件系统(可能是EXT4)发送读取请求 然后EXT4文件系统驱动程序将确定该目录位于哪个磁盘块中。然后,它将向磁盘设备驱动程序发送读取命令 现在让我们假设我想读一个连接到电

以下是我对打开文件进行读/写的理解

在应用层,我可以调用
fopen()
函数

fwrite()
函数将调用系统调用
open()

在操作系统接收到
open()
调用后,它将把命令传递给VFS(虚拟文件系统)

VFS查找文件名,包括所需的任何目录,并进行必要的访问检查

如果这在RAM缓存中,则不需要访问磁盘。如果没有,VFS将向特定的文件系统(可能是EXT4)发送读取请求

然后EXT4文件系统驱动程序将确定该目录位于哪个磁盘块中。然后,它将向磁盘设备驱动程序发送读取命令


现在让我们假设我想读一个连接到电路板上的i2c设备A。文件目录是/dev/i2c/A

  • 是否所有设备都有一个主要编号?例如,Linux操作系统将180设置为USB的主要数字。那么在设备端,每个USB设备中是否都有一个主数字180

  • 如果第一个问题的答案是否定的,那么Linux操作系统如何确定设备A是哪种类型,是否仅仅根据文件目录

  • 我想第二个问题的答案可能是:在启动初始化阶段,有些代码已经使用类似export()的东西将该端口装载到文件系统中了?所以事实上,在启动阶段之后,文件目录/dev/i2c/A就存在了,并且它与i2c设备的一个主要编号绑定在一起。因此,当我想打开dev/i2c/A时,操作系统会为我找到合适的i2c驱动程序,而不是SPI或USB驱动程序。我不确定这部分,我需要更多关于这方面的信息

  • 当设备在引导阶段之后立即装载到文件系统时,就会出现上述情况。那么,如果我有一个usb,那么在插入usb后,如何将这个usb挂载到具有正确主数字180的文件系统上呢?我猜在安装阶段开始前插入usb时会出现irq


每个设备都有一个主要和次要编号。你可以通过这样做来看到它们
ls-n/dev
对于某些驱动程序,如磁盘,主数字是硬编码的。对其他人来说,这是动态的。可以在运行时发现设备时动态分配次要编号,而不仅仅是在引导时。内核维护一个内部设备开关表,该表将dev编号映射到正确的驱动程序。

请参阅:。如果运行示例代码,可以看到在从
USB
添加/删除设备时会发送
netlink
事件。这是问题的一部分。每个驾驶员应连接到
总线
;这可以是
platform
USB
I2C
SPI
PCI
,等等。此外,在
sysfs
中,将有用于识别特定设备的条目。通常,地址可用于识别特定的客户机/从机芯片。驱动程序模型也有助于暂停、恢复、有序关机等

/dev/
中的文件由
udev
mdev
用户空间程序创建。它们将名称与设备节点(主节点、次节点、字符/块)相关联。您可以使用
sysfs
和/或
udev
脚本根据
netlink
信息创建所需的设备名称;其中大部分可用于
udev
脚本

编辑:对于
i2c
,总线主驱动程序通过运行
探针来发现设备的地址。设备通过表与特定驱动程序相关联。例如,has
imote2_i2c_board_info
,它将
i2c
地址与驱动程序相关联。
SPI
设备也有类似的表
Platform
注意2设备是通过
Platform\u add\u devices()
添加的
USB
PCI
设备由设备的类似
BUS
特定ID标识。通常,机器文件(或最近的
设备树
)将两者关联起来。
另见:

我认为混淆的一个原因是所有的驱动程序/设备都是您在
/dev/
目录中看到的驱动程序/设备。事实并非如此。用户只能看到顶级驱动程序。主设备使用许多Linux驱动程序/设备。它们可以形成设备的层次结构。通常只有顶级设备向用户公开。高级驱动程序可以使用
spi
等功能通过
spi
进行通话,
spi
设备不会暴露在
用户空间中。声音和媒体/电视捕获卡通常使用
SPI
设备,但用户永远不知道该
总线存在并正在使用。通常情况下,多个卡供应商会在下面使用相同的芯片组。不是为每张卡编写驱动程序,而是只为该卡编写一些胶水。然后,将
芯片
驱动程序的通用集合与胶水一起使用,将所有驱动程序绑定在层次结构的顶部;这是暴露在
用户空间中的顶级驱动程序。这还允许smartTM芯片供应商创建系统集成商可以使用的良好驱动程序

注1:通过
i2c
探测,我指的是请求总线上所有注册地址的
i2c
消息。我不确定探针是否是正确的i2c术语


注2
平台
设备为设备。它们没有相关的总线,所以平台是一个包罗万象的平台。通常,
平台
设备与CPU集成(SOC代表片上系统)

此问题的标题与内容不匹配。内容是关于H