Пишем USB-драйверы для заброшенных устройств

Original author: Ben Cox
  • Translation


Недавно на eBay мне попалась партия интересных USB-девайсов (Epiphan VGA2USB LR), которые принимают на вход VGA и отдают видео на USB как веб-камера. Меня настолько обрадовала идея, что больше никогда не придётся возиться с VGA-мониторами, и учитывая заявленную поддержку Linux, я рискнул и купил всю партию примерно за 20 фунтов (25 долларов США).

Получив посылку, я подключил устройство, но оно даже не подумало появиться в системе как UVC. Что не так?

Я изучил сайт производителя и обнаружил, что для работы требуется специальный драйвер. Для меня это была новая концепция, ведь в ядре моего дистрибутива Linux обычно есть драйверы для всех устройств.

К сожалению, поддержка драйверов именно для этих устройств закончилась в Linux 4.9. Таким образом, его не увидит ни одна из моих систем (Debian 10 на Linux 4.19 или последняя версия LTS Ubuntu на Linux 5.0).

Но ведь это можно исправить, верно? Конечно, файлы ведь идут в пакете DKMS, который по требованию собирает драйвер из исходного кода, как и многие обычные драйверы…

Печально. Но здесь не так.

Внутри пакета оказался только предварительно скомпилированный бинарник vga2usb.o. Я начал его изучать, прикидывая сложность реверс-инжиниринга, и нашёл несколько интересных строк:

$ strings vga2usb.ko | grep 'v2uco' | sort | uniq
v2ucom_autofirmware
v2ucom_autofirmware_ezusb
v2ucom_autofirmware_fpga

Так это на самом деле FPGA-on-a-stick? Как же заставить работать нечто подобное?

Ещё одной забавной и слегка тревожной находкой стали строки с параметрами закрытого ключа DSA. Это заставило меня задуматься: что же он может защищать внутри драйвера?

$ strings vga2usb.ko | grep 'epiphan' | sort | uniq
epiphan_dsa_G
epiphan_dsa_P
epiphan_dsa_Q

Чтобы изучить драйвер в его нормальной среде, я поднял виртуальную машину с Debian 9 (последний поддерживаемый релиз) и сделал KVM USB Passthrough, чтобы дать прямой доступ к устройству. Затем установил драйвер и убедился, что он работает.

После этого мне захотелось посмотреть, как выглядит протокол связи. Я надеялся, что устройство отправляет необработанные или почти необработанные фреймы, поскольку это облегчило бы написание драйвера для пользовательского пространства.

Для этого я загрузил на хост виртуальной машины модуль usbmon и запустил Wireshark для захвата USB-трафика на устройство и с него во время запуска и захвата видео.



Я обнаружил, что при запуске на устройство передаётся большое количество мелких пакетов, прежде чем оно начинает захватывать картинку. Вероятно, оно действительно основано на платформе FPGA без хранилища данных. Каждый раз после подключения драйвер передавал на устройство прошивку в виде битстрима FPGA.

Я убедился в этом, открыв одну из коробок:



Красный

ISL98002CRZ-170 — работает как ADC для сигналов VGA

Жёлтый

XC6SLX16 — Xilinx Spartan 6 FPGA

Циан

64 МБ DDR3

Маджента

CY7C68013A — USB-контроллер / фронтенд


Поскольку для «загрузки» устройства нужно отправить ему битстрим/прошивку, придётся поискать его в предварительно скомпилированных бинарниках. Я запустил binwalk -x и начал искать какие-нибудь сжатые объекты (zlib). Для этого я написал скрипт поиска hex-последовательностей — и указал три байта из перехваченного пакета.

$ bash scan.sh "03 3f 55"
trying 0.elf
trying 30020
trying 30020.zlib
trying 30020.zlib.decompressed
...
trying 84BB0
trying 84BB0.zlib
trying 84BB0.zlib.decompressed
trying AA240
trying AA240.zlib
trying AA240.zlib.decompressed
000288d0  07 2f 03 3f 55 50 7d 7c  00 00 00 00 00 00 00 00  |./.?UP}|........|
trying C6860
trying C6860.zlib

