Наш канал в telegram

Микрокомпьютер Omega2. Часть 5. Работа с USB flash-дисками

Сегодняшняя статья будет посвящена тому, как работать с подключенными к микрокомпьютеру Omega2 USB-флешками.

Как вы уже знаете, в линуксе (и соответственно, в OpenWRT, который собран на базе linux) работа с устройствами происходит через специальные файлы устройств. Работа с флешками не является исключением и при наличии нужных драйверов, в момент физического подключения флешки к USB-порту компьютера (в нашем случае микрокомпьютера) для неё в каталоге /dev тоже создаётся соответствующий файл.

Но что делать дальше? Как с ней работать? Вот с этим мы сейчас и разберёмся.

Ручное монтирование USB flash-накопителя

Первое что нужно сделать — это примонтировать флешку. Что это значит? Это значит, что операционной системе нужно сообщить о типе файловой системы подключенного диска и назначить точку, через которую мы будем попадать из корневой файловой системы в файловую систему диска.

Если наша сборка OpenWRT умеет работать с такой файловой системой, как на подключенном диске (а она умеет работать с очень многими), то она будет обеспечивать нам прозрачную работу с этим диском через указанную точку монтирования. То есть мы сможем работать с ним так, как будто он является частью корневой файловой системы. Точка монтирования — это просто папка, через которую мы получаем доступ к содержимому подключенного диска. Учтите, что одна физическая флешка может содержать несколько логических разделов (с разными файловыми системами), каждый из которых нужно монтировать отдельно.

Теперь подробно и с примерами. Итак, сначала создаём в папке /mnt новый каталог, который будет нашей точкой монтирования. Для большей информативности его можно назвать, например, usb или flash (я буду использовать папку usb):

mkdir <i>/mnt/usb</i>

Следующее, что нам нужно — это определить файл устройства, соответствующий подключенной флешке. Здесь есть несколько вариантов.

Первый способ — посмотреть лог подключения (он автоматически высыпется в консоль после подключения накопителя). Вот, например, лог подключения моей флешки:

[  742.826914] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 2450.196504] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 2450.213402] scsi host0: usb-storage 1-1:1.0
[ 2451.214131] scsi 0:0:0:0: Direct-Access    SanDisk Cruzer Fit     1.00 PQ: 0 ANSI: 6
[ 2451.226314] sd 0:0:0:0:0: [sda] 30595072 512-byte logical blocks: (15.7 Gb/14.6 GiB)
[ 2451.236044] sd 0:0:0:0:0: [sda] Write Protect is off
[ 2451.242206] sd 0:0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 2451.262885]  sda: sda1
[ 2451.270536] sd 0:0:0:0:0: [sda] Attached SCSI removable disk

Из лога следует, что моя флешка подключилась как устройство sda и на ней есть один раздел, который определился как sda1. Этот раздел (sda1) нам и нужно будет примонтировать (в случае, если бы флешка была неотформатирована — определилось бы только само устройство sda и монтировать нужно было бы именно его).

Описанный способ, однако, подходит только в том случае, если вы подключены через порт Serial0, при подключении по SSH вы просто не увидите лог.

Второй способ, — можно просто посмотреть, какие новые файлы появились в папке /dev после подключения флешки. Узнать это можно, например, выполнив команду ls /dev до и после подключения. Учитывая что обычно диски подключаются как устройства sd[a..z], можно дополнительно использовать фильтр, тогда команда будет выглядеть так: ls /dev | grep sd.

Учитывая, что разъём USB у нас на омеге всего один, — последний вариант (с фильтром) позволит определить подключенный диск безошибочно. Вот, например, как это выглядит у меня:

root@Omega-XXXX:/# ls /dev | grep sd
sda
sda1

Всё, теперь, создав точку монтирования и зная файл устройства, мы готовы к этому самому монтированию приступить.

Монтирование выполняется специальной командой — mount. В общем виде её синтаксис выглядит вот так:

mount [опции] [-o опции_монтирования] файл_устройства точка_монтирования

Опций достаточно много, они позволяют, например, явно задать тип файловой системы монтируемой флешки (опция -t), задать режим «только для чтения» (опция -r) и так далее. Нам в простейшем случае вообще никакие опции не нужны, поэтому просто выполняем:

mount /dev/sda1 /mnt/usb

Если вы подключены через последовательный порт, то сообщение об успешном подключении высыпется прямо к вам в консоль:

root@Omega-XXXX:/# [ 3848.540407] [EXFAT] trying to mount...
[ 3848.545148] [EXFAT] mounted successfully

Если вы подключены по SSH, то убедиться в успешности операции можно простым просмотром содержимого каталога /mnt/usb:

ls /mnt/usb

Если в результате выполнения этой команды вы увидите список каталогов и файлов подключенной флешки — значит всё нормально, флешка успешно подмонтирована. Соответственно, в файловом менеджере содержимое флешки также будет доступно.

Если вы закончили работу с флешкой и хотите её отсоединить, то перед этим необходимо отмонтировать файловую систему флешки от корневой файловой системы (при этом завершаются все операции доступа к диску, скидываются кэши и так далее). Для размонтирования также есть специальная команда — umount. Всё, что нужно сделать — это указать утилите umount раздел, который мы хотим отмонтировать, или точку монтирования, в которую этот раздел подмонтирован.

Для рассмотренных нами выше примеров, команда отмонтирования могла бы выглядеть так:

umount /dev/sda1

Или так:

umount /mnt/usb

Автоматическое монтирование USB flash-накопителя

Теперь, когда мы научились монтировать диски вручную, открою вам небольшую тайну, — с микрокомпьтерами Omega2 вручную ничего делать не нужно, всё происходит автоматически. Для этого в прошивку предустановлен специальный пакет — mountd.

По умолчанию утилита mountd автоматически создаёт точку монтирования в папке /tmp/mounts/ и монтирует туда найденные на флешке разделы (как правило точка монтирования называется USB-A1).

При желании можно изменить папку в которой автоматически создаётся точка монтирования. Для этого нужно изменить конфигурацию утилиты mountd, которая хранится в файле /etc/config/mountd. Открываем его в редакторе и меняем путь /tmp/mounts/ на желаемый.

Вот и всё на сегодня. Напоследок хотелось бы заметить, что USB-накопитель можно также использовать для переустановки прошивки, если вы сильно накосячили и переустановить прошивку напрямую из интернета не представляется возможным. Однако, подробнее об этом мы поговорим в другой раз (про разные способы восстановления будет отдельная статья).

  1. Часть 1. Первое знакомство
  2. Часть 2. Использование GPIO
  3. Часть 3. Док-плата
  4. Часть 4. Работа с файлами
  5. Часть 5. Работа с USB flash-дисками
  6. Часть 6. Установка, настройка и использование php для интерактивного взаимодействия

Добавить комментарий