Когда человек много лет рыл бункер и запасал там продукты, он должен испытывать глубокое моральное удовлетворение, если бункер понадобился. Он будет довольный заявлять: «А я говори-и-и-ил!» То же касается и того, кто делал запасы продуктов в кладовой, когда все закупались в магазинах только на сегодня. А вот с нашим комплексом для удалённой работы Redd как-то и не хочется злорадствовать. Он проектировался для удалёнки в мирное время. И использовался задолго до первых новостей из Китая.
Давно я про него ничего не писал. Другие проекты отвлекают, да и интерес, судя по рейтингу последней из опубликованных статей, уже упал. Сил на подготовку статьи отнимают много, и это имеет смысл делать только если оно нужно достаточному числу читателей.
Но так как сейчас удалёнка у всех на устах, возникло желание поделиться одной наработкой, которая может кому-то помочь. Это не наша разработка, я проводил исследования в рамках работы над сервисом удаленной работы с отладочными платами All-Hardware. Вот их результаты сейчас и опишу. Проект USB/IP известен многим. Но он давно свёрнут авторами. Самые свежие драйверы были под WIN7.
Как подключить флешку к телефону Android: используем OTG
Сегодня я опишу, где скачать вариант для WIN10, и покажу, как я его проверял. Кроме того, разработчики современного аналога уверяют, что у них сделан не только Windows-клиент, но и Windows-сервер (правда, в этом режиме я тестирование не вёл: задача того не требовала). Но кому-то это тоже может оказаться полезным.
Предыдущие статьи цикла
- Разработка простейшей «прошивки» для ПЛИС, установленной в Redd, и отладка на примере теста памяти.
- Разработка простейшей «прошивки» для ПЛИС, установленной в Redd. Часть 2. Программный код.
- Разработка собственного ядра для встраивания в процессорную систему на базе ПЛИС.
- Разработка программ для центрального процессора Redd на примере доступа к ПЛИС.
- Первые опыты использования потокового протокола на примере связи ЦП и процессора в ПЛИС комплекса Redd.
- Веселая Квартусель, или как процессор докатился до такой жизни.
- Методы оптимизации кода для Redd. Часть 1: влияние кэша.
- Методы оптимизации кода для Redd. Часть 2: некэшируемая память и параллельная работа шин.
- Экстенсивная оптимизация кода: замена генератора тактовой частоты для повышения быстродействия системы.
- Доступ к шинам комплекса Redd, реализованным на контроллерах FTDI
- Работа с нестандартными шинами комплекса Redd
- Практика в работе с нестандартными шинами комплекса Redd
Введение
Сначала краткий рассказ, что такое USB/IP. Это комплекс программ, которые позволяют пробросить USB-устройство через сеть. Само устройство подключено к серверу. Клиент располагается на другой машине. При этом на клиентской машине имеется приложение, совершенно не рассчитанное на работу с сетью.
Как подключить флешку к телефону или планшету Android
Оно хочет настоящее USB-устройство. И оно получает информацию, что это устройство подключено. На это устройство встаёт штатный драйвер. В общем, клиент считает, что он работает с локальным USB-устройством.
Кто-то так пробрасывает ключи защиты. Мы же проверяли возможность удалённого доступа к JTAG-адаптеру.
Проект USB/IP активно развивался до 2013 года. Затем Windows-ветка остановилась. В целом, был выпущен даже двоичный подписанный драйвер. Но он был под Windows 7. Linux-ветка же продолжила развитие, и этот сервис оказался встроенным в саму операционную систему. По крайней мере, в сборку Debian он точно встроен. Причём для Linux имеется и клиент, и сервер, а для Windows исходно был сделан только клиент.
Сервер под Windows сделан не был.
Существует очень хорошая статья на Хабре, которую можно использовать и как справочник по работе с данным сервисом, и как отзыв о работе с ним.
Вариант под актуальную версию Windows
Но как бы ни была хороша Windows 7, а она уже мертва. В рамках работ над All-Hardware мы рассматривали разные варианты решения одной из проблем, и надо было просто проверить ряд альтернатив по принципу «подойдёт — не подойдёт». Тратить много человеко-часов на проверку было невозможно. А переделка драйвера под Windows 10 могла затянуть в себя.
Поэтому был проведён поиск в сети, который вывел на проект usbip-win. На момент его обнаружения свежий вариант был датирован 23 февраля 2020 года, то есть проект живой. Он может быть собран и под WIN7, и под WIN10. К тому же, в отличие от оригинального проекта, может быть собран не только Windows-клиент, но и Windows-сервер.
Я проверил, проект прекрасно собирается и устанавливается, поэтому дальнейшая работа велась с ним. В файле readme есть ссылка на готовый двоичный код для тех, кто не хочет самостоятельно производить сборку.
Грустная часть проверки: серверная часть
Сначала я расскажу, как проводилась проверка в рамках нашего проекта. Там всё кончилось не очень хорошо. Проверяли адаптер ST-LINK, установленный в корпус комплекса Redd, благо я уже отмечал, что в комплексе используется ОС Linux сборки Debian, а эта сборка содержит встроенный сервис USB/IP.
Согласно статье, устанавливаем сервис:
sudo apt-get update sudo apt-get upgrade sudo apt-get install usbip
Дальше в статье подробно рассказано, как автоматизировать процесс загрузки сервиса. Как я разбираюсь в Линуксе, я уже многократно писал. Плохо разбираюсь. У меня нет привычки с умным лицом цитировать чужие тексты, слабо понимая суть. Поэтому я ещё раз напомню ссылку на замечательную статью, где всё рассказано, а сам покажу, что делал я при каждом старте ОС (благо всё было нужно только для проверки):
sudo modprobe usbip-core sudo modprobe usbip-host sudo usbipd -D
Назначение первых двух из вышеприведённых заклинаний мне неизвестно, но без них не создаются какие-то каталоги, а без этих каталогов потом не будет экспорта USB-порта. Каталоги создаются только до перезапуска системы. Так что создавать их надо каждый раз. Третья строка — с нею всё понятней, она запускает сервис.
Теперь смотрим, как зовут устройство:
Получается, что нам нужно устройство и busid, равным 1-5.4.1.3.
sudo usbip bind —busid=1-5.4.1.3
Всё, сервер готов к работе.
Грустная часть проверки: клиентская часть
В Windows устанавливаем драйвер (делаем это только один раз, дальше он будет всегда установлен). Для этого запускаем от имени администратора файл usbip.exe с аргументом install:
usbip.exe install
Теперь смотрим, доступно ли нам устройство:
usbip.exe list —remote=192.168.10.123
Убеждаемся, что оно присутствует в списке. Ну, и подключаем его:
usbip.exe attach —remote=192.168.10.123 —busid=1-5.4.1.3
В менеджере устройств появляется новое USB-устройство, Keil его прекрасно видит…
Но на этом всё приятное кончается. Небольшая программа заливается во флэшку около минуты. Попытки шагать по строкам идут от 5 до 20 секунд на каждую строку. Это неприемлемо. Во время паузы в обе стороны идёт трафик примерно 50 килобит в секунду.
Долго и вдумчиво идёт.
Честно говоря, ограничение по времени привело к тому, что я только предполагаю, почему всё было так плохо. Подозреваю, что там по сети бегает JTAG-трафик. А он бегает небольшими пакетами в обе стороны, отсюда и проблемы. Так было завершено исследование с результатом: «Для проекта не подходит».
Более весёлая часть: подготовка
Ещё тогда мне запало в голову, что я краем глаза видел, что в JTAG-адаптере CMSIS DAP по USB ходит не чистый JTAG-трафик, а команды. Сам JTAG-трафик формируется уже внутри адаптера. Давно хотел проверить это, да всё руки не доходили. Массовый перевод на удалёнку заставил это сделать (возникла задачка). Что такое CMSIS DAP? Это JTAG-адаптер, рекомендованный самой компанией ARM для контроллеров Cortex-M.
Исходные коды для разных контроллеров выложены на GitHub, можно спаять адаптер на базе любого из них. Я сейчас дам ссылку на клон проекта, адаптированный под макетную плату «Голубая пилюля»: https://github.com/x893/CMSIS-DAP, но поисковые системы могут вывести и на официальный аккаунт ARM.
Чтобы не тратить на сервер целую PC, для проверки, я сделал этакий комплекс Yelloww (чисто по цвету пластика, из которого сделан корпус):
Роль сервера выполняет Raspberry Pi с установленной ОС Raspbian (это тот же Debian, а значит, там имеется требуемый сервер). Одна из «голубых пилюль» выступает в роли адаптера CMSIS DAP, вторая — в роли отлаживаемого устройства.
Точно так же ставим и настраиваем сервис. Разве что здесь список устройств, допустимых к экспорту, намного скромнее:
Понятно, что здесь экспортируем и импортируем устройство busid=1-1.4.
И вот тут конкретно с CMSIS DAP у меня периодически возникает небольшая проблемка. В менеджере устройств я вижу такую неприятность:
Напомню, что статья пишется по принципу «Лучше неплохая, но сегодня, чем идеальная, но завтра». Проблемы удалённой работы возникают прямо сейчас. Надеюсь, в обозримом будущем они уже будут не актуальны. А пока актуальны — показываю, как я обхожу данную проблему вручную. Сначала я отключаю устройство:
Затем сразу же включаю:
И оно начинает работать без проблем. В Keil меняем отладчик на CMSIS DAP:
При работе по локальной сети всё просто летает. Но понятно, что локальная сеть никому не интересна. Я попробовал пробросить порт устройства у себя дома, а затем удалённо зайти на машину на работе и потрассировать «прошивку» оттуда. Связь у моего домашнего провайдера весьма и весьма тормозная, особенно — от меня наружу.
Прошивается контроллер примерно втрое медленнее, чем при прямом подключении к USB. Трассировка… Ну около секунды на строку, точно не больше. В общем, терпимо. С хорошими провайдерами, надеюсь, будет лучше.
Заключение
Проект usbip-win является современной заменой для проекта USB/IP. Он живёт и развивается. При этом он предоставляет для ОС Windows не только функцию клиента, но и функцию сервера. Совместимость с Linux-версией сохранена.
Устойчивость работы удалённого USB-устройства неожиданно поразила. Я был уверен, что возникнут таймауты. Возможно, где-то они и возникнут, но для JTAG-адаптеров не было замечено ни одного сбоя. К сожалению, не все USB-устройства могут быть проброшены через сеть по причине низкого быстродействия получившейся системы. Но в случае с JTAG-адаптерами можно рассмотреть альтернативные вещи.
В частности, CMSIS-DAP вместо ST-LINK.
Оба рассмотренных проекта (usbip-win и CMSIS-DAP) могут быть скачаны с GitHub в виде исходных кодов.
Если это поможет кому-то организовать удалённый доступ к оборудованию, я буду рад. Использование Raspberry Pi позволит бросить оборудование в произвольных местах.
- системное программирование
- Redd
- USB-порты
- USB-устройства
- USB
- удалёнка
- удаленная работа.
- Системное программирование
- Программирование микроконтроллеров
- Компьютерное железо
Источник: habr.com
Доступ к любому
USB-устройству
в один клик
Используйте USB-устройства удаленно, когда их нет под рукой. Просто нажмите кнопку “Подключиться”, — об остальном позаботится FlexiHub.
Получите преимущество
FlexiHub поможет вашему бизнесу
Выведите обслуживание клиентов на новый уровень, предоставляя оперативную удаленную техническую поддержку. Проводите дистанционную диагностику и обслуживание потребительского и специализированного оборудования, оснащенного USB и COM-портами, используя сервис FlexiHub for Business.
Эффективное взаимодействие
Объедините команду при помощи FlexiHub
Делитесь устройствами только со своими сотрудниками и/или приглашайте коллег из других организаций получить безопасный доступ к вашим корпоративным девайсам. Создайте единый аккаунт для вашей команды и легко управляйте подключениями к общему оборудованию.
Отзывы наших клиентов
8 лет, 300к+ зарегистрированных пользователей
на основе 386 отзывов
Sean McCormack Продуктовый дизайнер Отзыв на Trustpilot
Я оставляю донгл подключенным к мини-ПК в моем домашнем кабинете и могу получить к нему доступ из любой точки мира, используя Интернет и FlexiHub. Это безопасно и отлично работает. Одна из моих лучших покупок.
Nick F. Менеджер Отзыв на SourceForge
Это самый простой способ подключить iPhone к Mac mini удаленно. Кроме того, это приложение добавляет великолепную опцию верификации в ОС.
Richard Hatfield Продуктовый дизайнер Отзыв на Trustpilot
Простая и беспроблемная установка, за что отдельное спасибо. Работает хорошо, проблем с надежностью подключений не было. Одинаково хорошо работает с брандмауэрами и через Интернет!
Jake T. Администратор в Broadcast Media Отзыв на G2
Нам нужен FlexiHub для совместного использования нескольких веб-камер в наших прямых трансляциях. С FlexiHub это возможно с практически нулевой задержкой. Ранее мы пробовали несколько альтернатив, но FlexiHub просто лучший в этом деле.
Dillon Erb Гендиректор/соучредитель Paperspace Отзыв на ProductHunt
Как подключить флешку к смартфону: расширяем память без лишних затрат
У вашего смартфона на Android есть разъем microUSB, который вы, наверняка, используете для подзарядки и подключения к компьютеру. Но что, если документ, который срочно нужно отправить шефу, сохранен на USB-карте памяти. Как подключить флешку к смартфону и прикрепить файл к сообщению?А может быть, вы просто хотите посмотреть фильм, который сохранен на ней или скопировать на внешнюю память важную информацию? К счастью, даже если смартфон по умолчанию не предусматривает подключение флешек, сделать это можно с помощью недорогого адаптера-кабеля и бесплатной программы.
Итак, чтобы подключить USB-флешку к смартфону Android нам понадобятся:
- Кабель USB OTG (расшифровывается, как на ходу) с разъемом-папой microUSB и мамой на стороне полноразмерного разъема USB. В магазинах, торгующих аксессуарами для мобильных телефонов такой кабель-переходник можно купить за 100 рублей.
- Смартфон Android с root-правами. Рутировать смартфон не сложно, надо лишь найти инструкцию, подходящую для вашей модели. Поищите их в интернете, введя соответствующий запрос в поисковую строку.
Инструкция по подключению флешки к смартфону
- Установите StickMount из Google Play Market.
- Подключите OTG кабель к разъему на телефоне.
- Подключите флешку USB (или кард-ридер для карт памяти SD) к другому концу кабеля OTG.
- Когда на экране появится сообщение “Open StickMount when this USB device is connected” (Открывать StickMount при подключении USB устройств), выберите пункт «Use by default» (Использовать по умолчанию) и нажмите кнопку ОК.
- Дайте программе StickMount права суперпользователя по соответствующему запросу. Также разрешите ей всегда получать права суперпользователя. После того как программа смонтирует устройство для хранения данных появиться сообщение в виде «Active mounts: /sda/usbStorage/sda1?. Это сообщение свидетельствует о том, что USB флешка успешно подключилась к смартфону и готова к использованию (чтению и записи).
- Откройте файловый менеджер, установленный на вашем телефоне. Если на смартфоне еще не установлена удобная программа для работы с файлами, рекомендую воспользоваться бесплатным Astro File Manager.
- В программе перейдите в накопитель USB. Если вы в Astro File Manager, то тапните по «usbdisk» в главном меню программы. В результате откроется флешка. В некоторых других файловых менеджерах, для того чтобы открыть присоединенную флешку, надо тапнуть по «USB Storage» или чему-то похожему.
- Теперь можно делать любые операции с файлами: копировать, перемещать, открывать и т.д. На смартфоне Android с USB-флешкой мы можем совершать практически все те же операции, что и на обычном компьютере. С нее можно даже воспроизводить видео, хотя часто оно демонстрируется рывками из-за недостаточно широкой пропускной способности порта. Я рекомендую вам скопировать видеофайл в память телефона или на карту памяти microSD, а уже затем открывать его.
Источник: kakdelateto.ru