了解Linux(Android)中的/dev文件夹

了解Linux(Android)中的/dev文件夹

我想了解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-... 下)是为了方便或识别而提供的链接。

相关内容