После распаковки файла AA240.zlib оказалось, что там недостаточно данных для полного битстрима. Поэтому я решил захватить прошивку из пакетов USB.

Считывать USB-пакеты из файлов pcap может и tshark, и tcpdump, но обе сохраняют их лишь частично. Поскольку у каждой утилиты были разные части головоломки, я написал небольшую программу, которая объединяет выходные данные обеих программ в структуры go, чтобы воспроизвести пакеты обратно на устройство.

В этот момент я заметил, что загрузка происходит в два этапа: сначала USB-контроллер, а затем FPGA.

Я застрял на несколько дней: казалось, весь битстрим загружается, но устройство не запускалось, хотя пакеты от реального драйвера и моей симуляции выглядят вроде идентично.

В итоге я решил проблему, тщательно изучив pcap с учётом времени ответа на каждый пакет — и заметил большую разницу во времени одного конкретного пакета:



Оказалось, что из-за небольшой опечатки запись происходила в неправильную область устройства. Будет мне уроком, как вводить значения вручную…

Тем не менее, на устройстве наконец-то замигал светодиод! Огромное достижение!


Было относительно просто реплицировать те же пакеты, которые запускали передачу данных, так что я смог написать конечную точку USB Bulk и мгновенно сбросить данные на диск!

Вот тут и начались настоящие сложности. Потому что после анализа оказалось, что данные не были явно закодированы каким-либо образом.

Для начала я запустил perf для общего представления о трассировке стека драйверов во время работы:



Хотя я мог выловить функции с данными фреймов, но понять кодировку самих данных никак не удавалось.



Чтобы лучше понять, что происходит внутри настоящего драйвера, я даже попробовал инструмент Ghidra от АНБ:



Хотя Ghidra невероятна (когда я впервые использовал её вместо IDA Pro), но всё ещё недостаточно хороша, чтобы помочь мне понять драйвер. Для реверс-инжиниринга требовался другой путь.

Я решил поднять виртуальную машину Windows 7 и взглянуть на драйвер Windows, вдруг он подбросит идеи. И тогда заметил, что для устройств имеется SDK. Один из инструментов оказался особенно интересным:

PS> ls

    Directory: epiphan_sdk-3.30.3.0007\epiphan\bin

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        10/26/2019  10:57 AM     528384 frmgrab.dll
-a---        10/27/2019   5:41 PM    1449548 out.aw
-a---        10/26/2019  10:57 AM     245760 v2u.exe
-a---        10/26/2019  10:57 AM      94208 v2u_avi.exe
-a---        10/26/2019  10:57 AM     102400 v2u_dec.exe
-a---        10/26/2019  10:57 AM     106496 v2u_dshow.exe
-a---        10/26/2019  10:57 AM     176128 v2u_ds_decoder.ax
-a---        10/26/2019  10:57 AM      90112 v2u_edid.exe
-a---        10/26/2019  10:57 AM      73728 v2u_kvm.exe
-a---        10/26/2019  10:57 AM      77824 v2u_libdec.dll

PS> .\v2u_dec.exe
Usage:
      v2u_dec <number of frames> [format] [compression level] <filename>
               - sets compression level [1..5],
               - captures and saves compressed frames to a file
      v2u_dec x [format] <filename>
               - decompresses frames from the file to separate BMP files

Этот инструмент позволяет «выхватывать» единичные фреймы, причём изначально они не сжимаются, чтобы была возможность обработать фреймы позже на более быстрой машине. Это практически идеально, и я реплицировал последовательность пакетов USB, чтобы получить эти несжатые блобы. Количество байтов соответствовало примерно трём (RGB) на пиксель!

Первоначальная обработка этих изображений (просто принимая вывод и записывая его как пиксели RGB) дала нечто отдалённо напоминающее реальную картинку, которое устройство получало через VGA:



После некоторой отладки в hex-редакторе выяснилось, что каждые 1028 байт повторяется какой-то маркер. Немного стыдно, как много времени я потратил на написание фильтра. С другой стороны, в процессе можно было насладиться некоторыми образцами современного искусства.



Затем я понял, что наклон и искажение изображения вызваны пропуском и переносом пикселя на каждой строке (x=799 не равно x=800). И тогда, наконец, у меня получилось почти правильное изображение, если не считать цвета:



