Я пытаюсь понять, как работают файловые системы Linux, но единственная система Linux, которая у меня есть, — это мой телефон Android (рутированный), поэтому я спрашиваю на основе того, что я вижу на телефоне Android с помощью оболочки adb.

Из здесь и здесь Я читал, что каждое оборудование, подключенное к системе Android, рассматривается ОС как файл. Таким образом, /dev/dsp — это звуковое оборудование, и запись чего-либо в этот файл выглядит как звук через динамик (поэтому я предполагаю, что если я напишу поток 1-байтовых символов в этом файле, они сначала будут интерпретироваться как 2-байтовые слова, чередующиеся для левого и правого канала как в wav файле и воспроизводится через динамик?). Однако, зайдя в /dev в оболочке adb и используя команду ls, я не вижу файл dsp.

У меня такой вопрос, именование файлов в папке /dev стандартное или может иметь любое имя? здесь сказано, что имена могут быть совершенно случайными .

Существует своего рода схема именования, но в подавляющем большинстве случаев она совершенно нелогична.

Если это правда, то как мы можем узнать, какой файл что представляет?

1
user13267 16 Ноя 2019 в 05:03
Согласно философии Unix ВСЕ является файлом, включая процессы, устройства и т. д.
 – 
Sir Muffington
16 Ноя 2019 в 16:40
Большинство файлов в /dev имеют тип устройства с основным/младшим значением. именно эта пара описывает роль файла (не всегда). kernel.org/doc/Documentation/admin-guide/devices.txt< /а>
 – 
A.B
16 Ноя 2019 в 21:00

1 ответ

Лучший ответ

Ваши ссылки tldp немного устарели. И если вы посмотрите на /dev просто как на часть файловой системы, вы упустите суть этой подсистемы.

В комментарии AB упоминается мажор/минор; но его ссылка - это просто необработанный список. Здесь распределенные устройства на kernel.org HTML есть некоторые дополнительная информация.

Я думаю, что «все есть файл» в этом контексте вводит в заблуждение. Файлы в /dev являются так называемыми специальными файлами, символьными или блочными. На это указывают буквы «с» или «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

И документы для майора = 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-...) являются ссылками для удобства или идентификации.

0
17 Ноя 2019 в 15:26