让\xe2\x80\x99s 说我有 50 个 USB 闪存驱动器。
\n我想他们一定会/dev/sda的/dev/sdz。之后会发生什么/dev/sdz?
当我使用 Ubuntu 和 CentOS 时,我看到/dev/sda和/dev/vda. 所以我无法理解上述两者之间有什么不同?
这个问题有两个方面:
首先,您如何手动从 USB 设备上分离驱动程序并连接不同的驱动程序?例如,我有一个连接时自动使用 USB 存储驱动程序的设备。
Vendor Id: xxxx
Product Id: xxxx
...
Number of Interfaces: 2
Interface Number: 0
Name: usb-storage
Number of Endpoints: 2
...
Interface Number: 1
Name: (none)
Number of Endpoints: 2
...
Run Code Online (Sandbox Code Playgroud)
我不想使用 USB 存储驱动程序,因此在我的应用程序中,我使用该libusb库来分离 USB 存储驱动程序,然后声明该接口。然后,我可以在我的 USB 设备和我的主机 Linux 系统上运行的应用程序之间发送数据。
如何在应用程序之外手动分离驱动程序?
其次,如何自动分配驱动程序以附加到设备插件上?我目前有一个 udev 规则设置来自动设置设备权限:
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"
Run Code Online (Sandbox Code Playgroud)
我可以使用 udev 规则为 USB 设备上的特定接口分配驱动程序吗?例如,如果我希望在接口 0 上自动使用 usbnet 模块而不是 usb-storage,这在 udev 中可能吗?
我编写了一个udev规则,每次安装/卸载我的设备时都会运行该规则。
但是,在调试此类规则时,我应该在哪个 Linux (Debian) 错误日志中查看?
Arch wiki建议创建一个文件/etc/udev/rules.d/来修复我的 Steam 控制器问题。这有效!但是,我注意到这个文件夹中除了我刚刚创建的规则之外没有其他规则。此外,我见过的所有其他来源都说要将 udev 规则放在 中/lib/udev/rules.d/,并且该文件夹中还有很多其他 udev 规则。为什么看似相同的东西有两个文件夹,我应该使用哪个?
我正在创建一个新的基本规则
/etc/udev/rules.d/10-myrule.rules
Run Code Online (Sandbox Code Playgroud)
包含:
KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"
Run Code Online (Sandbox Code Playgroud)
我保存、重新启动并插入了一张 SD 卡(由 识别/dev/sdb1,我看到它dmesg),但没有任何反应。当我手动执行时mount /dev/sdb1 /media,它可以工作。
如何对这样的udev规则进行故障排除/调试?
注意:我使用的是 ArchLinux,但在任何发行版上都应该是一样的?
devfs和sysfs到底有什么区别?两者似乎都维护着一个附加到系统的硬件列表。那么为什么甚至需要 2 个单独的 fs 呢?据我所知,/sys维护了一些“原始”设备列表(如“ser0”)。Udev 作用于这些设备,获取各种信息并应用各种规则将它们呈现为可识别的名称,然后映射到/dev(如“相机”)。这是唯一的原因吗?然后我们将/dev fs 中的相应设备(我们不能从/sys fs 执行此操作)挂载到/media fs 中。
我已经阅读了/dev 和 /sys/class 之间的差异?. 但我无法得到 sys fs 部分,它指出
Sysfs 包含设备的层次结构,因为它们连接到计算机
/sys 中的文件不是设备节点文件吗?那么它们是什么类型的文件呢?
我大致了解位于/dev 下的文件。
我知道有两种类型(字符/块),访问这些文件与内核中的驱动程序通信。
我想知道如果我删除一个会发生什么——特别是对于这两种类型的文件。如果我删除一个块设备文件,比如说/dev/sda,这有什么影响——如果有的话——有什么影响?我刚刚卸载了磁盘吗?
同样,如果我删除/dev/mouse/mouse0- 会发生什么?鼠标停止工作了吗?它会自动替换自己吗?
我什至可以删除这些文件吗?如果我设置了虚拟机,我会尝试一下。
在试图理解另一个问题时,我遇到了/dev/sda0被提及的情况。
我在 Linux 方面有一些经验,并且习惯了这种方案,其中sda, sdb, \xe2\x80\xa6 是设备sda1, , sda2, \xe2\x80\xa6 , sdb1, sdb2, \xe2\x80\xa6 是分区(每个分区都在各自的设备)。在这个方案中sda0, sdb0, \xe2\x80\xa6 不会出现。我不记得sda0曾经见过。
仍然sda0出现在 U&L SE、超级用户和其他地方。在它出现的地方,它几乎总是第一个分区,即我希望在sda1我习惯的方案中出现的分区。
另一方面,在 Debian 10 中,我可以看到major,minor数字8,1for sda1、8,2forsda2等。因此,如果有人问我sda0可能是什么,我会说8,0哪个已经分配给了sda。这个推理sda0相当于sda整个设备。我猜这些数字是 Linux 特有的,在非 Linux Unix(类似)操作系统中它们可能会有所不同,因此推理可能不适用于那里。
在互联网上我发现很少有sda0 …
udev ×10
devices ×4
linux ×4
mount ×3
block-device ×2
arch-linux ×1
debian ×1
drivers ×1
etc ×1
filesystems ×1
history ×1
kernel ×1
linux-kernel ×1
logs ×1
partition ×1
sysfs ×1
usb ×1