Вопрос или проблема
В настоящее время я экспериментирую с Wi-Fi.
У меня есть специфический случай использования, когда я работаю с Wi-Fi адаптером в гостевой виртуальной машине.
WiFi адаптер — это U.S. Robotics USR5423 802.11bg Wireless Adapter [ZyDAS ZD1211B].
Я пытался настроить его в lxc контейнере, но из-за того, что lxc контейнер использует ядро операционной системы хоста, я не смог добиться значительного прогресса в установке прошивки.
Я скачал и настроил Alpine Linux VM на Proxmox, который использует QEMU.
Я думаю, что правильно передал usb, так как вижу его с помощью lsusb
.
Bus 001 Device 002: ID 0baf:0121 USR USB2.0 WLAN
Оставалось только установить прошивку и сетевой менеджер на VM, что я и сделал следующим образом:
apk add zd1211-firmware
apk add networkmanager-cli
apk add networkmanager-wifi
rc-update add networkmanager default
После этого я перезагрузил машину.
Тем не менее, если я выполняю
nmcli dev wifi
Я не вижу Wi-Fi интерфейсов.
Исправление:
Сообщений в dmesg нет, и я не могу использовать modprobe…
Вызов modprobe zd1211rw
возвращает:
modprobe: FATAL: Module zd1211rw not found in directory /lib/modules/6.12.13-0-virt
Исправление 2:
Я пока не смог решить проблему, но вот что я обнаружил:
Единственный способ, которым мне удалось установить прошивку для этого конкретного WiFi адаптера, был с использованием vmware. Внутри VMWare Debian VM прошивка работала безупречно, и ошибки таймаута отсутствовали.
Установка Debian VM на QEMU, который является частью Proxmox в случае с виртуальными машинами, заканчивается тем, что прошивка не загружается должным образом и выдает ошибку -110, которая означает ошибку таймаута. В данном случае опция автосуспендирования даже не поддерживается устройством, так что это не могло быть проблемой.
Это не похоже на проблему с прошивкой, хотя я не являюсь экспертом в этом вопросе… Исходя из того, что я смог выяснить из имеющейся в Интернете информации, прошивка достаточно старая и не поддерживается, драйвер zd1211 поддерживается — беглый взгляд на репозиторий ядра это показывает. Я думаю, это скорее проблема с тем, как QEMU и VMWare обрабатывают пасскр, где, я полагаю, VMWare пасскр превосходит в этом конкретном случае.
.
Ответ или решение
Понимание проблемы USB WiFi Passthrough в виртуальной машине на основе Alpine Linux, работающей через QEMU, требует детального анализа с учетом того, как происходит передача USB-устройств в виртуальные машины. В вашем случае вы столкнулись с трудностями при установке и использовании беспроводного адаптера USR5423 на базе драйвера ZD1211B в среде Proxmox.
Теория
Основная задача заключается в корректной передаче USB-устройства из хоста на виртуальную машину (VM), чтобы операционная система внутри VM могла распознать и взаимодействовать с этим устройством знакомым ей образом. Виртуализация QEMU-KVM поддерживает USB-переход, позволяя перенаправлять физические USB-устройства в VM, где драйвер устройства и прошивка могут быть установлены и использованы.
Причины неудач и ограничения
Первая сложность, с которой вы столкнулись, связана с использованием ядра в LXC. Контейнеры LXC используют общий с хостом ядро, поэтому возможности установки специфичных модулей или драйверов ограничены. Таким образом, переход от LXC к полноценной виртуальной машине был логичным шагом.
На следующем этапе вы сможете обнаруживать адаптер с помощью lsusb
, что свидетельствует о правильной передаче USB. Однако, отсутствие интерфейсов Wi-Fi в nmcli
и невозможность загрузки модуля zd1211rw
указывают на проблемы с установкой драйверов.
Пример
Успех на VMWare
Как вы отметили, использование адаптера в Debain VM на VMWare приводит к успеху, что подтверждает работоспособность совместно используемого драйвера и прошивки. Этот успех заключен в более зрелой реализации USB-перехода в VMWare, что предполагает более гибкую и надежную поддержку специфичных драйверов.
Неудача на QEMU
Вы видите ошибку тайм-аута (-110) в случае с Debian VM на QEMU. Эта ошибка указывает на проблемы с коммуникацией между виртуальной машиной и USB-устройством, вероятно, из-за несовершенства USB-проброса в QEMU или из-за несовместимости с прошивкой устройства.
Применение
Пошаговые действия по решению проблемы
-
Проверка на совместимость версии ядра и необходимого модуля:
- Убедитесь, что ядро вашего Alpine Linux поддерживает модуль
zd1211rw
. Возможно, потребуется обновить ядро или использовать Debian, который уже продемонстрировал свою работоспособность в VMWare.
- Убедитесь, что ядро вашего Alpine Linux поддерживает модуль
-
Установка необходимых пакетов:
- Выполнение команд
apk add zd1211-firmware
,apk add networkmanager-cli
,apk add networkmanager-wifi
, которые вы уже выполнили, — это правильные шаги. При этом важно убедиться, что пакетnetworkmanager
активирован и правильно сконфигурирован для автоматического обнаружения устройств Wi-Fi.
- Выполнение команд
-
Ручная загрузка модуля:
- Проблема с отсутствием модуля в
/lib/modules/6.12.13-0-virt
возможна, если прошивка и драйвер не были сконфигурированы или скомпилированы для вашего конкретного ядра. Попробуйте вручную установить и сконфигурировать модуль.
- Проблема с отсутствием модуля в
-
Просмотр логов:
- Используйте
dmesg
для выявления дополнительных подсказок или сообщений об ошибках, связанных с драйвером или прошивкой.
- Используйте
Альтернативное решение
Если после всех вышеперечисленных шагов проблема остается нерешенной, рассматривается возможность создать промежуточный слой настройки с использованием эмуляторов USB, обеспечивающих дополнительный контроль над пробросом USB. Также можно протестировать разные версии QEMU с целью проверки улучшений в USB-обработке.
В дополнение, рассматривая вероятную ограниченность фирменного драйвера устройства, можно попробовать использовать альтернативное ПО или соответствующие патчи для улучшения совместимости аппаратного и программного обеспечения в среде QEMU.
Заключение: Исследование и тестирование различных конфигураций могут привести к оптимальному решению, работающему для вашей специфической конфигурации устройства и программного обеспечения.