Уже в некоторых случаях здесь в блоге мы рассказали о проделанной работе Андрея Коновалова (разработчик Google) в Linux, благодаря его работе по своевременному обнаружению сбоев в драйверах USB ядра Linux, а также в устройствах Wi-Fi.
Сейчас он работает над разработка нового модуля для ядра Linux, который он назвал «USB Raw Gadget» который описывается как утилита, позволяющая эмулировать USB-устройства в пользовательском пространстве.
Кроме того упоминает, что рассматривается приложение для включения этого модуля в основное ядро Linux. Google Raw Gadget уже используется Google для упрощения нечеткого тестирования стека ядра USB с помощью инструментария syzkaller.
Первоначально я использовал GadgetFS (вместе с модулем Dummy HCD / UDC) для эмуляции USB-устройств для фаззинга, но затем он был переключен на пользовательский письменный интерфейс.
Стимулом для реализации другого интерфейса было предоставление ярлыка и несколько необработанного доступа к уровню USB-гаджетов для пользовательского пространства, где каждый USB-запрос передается в пользовательское пространство для ответа.
О гаджете USB Raw
Модуль заботится о добавлении нового интерфейса программирование к подсистеме ядра называется «USB-гаджет» и разрабатывается как альтернатива GadgetFS.
Создание нового API связано с необходимостью прямого и низкоуровневого доступа в подсистему Gadget USB из пользовательского пространства, позволяя обрабатывать все возможные USB-запросы (GadgetFS обрабатывает некоторые запросы самостоятельно, не передавая их в пользовательское пространство).
USB Raw Gadget управляется с устройства / dev / raw-gadget. по аналогии с / dev / gadget в GadgetFS, но для взаимодействия используется интерфейс на основе ioctl () вместо псевдо-FS.
Помимо прямой обработки всех USB-запросов процессом в пользовательском пространстве, новый интерфейс также имеет возможность возвращать любые данные в ответ на USB-запрос (GadgetFS проверяет правильность дескрипторов USB и отфильтровывает определенные ответы, которые мешают обнаружение ошибок во время теста очистки стека USB).
USB Raw Gadget также позволяет выбрать конкретное устройство UDC. (Драйвер устройства USB) и драйвер для подключения, в то время как GadgetFS подключается к первому доступному устройству UDC.
Для разных UDC предсказуемые имена конечных точек отображаются на разные типы отдельных каналов связи в одном устройстве.
Наконец, если вы хотите узнать об этом больше, вы можете проверить подробности, а также журнал изменений, внесенных в USB Raw Gadget. По следующей ссылке.
Как установить USB-модуль Raw Gadget в Linux?
Те, кто заинтересован в возможности протестировать этот модуль в своей системе, могут сделать это, следуя инструкциям, подробно описанным здесь.
Для манекена HCD / UDC (модуль, который настраивает виртуальные USB-устройства и хост-контроллеры, которые подключены друг к другу в ядре). Мы должны открыть терминал, и в нем мы собираемся ввести следующую команду:
svn checkout https://github.com/xairy/raw-gadget/trunk/dummy_hcd
Таким образом, мы собираемся получить папку с модулями, которые собираемся компилировать, выполнив в терминале следующую команду:
cd dummy_hcd make
И приступаем к их установке с помощью:
./insmod.sh
Если мы хотим обновить модуль, мы делаем это с помощью:
./update.sh
Сейчас для тех, кто хочет установить модуль ядра. В терминале мы собираемся получить для этого необходимые файлы, выполнив следующую команду:
svn checkout https://github.com/xairy/raw-gadget/trunk/raw_gadget
Таким образом, мы собираемся получить папку с модулями, которые собираемся компилировать, выполнив в терминале следующую команду:
cd dummy_hcd make
И приступаем к их установке с помощью:
./insmod.sh
Если мы хотим обновить модуль, мы делаем это с помощью:
./update.sh
Вы можете проверить работу в по следующей ссылке.