我想了解Linux文件系统是如何工作的,但我唯一拥有的Linux系统是我的Android手机(已root),所以我根据我在Android手机上使用adb shell看到的内容来询问。
从这里和这里我读到,连接到 Android 系统的每个硬件都被操作系统视为一个文件。所以 /dev/dsp 是音频硬件,向此文件写入任何内容都会通过扬声器显示为声音(所以我假设如果我在此文件中写入 1 字节字符流,它们将首先被解释为 2 字节单词,交错对于左声道和右声道,就像在 wav 文件中一样并通过扬声器播放?)。但是,在 adb shell 中进入 /dev 并使用 ls 命令我看不到 dsp 文件。
我的问题是,/dev文件夹中的文件命名是标准的,还是可以有任何名称?它说这里命名可以完全随机。
有某种命名方案,但在绝大多数情况下,这些命名方案是完全不合逻辑的。
如果这是真的那么我们怎么知道哪个文件代表什么?
答案1
您的 tldp 链接有点历史。如果您/dev
只将其视为文件系统的一部分,您就会错过该子系统的本质。
AB 的评论提到了主要/次要;但他的链接只是原始列表。这里分配的设备 kernel.org HTML还有一些附加信息。
我认为“一切都是文件”在这种情况下相当具有误导性。中的文件/dev
被称为特殊文件,字符或块。 “c”或“b”表明了这一点。
]# ls -l /dev/tty1 /dev/sda1
brw-rw---- 1 root disk 8, 1 Nov 5 17:27 /dev/sda1
crw------- 1 root tty 4, 1 Nov 7 05:48 /dev/tty1
文档中的 Major=8:
8 block SCSI disk devices (0-15)
0 = /dev/sda First SCSI disk whole disk
16 = /dev/sdb Second SCSI disk whole disk
32 = /dev/sdc Third SCSI disk whole disk
...
240 = /dev/sdp Sixteenth SCSI disk whole disk
但这甚至不能直接解释为什么一个高数字的分区突然变得major=259:
]# ls -l /dev/sda16
brw-rw---- 1 root disk 259, 0 Nov 5 17:27 /dev/sda16
我选择这个“sda”示例是因为它是主要的大容量存储。我不知道这如何转化为Android。
块设备(分区)可以直接写入,但通常它们是用文件系统格式化然后挂载的。
一般来说,/dev 中的文件是设备的接口,而不是设备本身。
今天,/dev 是一个像 /sys 一样的伪文件系统:
TARGET SOURCE FSTYPE
/dev dev devtmpfs
/sys sys sysfs
/ /dev/sda3 ext4
在引导期间,/dev 被内核填充。用户可以通过加载模块的方式添加设备。modprobe loop
给你/dev/loop0-7
例如
(建议的编辑希望“由 udev”而不是“由内核”填充。我认为这更多的是命名而不是填充本身。如果您想了解详细信息,则必须查看驱动程序、模块或不是。)
通过插入外部 USB 存储,您可以获得 sdb、sdc 等,但前提是模块usb_storage
已加载。
这界面/dev 特殊文件的性质也显示在名称中:有些像 sda 或 tty 是技术性的,有些(在 /dev/disk/by-... 下)是为了方便或识别而提供的链接。