Сначала я думал, что проблема с калибровкой из-за выборки данных, когда вход VGA застрял на сплошном цвете. Для исправления я сделал новое тестовое изображение, чтобы выявить такие проблемы. Задним числом понимаю, что надо было использовать что-то вроде тестовой карты Philips PM5544.



Я загрузил изображение на ноутбук, и тот выдал такую картинку VGA:



Тут мне пришло воспоминание о какой-то давней работе по 3D-рендерингу/шейдеру. Это было очень похоже на цветовую схему YUV.

В итоге я погрузился в чтение литературы по YUV и вспомнил, что во время реверс-инжиниринга официального драйвера ядра, если я ставил точку останова на функции под названием v2ucom_convertI420toBGR24, то система зависала без возможности возобновления. Так что, может, на входе была кодировка I420 (от -pix_fmt yuv420p), а выход RGB?

После применения встроенной в Go функции YCbCrToRGB изображение внезапно стало намного ближе к оригиналу.



Мы сделали это! Даже сырой драйвер выдавал 7 кадров в секунду. Честно говоря, мне этого достаточно, так как я использую VGA только в случае аварии как резервный дисплей.

Итак, теперь мы знаем это устройство достаточно хорошо, чтобы объяснить алгоритм его запуска с самого начала:

  1. Нужно инициализировать USB-контроллер. Судя по объёму информации, на самом деле драйвер передаёт на него код для загрузки.
  2. Когда вы закончите загрузку USB, устройство отключится от шины USB и через мгновение вернётся с одной конечной точкой USB.
  3. Теперь можно отправлять битстрим FPGA, по одному 64-байтовому пакету USB за каждую контрольную передачу.
  4. По окончании передачи индикатор на устройстве начнёт мигать зелёным цветом. На этом этапе можно отправить то, что кажется последовательностью параметров (overscan и другие свойства).
  5. Затем запускаем контрольный пакет для получения фрейма, в пакете указано разрешение. Если отправить запрос фрейма 4:3 на широкоэкранный вход, то это обычно приведёт к повреждению фрейма.

Для максимальной простоты использования я внедрил в драйвер небольшой веб-сервер. Через браузерные MediaRecorder API он легко записывает поток с экрана в видеофайл.



Предупреждая неизбежные претензии к качеству экспериментального кода, скажу сразу: я им не горжусь. Наверное, он в таком состоянии, какого мне достаточно для приемлемого использования.

Код и готовые сборки для Linux и OSX лежат на GitHub.

