ttyU0 "/usr/libexec/getty 3wire" vt100 onifconsole secure ttyU1 "/usr/libexec/getty 3wire" vt100 onifconsole secure
Глава 28. Режим USB-устройства / USB OTG
Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD.
Содержание
28.1. Обзор
Эта глава посвящена использованию USB Device Mode и USB On The Go (USB OTG) в FreeBSD. В неё входят виртуальные последовательные консоли, виртуальные сетевые интерфейсы и виртуальные USB-накопители.
При работе на оборудовании, поддерживающем режим USB-устройства или USB OTG, который встроен во многие материнские платы, стек USB FreeBSD может работать в режиме устройства. Режим устройства позволяет компьютеру представлять себя как различные классы USB-устройств, включая последовательные порты, сетевые адаптеры и устройства хранения данных, или их комбинацию. USB-хост, такой как ноутбук или настольный компьютер, может обращаться к ним так же, как к физическим USB-устройствам. Режим устройства иногда называют «режимом USB-гаджета».
Существует два основных способа, которыми оборудование может обеспечивать функциональность режима устройства: с отдельным "клиентским портом", который поддерживает только режим устройства, и с портом USB OTG, который может обеспечивать как режим устройства, так и режим хоста. Для портов USB OTG стек USB автоматически переключается между режимом хоста и режимом устройства в зависимости от того, что подключено к порту. Подключение USB-устройства, такого как флеш-накопитель, приводит к переключению FreeBSD в режим хоста. Подключение USB-хоста, например компьютера, приводит к переключению FreeBSD в режим устройства. Однонаправленные "клиентские порты" всегда работают в режиме устройства.
То, что FreeBSD предоставляет USB-хосту, зависит от параметра hw.usb.template в sysctl. Некоторые шаблоны предоставляют одно устройство, например, последовательный терминал; другие предоставляют несколько устройств, которые можно использовать одновременно. Примером является шаблон 10, который предоставляет устройство хранения данных, последовательную консоль и сетевой интерфейс. Список доступных значений смотрите в usb_template(4).
Обратите внимание, что в некоторых случаях, в зависимости от оборудования и операционной системы хоста, для того чтобы хост заметил изменение конфигурации, может потребоваться либо физическое отключение и повторное подключение, либо принудительное повторное сканирование шины USB способом, зависящим от системы. Если на хосте запущена FreeBSD, можно использовать usbconfig(8) reset. Это также необходимо сделать после загрузки usb_template.ko, если USB-хост уже был подключен к разъему USBOTG.
Прочитайте эту главу, чтобы узнать:
Как настроить функциональность USB Device Mode в FreeBSD.
Как настроить виртуальный последовательный порт на FreeBSD.
Как подключиться к виртуальному последовательному порту из различных операционных систем.
Как настроить FreeBSD для предоставления виртуального USB-сетевого интерфейса.
Как настроить FreeBSD для предоставления виртуального USB-накопителя.
28.2. Виртуальные последовательные порты USB
28.2.1. Настройка последовательных портов в режиме USB-устройства
Поддержка виртуальных последовательных портов предоставляется шаблонами 3, 8 и 10. Обратите внимание, что шаблон 3 работает с Microsoft Windows 10 без необходимости в специальных драйверах и INF-файлах. Другие операционные системы хоста работают со всеми тремя шаблонами. Необходимо загрузить оба модуля ядра usb_template(4) и umodem(4).
Чтобы включить последовательные порты в режиме устройства USB, добавьте следующие строки в /etc/ttys:
Затем добавьте следующие строки в /etc/devd.conf:
notify 100 {
match "system" "DEVFS";
match "subsystem" "CDEV";
match "type" "CREATE";
match "cdev" "ttyU[0-9]+";
action "/sbin/init q";
};Перезагрузите конфигурацию, если devd(8) уже запущен:
# service devd restartУбедитесь, что необходимые модули загружены, и правильный шаблон установлен при загрузке, добавив следующие строки в /boot/loader.conf, создав его, если он ещё не существует:
umodem_load="YES"
hw.usb.template=3Для загрузки модуля и установки шаблона без перезагрузки используйте:
# kldload umodem
# sysctl hw.usb.template=328.2.2. Подключение к последовательным портам в режиме USB-устройств из FreeBSD
Для подключения к плате, настроенной для предоставления последовательных портов в режиме USB-устройства, подключите USB-хост, например ноутбук, к USB OTG или клиентскому USB-порту платы. Используйте команду pstat -t на хосте для вывода списка терминальных линий. В конце списка должен отобразиться USB-последовательный порт, например "ttyU0". Для установки соединения используйте:
# cu -l /dev/ttyU0После нажатия клавиши Enter несколько раз вы увидите приглашение для входа в систему.
28.2.3. Подключение к последовательным портам в режиме USB-устройства из macOS
Для подключения к плате, настроенной для предоставления последовательных портов в режиме USB-устройства, подключите USB-хост, например ноутбук, к USB OTG или клиентскому USB-порту платы. Чтобы открыть соединение, используйте:
# cu -l /dev/cu.usbmodemFreeBSD128.2.4. Подключение к последовательным портам в режиме USB-устройства из Linux
Для подключения к плате, настроенной для предоставления последовательных портов в режиме USB-устройства, подключите USB-хост, например ноутбук, к USB OTG или клиентскому USB-порту платы. Чтобы открыть соединение, используйте:
# minicom -D /dev/ttyACM028.2.5. Подключение к последовательным портам в режиме USB-устройства из Microsoft Windows 10
Для подключения к плате, настроенной для предоставления последовательных портов в режиме USB-устройства, подключите USB-хост, например ноутбук, к USB OTG или клиентскому USB-порту платы. Чтобы открыть соединение, вам понадобится программа для работы с последовательным портом, например PuTTY. Для проверки имени COM-порта, используемого Windows, запустите Диспетчер устройств, раскройте раздел "Порты (COM и LPT)". Вы увидите имя, похожее на "USB Serial Device (COM4)". Запустите выбранную программу для работы с последовательным портом, например PuTTY. В диалоговом окне PuTTY установите "Connection type" в значение "Serial", введите COMx (полученный из Диспетчера устройств) в поле "Serial line" и нажмите "Open".
28.3. Сетевые интерфейсы в режиме USB-устройства
Поддержка виртуальных сетевых интерфейсов обеспечивается шаблонами 1, 8 и 10. Обратите внимание, что ни один из них не работает с Microsoft Windows. Другие операционные системы хоста работают со всеми тремя шаблонами. Необходимо загрузить оба модуля ядра: usb_template(4) и if_cdce(4).
Убедитесь, что необходимые модули загружены, и правильный шаблон установлен при загрузке, добавив следующие строки в /boot/loader.conf, создав его, если он ещё не существует:
if_cdce_load="YES" hw.usb.template=1
Для загрузки модуля и установки шаблона без перезагрузки используйте:
# kldload if_cdce
# sysctl hw.usb.template=128.4. Виртуальное устройство хранения данных USB
Драйвер cfumass(4) — это драйвер режима USB-устройства, впервые появившийся в FreeBSD 12.0. |
Целевое устройство хранения данных (Mass Storage) предоставляется шаблонами 0 и 10. Необходимо загрузить оба модуля ядра: usb_template(4) и cfumass(4). Модуль cfumass(4) взаимодействует с подсистемой CTL, той же самой, что используется для целевых устройств iSCSI или Fibre Channel. Со стороны хоста инициаторы USB Mass Storage могут обращаться только к одному LUN — LUN 0.
28.4.1. Настройка USB-накопителя с использованием стартового скрипта cfumass
Самый простой способ настроить USB-накопитель только для чтения — использовать скрипт cfumass. Для этого скопируйте файлы, которые должны быть доступны на USB-хосте, в каталог /var/cfumass и добавьте следующую строку в /etc/rc.conf:
cfumass_enable="YES"
Для настройки цели без перезагрузки выполните следующую команду:
# service cfumass startВ отличие от последовательных и сетевых функций, шаблон не следует устанавливать в 0 или 10 в /boot/loader.conf. Это связано с тем, что LUN должен быть настроен до установки шаблона. Скрипт запуска cfumass автоматически устанавливает правильный номер шаблона при запуске.
28.4.2. Настройка USB-накопителей с использованием других методов
Оставшаяся часть этой главы содержит подробное описание настройки цели без использования файла cfumass rc. Это необходимо, например, если требуется предоставить доступную для записи LUN.
USB-накопитель не требует работы демона ctld(8), хотя его можно использовать при необходимости. Это отличается от iSCSI. Таким образом, есть два способа настройки цели: ctladm(8) или ctld(8). Оба способа требуют загрузки модуля ядра cfumass.ko. Модуль можно загрузить вручную:
# kldload cfumassЕсли модуль cfumass.ko не встроен в ядро, можно настроить /boot/loader.conf для его загрузки при старте системы:
cfumass_load="YES"
LUN может быть создан без использования демона ctld(8):
# ctladm create -b block -o file=/data/target0Это предоставляет содержимое файла образа /data/target0 как LUN для USB-хоста. Файл должен существовать до выполнения команды. Чтобы настроить LUN при загрузке системы, добавьте команду в /etc/rc.local.
ctld(8) также может использоваться для управления LUN. Создайте файл /etc/ctl.conf, добавьте строку в /etc/rc.conf, чтобы убедиться, что ctld(8) автоматически запускается при загрузке, а затем запустите демон.
Вот пример простого файла конфигурации /etc/ctl.conf. Полное описание параметров можно найти в ctl.conf(5).
target naa.50015178f369f092 {
lun 0 {
path /data/target0
size 4G
}
}Пример создает одну цель с одним LUN. naa.50015178f369f092 — это идентификатор устройства, состоящий из 32 случайных шестнадцатеричных цифр. Строка path определяет полный путь к файлу или zvol, который используется для LUN. Этот файл должен существовать до запуска ctld(8). Вторая строка необязательна и указывает размер LUN.
Чтобы убедиться, что демон ctld(8) запускается при загрузке, добавьте следующую строку в /etc/rc.conf:
ctld_enable="YES"
Чтобы запустить ctld(8) сейчас, выполните следующую команду:
# service ctld startПри запуске демона ctld(8) он читает файл /etc/ctl.conf. Если этот файл отредактирован после запуска демона, перезагрузите изменения, чтобы они вступили в силу немедленно:
# service ctld reloadИзменено: 24 ноября 2025 г. by Vladlen Popolitov