了解 linux (android) 中的 /dev 文件夾
我試圖了解 linux 文件系統是如何工作的,但我擁有的唯一 linux 系統是我的 android 手機(root),所以我根據我在使用 adb shell 的 android 手機中看到的內容來詢問。
從這里和這裡我讀到,連接到安卓系統的每個硬體都被作業系統視為一個文件。所以 /dev/dsp 是音頻硬體,寫入這個文件的任何內容都會通過揚聲器顯示為聲音(所以我假設如果我在這個文件中寫入一個 1 字節字元流,它們將首先被解釋為 2 字節字,交錯對於左右聲道,就像在 wav 文件中並通過揚聲器播放?)。但是在 adb shell 中進入 /dev 並使用 ls 命令我看不到 dsp 文件。
我的問題是,/dev 文件夾中的文件命名是標準的,還是可以有任何名稱?這裡說命名可以是完全隨機的。
有一種命名方案,但在絕大多數情況下,這些都是完全不合邏輯的。
如果這是真的,那麼我們怎麼知道哪個文件代表什麼?
您的 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-… 下)是為了方便或辨識的連結。