Даже если программу никто никогда не запустит, для меня это было чертовски увлекательное путешествие в дебрях протокола USB, отладки ядра, реверс-инжиниринга модуля и формата декодирования видео! Если вам нравятся такие вещи, можете посмотреть другие статьи в блоге.
Support the author
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 88

    +40
    Порой мне кажется, что некоторые люди могут из лазерной мышки сделать видеопроектор, смотреть нетфликс на экране управления микроволновки или установить линукс в ламповый телевизор. Это очень круто!
      +14
      Или сыграть в
      Quake на осциллографе

      Поддерживаю. Автор статьи крут. И за перевод спасибо.
        +13
        Ещё Торвальдс в свой книге писал: "… те времена, когда мужчины были настоящими мужчинами и сами писали драйвера устройств..."
        0
        Я обнаружил, что при запуске на устройство передаётся большое количество мелких пакетов, прежде чем оно начинает захватывать картинку. Вероятно, оно действительно основано на платформе FPGA без хранилища данных. Каждый раз после подключения драйвер передавал на устройство прошивку в виде битстрима FPGA.

        Очень странная логика производителя, если учесть, что Spartan содержит в себе конфигурационную память. Зачем так надо было делать?
          +9
          Постоянной конфигурационной памяти в Spartan 6 не бывает. Прошивка сбрасывается при выключении питания и при каждом включении её нужно грузить либо через какой-нить jtag, либо с отдельно пристёгнутой микросхемы флеша, которую часто не ставят в дешёвых устройствах.
          Встроенный флеш для хранения конфигурации был когда-то в семействе Spartan 3AN, но это было давно.
            +1
            Да, вы правы! Мне до сих пор периодически приходится копать только 2/3 спартаны и я почему-то думал, что флешка требуется начиная с 7-ой серии.
              +1

              Да и в дорогих специализированных устройствах типа автоматических биохимических анализаторов частенько бывает так, что фирмварь загружается управляющим софтом с внешнего компа и сбрасывается при каждом отключении питания. Само по себе без управляющего ПО на внешнем компе оборудование является кирпичом.

                0
                А чего этим добиваются? Дополнительная защита интеллектуальной собственности, повышение надёжности, облегчение доставки обновлений?
                  0
                  Удешевление, в большинстве своём. Объединять флеш и логику в одном устройстве дорого и, как правило, не нужно. Даже процессор в вашем компьютере относится именно к этому классу: если в него не залить микрокод с внешнего устройства — то он так кирпичём и останется (на самом деле не совсем, но почти: в частности без специальной настройки современный процессор не сможет обращаться к оперативной памяти).
                    +1

                    fx2lp может грузится с "трёхкопеечной" памяти 24c64.
                    Похоже, в данном устройстве всё-же какие-то меры для защиты от реверса изобретали

                    0
                    IMHO, не только удешевление.
                    Стоимость разработки для FPGA не маленькая, если считать количество человеко-дней помноженное на ЗП инженера соответствующей квалификации. В итоге, для небольших партий специфичных устройств, стоимость разработки может даже превышать стоимость железа.
                    Понятно, что компании, которые подобное разрабатывают, не будут счастливы, когда предприимчивые китайцы скопируют прошивку и начнут на али продавать свой вариант устройства за цену близкую к себестоимости железа. Так что и защита прошивки — это важная цель для тех, кто коммерческие устройства на FPGA выпускает.
                    Конечно, в последние годы порог входа в мир дизайна FPGA снизился — появился HLS, много всякого open source, готовые библиотеки от производителей FPGA. Но всё равно стоимость разработки поделённая на небольшую партию составляет ощутимую часть цены устройства.
                      +6
                      Только тут наоборот вышло, автор прошивку перехватил даже без программатора. Все удалось без проблем вытащить из драйвера.
                        0

                        Наши первые устройства китайцы действительно копировали. Причём, они работали со стоковым драйвером. Потом появилась подпись.

                        +2
                        1) Экономия в пару баксов (или больше, если это Altera/Intel с epcq)
                        2) В ПЛИСах(не всех, в основном довольно жирных, не уровня спартана/циклона) можно включить шифрование прошивки и её подпись, после чего конкретно ваш кирпич будет принимать только конкретную прошивку, зашифрованную под этот кирпич (и в кирпич соседа вы свою не зальёте), а все прочие игнорировать. Весьма паршиво получается, когда по ошибке взводишь бит защиты (а он там обычно в OTP памяти лежит), и следом получаешь мёртвый JTAG, увы навсегда.
                          +2
                          Еще есть интересный кейс — для безопасности. На устройстве, на которое прошивка заливается каждый раз при перезагрузке, невозможно закрепиться, и его не получится использовать как плацдарм для последующих персистентных атак. Более того, схема load-FW/lock-until-reset отлично заменяет другие, более сложные схемы безопасной загрузки. По сути, вместо переизобретения СекуреБута для каждого чипа нужно сделать его один раз нормально для главного чипа, и грузить прошивки в периферию уже из доверенной среды.
                      0

                      Именно так. SPI флешка появилась только на линейке AV.io HD и SDI, а поноценно и быстро стала использоваться только на AV.io 4K. Там ещё есть нюансы, но не буду распространяться :)

                      +10
                      Зато не нужна перепрошивка устройства и соответственно нет вероятности окирпичить его.
                        +7
                        прочел подряд коммент выше
                        Само по себе без управляющего ПО на внешнем компе оборудование является кирпичом.

                        затем ваш комментарий
                        и соответственно нет вероятности окирпичить его.

                        Возникла парадоксальная мысль: Нельзя сделать кирпичом то что уже является кирпичом! :-)
                          +1

                          Ага, но бывает и так, что прошивка хранится локально на устройстве и внешний комп является сугубо управляющим. Степень привязанности к хосту бывает разной, по аналогии с принтерами — бывают "безмозглые" устройства, где функционал максимально реализован программно на хосте, как в GDI принтерах, и с преимущественно аппаратной реализацией, получающие от хоста только команды и возвращающие обработанные данные. Оборудование, где реализован "аппаратный" подход, часто имеет возможность автономной работы.

                          +1
                          В этом есть один плюс — выпуская новые драйвера, можно исправить какую-либо ошибку в устройстве, либо добавить новые функции. Себестоимость устройства меньше на цену флешки.
                            +1
                            Так-то оно да. С одной стороны. Плюсы-то вроде очевидны. Но с другой, получается полная привязка к производителю и его желанием поддерживать драйвер в актуальном состоянии, которое может быть сильно переменчиво. Старые сканеры, например, можно хотя бы через VueScan как-то попользовать. А с таким подходом девайс может в кирпич превратиться сам по себе с течением прогресса, если какой-нибудь Ben Cox не появится)

                            Аналогия не прямая, но показательная. Я года три назад на работе метался в поисках старого компа с LPT портом. Так как дорогущий и единственный программатор для Actel'овских antifuse ПЛИС отказывался работать с переходниками LPT-USB, LTP-PCI. А новый, с USB, вдруг стоит сотни тысяч и речи о его покупке даже не шло. Я уже точно не помню — в переходниках какой-то протокол не был реализован, а в BIOS'ах на старых матерях его можно было принудительно включить. Кое-как нашёл, теперь этот компьютер имеет особый статус на складе)
                              +1
                              Время течёт, ничего не меняется… Как Microsoft хранил долгие годы компьютер с особым статусом на складе, так и вы… только вам нужен был LPT-порт, а им нужен был DOS с мегабайтом памяти в реальном режиме (что, как вы понимаете, невозможно на платформе PC)…
                                +4
                                На будущее — в ВУЗах надо спрашивать про такие вещи, там старья куча, они с радостным визгом поменяют на новые. Если есть в компании студенты — действуйте через них.
                                И да, я знаю, о чем говорю — на мне в МГУ компьютерный класс висит, увы. Вынести комп по частям можно легко, просто это в 2019 не надо никому. На инвентаризацию можно вносить обратно раз в год, или, что проще, бирку с инвентарником переклеить.
                                  0
                                  Я уже думал на авито купить старую платформу, но повезло из трёх компов собрать один рабочий) Насчёт ВУЗов — это мысль!
                                  0
                                  А почему не плата расширения?
                                    0
                                    С ней программатор своим софтом тоже не увиделся.
                                      +1
                                      Вполне возможно, что дело в драйверах. На старых системах (до WinXP) можно было творить полный беспредел с портами, хоть использовать СОМ в качестве параллельного, управляя отдельными пинами.
                                        0
                                        Я точно не помню, но проблема решилась вроде старой матерью с включенным протоколом EPP. А вот пара PCI'ных плат расширения, этот протокол формально поддерживали, а по факту ничего не работало. Драйвер, кстати, был под WinXP.
                                          0
                                          Проблема была, с вероятностью 99%, не с протоколом EPP (это и все современные матери умеют и все USB-устройства), а с шиной ISA.

                                          Которая как раз и поддерживает работу с EPP в определённых режимах минуя драйвера.

                                          А на современных системах всё нужно делать по спеке… которую старые драйвера далеко не всегда соблюдают…
                                    0
                                    Если я не путаю, относительно современные «матери» (еще на BIOS) имеют гребенки с LPT.
                                      0
                                      Такой вариант тоже рассматривался. Не получилось. В современных материнках этот LPT можно только ВКЛ/ОТКЛ и всё. А на древнем компе оказалось несколько пунктов — настройка протокола, стандарта.
                                      +2

                                      А вы задолбите поддержку открытием драйвера ;-) Я практически закончил наработку по DKMS пакетировке под Linux в виде более близком к nVidia, а не тому, что сейчас. Но… Положили на полку — нет спроса. Плюс, я не увидел в тексте упоминания факта обращения к поддержке: обычно идут на встречу. А вот то, что поддержка VGA2USB закончена… Это не понятно, у нас до сих пор поддержка устройств на FX2 есть и не выкинута… Если что-то не работает — повод для обращения. К сожалению, лично у меня нет старых устройств, проверить не смогу.


                                      Плюс, была разработана линейка AV.io (собственно их фирмварь в части FX3 — моих кривых рук дело)), которые по сути являются UVC+UAC устройствами, как раз для решения проблемы драйвера. А прерогативой driver-full решений — остались достаточно консервативные компании, для которых гарантированно обеспечивается поддержка.

                                  –1
                                  Вообще то было бы интересно убрать из девайса FPGA и память и брать данные от АЦП напрямую контроллером (у него есть высокоскоростной интерфейс на частоты до 50 метров).
                                    +1

                                    У того АЦП выход — параллельные 24 бита, напрямую с 8/16-битным портом FX2 не стыкуется. А вот написать под FPGA конфиг, перепаковывающий например 2х24 -> 3х16 было бы забавно (и никакой пайки).
                                    Схема соединений BGA FPGA с не-BGA остальными компонентами без особых усилий восстанавливается boundary scan’ом через JTAG порт FPGA (каждый интересующий пин «прочих» компонентов тянем щупом к 0/1 и смотрим через boundary scan на который пин FPGA пришло изменение). Писал даже простенький консольный софт для такого, позже попадался готовый красивый с GUI.

                                      0
                                      У АЦП можно включить режим 4:2:2 и получаем 16 бит, что вполне влезает в шину МК.
                                    +1
                                    И зачем было писать драйвер ядра?
                                    Есть же libusb!
                                      0
                                      чтобы быстрей гонять байтики видеопотока?
                                        +1
                                        И чем это быстрей?
                                          0
                                          В ядре меньше оверхед (не требуется переключение контекста)
                                            +1
                                            Расскажите это разработчикам F-Stack. Оно работает в userspace, и производительность выше, чем родной стек линукса.
                                            Это только пример. Но это наглядно показывает, что не всегда что-то сделанное в ядре самое быстрое.
                                              +3
                                              При прочих равных — код в ядре быстрее. F-Stack быстрее линуксового стека потому, что послали лесом всё прочее, цитирую «kernel packet copying, thread scheduling, system calls, and interrupts». Если это выкинуть, то да, одно конкретное приложение будет быстрее передавать пакетики. Вот только всё остальное начнет тормозить.
                                                +1
                                                Ну если вчитаться в доки этого F-Stack, то оно базируется на DPDK. Так что оно не в userspace работает, а прямо на железе (и только на поддерживаемом). В userspace только управление этим делом. Видимо нужно отдать специально обученную железку специально обученному софту (я как понял даже open source надо патчить) и только так оно будет быстрее. Чудес не бывает, и практически любой userspace использует те же самые возможности ядра только в режиме конкурентности и в порядке живой очереди.
                                                0
                                                Не понятно. Все равно данные должны попасть в юзерспейс. Можно читать большими блоками и все. Где там оверхед?
                                                  0
                                                  Вот это точно не скажу. Нужно посчитать, сколько сисколов дёрнет чтение, к примеру одного кадра через libusb (не в курсе, задается ли там размер блока и как это влияет на количество переключений контекста) по сравнению с одним вызовом read из блочного устройства.
                                                    +1

                                                    Можно заменить одни и те же физ.страницы в юзерспейс и кернелспейс. Тогда копирование вообще не понадобится

                                            +9
                                            «Для меня это была новая концепция, ведь в ядре моего дистрибутива Linux обычно есть драйверы для всех устройств.»

                                            Честно говоря, эта фраза заставила меня ржать в голос. Дожили… Это даже не до мышей, это уже до винды. ;) Вот он, прогресс. Но за драйвер — респект.
                                              +2

                                              Ну процитированное близко к истине. Из часто используемых out-of-tree драйверов — nvidia, ati (уже нет, насколько мне известно), да всякие виртуалбоксы-vmware.

                                                +1

                                                И чего тут смешного? Есть стандартный USB Video Class, в Линуксе для него есть драйвер. Вполне логично ожидать, что устройство видеозахвата будет использовать этот класс, а не изобретать велосипед.

                                                  +4

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

                                                    0
                                                    Именно. Тем более на НЕ массовое устройство. Возможно, что дело в переводе, и имелось ввиду не «новая концепция», а скажем «потребовало другого подхода», но надо смотреть в контексте.

                                                    Потому как не может быть для юниксойда отсутствие драйвера для странной железки чем-то новым. Это рядовая ситуация.
                                                    +1
                                                    Если вы не поняли, то я вероятно не смогу объяснить. Скажем, я имел дело с *nix системами 20 с мелочью лет назад. Поэтому когда когда читаю о том, что для юниксойда отсутствие драйвера под какую-то не массовую железку — новая концепция, для меня это примерно равно вере в плоскую землю. Но куда смешнее.

                                                    И на сколько я смог вчера оценить по своим знакомым, примерно с тем же временным опытом — такая реакция не только у меня. Знакомый админ от той цитаты облился чаем, потом долго ругался. Правда, он такой же старый, как и я. :)
                                                      0
                                                      А у меня другой опыт. Ставил линуксы на десяток разных компов и не заводились устройства четыре раза. Но беглый гуглинг в трех из них позволял найти гайд и по нему настроить или даже скомпилировать драйвер.

                                                      Наоборот, приятрно радует то, что «воткнул и работает» (например, планшет wacom, или вайфай свистки".
                                                        0
                                                        Ну, я бы мог напомнить, что ТОГДА беглый гуглинг был невозможен, а альтависта все вопросы не решала. :) Но за нынешних юниксоидов могу только порадоваться.
                                                      0

                                                      AV.io :-) В driver-full железках больше ручек для контроля и работы вместе с SDK, который тоже распространяется на сайте. Плюс львиная доля кода драйвера унифицирована между USB и PCIe устройствами, ровно как и между OS, поэтому поднять новую железку в драйвере куда быстрее, чем создавать прошивку (хотя, код AV.io, в целом, получился тоже крайне унифицированным).

                                                    +2

                                                    Напомнило как я стационарное интернет радио реверсил https://habr.com/ru/post/306850/

                                                      +1
                                                      Эта штука может захватывать кадры с устройств с «нестандартной» разверкой, допустим с устройств с 15KHz/50Hz разверткой?
                                                      +1
                                                      Отличная плата! Если для спартана и сайпреса есть возможность подпаять jtag разъёмы, то получится приличный отладочник для освоения adc + fpga + usb mcu.
                                                        0
                                                        Не встречал ли кто подобный девайс для HDMI?
                                                        Было бы намного удобней стартовать некоторые устройства без необходимости тащить монитор.
                                                          +3
                                                          Так обращайтесь к Epiphan!
                                                          У него есть не только устаревшие, но и актуальные устройства! DVI2USB 3.0! Всего 600 фунтов.
                                                            +1
                                                            Вот Епифаны они такие. За 600 фунтов только и могут работать.
                                                              0
                                                              «Епифан казался жадным, хитрым, умным, плотоядным» ©
                                                                +1
                                                                Мучительно, тягостно, сдерживаюсь от шуток на тему «зеленого слоника»...
                                                              +1
                                                              Переходник hdmi->vga (4$) плюс сабж должно сработать.
                                                              Или Partilink HDMI Video Capture Device USB 3.0 1080P 60 FPS (60$).
                                                                +1
                                                                Сабж за указанную цену надо ещё найти. Новый он стоит как DVI2USB
                                                                +1
                                                                В смысле — эдакие конвертеры HDMI в USB? Есть устройства видеозахвата, позволяющие писать и стримить с HDMI на компьютер по USB. Примеры — www.elgato.com/en/gaming/game-capture-hd60-s или www.avermedia.com/ru/product-detail/GC553. Вот только системные требования у них… да и цены тоже ничо так.
                                                                  0

                                                                  Из недорогих вот такое (пользуюсь для оцифровки кассет)
                                                                  https://ru.aliexpress.com/item/32850685941.html
                                                                  из более профессионального вот
                                                                  https://www.blackmagicdesign.com/ru/products/intensity

                                                                    0
                                                                    Любой девайс для Live streaming, например AVerMedia Live Gamer Portable
                                                                      0

                                                                      Можешь смотреть AV.io, или есть китайцев Magawel (к слову, дохнут пачками), или недавно Logitech сделал свой вариант. Всё это — UVC+UAC, т.е. драйвера не нужны.


                                                                      А так, на базе LR есть KVM2USB (на МКС летал ;-)) или более новый KVM2USB 3.0 (VGA+HDMI+DVI single link), там драйвера не нужны, но нужен управляющий софт. Я пытаюсь периодически пробить, что бы софт на гитхабе выложили… Но...

                                                                      +2
                                                                      Вангую за USB контроллер для поддержки 5"-floppy дисководов!
                                                                        +2
                                                                        Где брать годные дискеты? Мои и в старые времена не читались. А теперь через 20 лет они и подавно уже все посыпались. Тут хотя бы 3.5" поднять. Они и на складах наверное еще есть.
                                                                        :-)
                                                                        (сегодня CD-ROM уже раритетом можно считать)
                                                                          +1
                                                                          Дык они уже есть, только не под все типы дискет, там редкий зоопарк, впрочем, как и на 3.5"
                                                                            +1
                                                                            Вангую за USB контроллер для поддержки 5"-floppy дисководов!
                                                                            0

                                                                            А вообще не понимаю, почему автор не попытался обратиться в поддержку. В драйвере поддержка не выпилена и есть до сих пор, хотя с некоторого периода времени не тестируется. Да, политика несколько идиотская, так что актуальные драйвера для Linux легче получить через саппорт. У меня ферма из докеров с кучей дистрибутивов/версий которая каждую ночь (канадскую) перестраивает драйвера под актуальные ядра...

                                                                              0
                                                                              Циан
                                                                              Маджента

                                                                              Я так понимаю, никого кроме меня не смущает такое наплевательство к русскому языку и здравому рассудку? Почему Красный и Жёлтый переводчик сподобился перевести, а на два остальных цвета его мегамозга не хватило? (в личку писал, но m1rko сделал вид, что так и надо)
                                                                                +2
                                                                                Наверное по тому что это на русский нормально не перевести. Cyan — это не голубой/бирюзовый. А Magenta — это не малиновый, пурпурный. Мне например проще ориентироваться по таким названиям цветов. На основе CMYK. Сразу картинка возникает перед глазами.
                                                                                  0

                                                                                  С другой стороны, тут точные названия цветов и не нужны. Бирюзовый с желтым вы не перепутаете (а если вы дальтоник, то вам и название "циан" не поможет).

                                                                                    +1

                                                                                    Для меня названия циан и магента ассоциируются с определёнными цветами. Я их названия воспринимаю быстрей чем в переводе. Тут дело не в путанице, а в скорости распознавания. Наверное потому, что часто на руках такая краска оставалась. Это как кататься на велосипеде. На хабре была замечательная статья как кто воспринимает цвета. В английском варианте это устоявшиеся оттенки. Вот например. Какого цвета фуксия?

                                                                                      0

                                                                                      Ну так перевод-то делается на русский язык, а не на язык loki82. А в российских школах что такое "циан" и "магента" не рассказывают, и никаких ассоциаций эти слова у меня, к примеру, не вызывают.


                                                                                      Вот например. Какого цвета фуксия?

                                                                                      Знать бы ещё что это такое...

                                                                                  0

                                                                                  Спросил у школьника 6го класса. Ответ. Циан — это типа бирюзового. Про магенту не слышал. Показал магенту и попросил описать. Ответ. Похож на малиновый. На уточняющие вопросы ответил: светлее бардового. Так как их то на русский перевести?

                                                                                    0

                                                                                    Вот и надо переводить cyan как голубой или бирюзовый, а margenta — как малиновый или бордовый.


                                                                                    Точность тут не нужна совершенно, поскольку все 4 цвета перед глазами, и нужно не описывать цвет, а указать на 1 из 4.

                                                                                  0
                                                                                  Ооо, знаю этот Epiphan, использовали. Кстати, ребята, которые делают Epiphan — русские, сидят в Канаде. Как-то прилетала вакансия от них на удаленную работу.
                                                                                  Надо было связаться с саппортом, наверняка помогли бы.

                                                                                Only users with full accounts can post comments. Log in, please.