Энтузиаст поднял веб-сервер… на одноразовом вейпе

от admin

Чем-то напоминает невозможные порты DOOM

Энтузиаст под ником BogdanTheGeek запустил полноценный HTTP-сервер на микроконтроллере из одноразового вейпа. Причем сервер умеет обслуживать страницы, обрабатывать запросы и даже возвращает JSON-ответы.

Все это — на чипе с 3 КБ оперативной и 24 КБ флеш-памяти, без сетевого интерфейса, Wi-Fi или Ethernet.

Откуда там вообще чип?

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

Вместо обычного черного эпоксидного «блоба» он обнаружил маркированный микроконтроллер PUYA C642F15, позже идентифицированный как PY32F002B с ARM Cortex-M0+ частотой 24 МГц.

Вейпы, по сути, оказались носителями полностью программируемых микроконтроллеров.

Как он вывел это в сеть?

Wi-Fi, Ethernet или даже Bluetooth в таких устройствах, разумеется, нет. Но автор воспользовался семихостингом — механизмом отладки, при котором отладчик может отправлять и принимать данные через подключенный JTAG/SWD интерфейс.

AMD случайно слила исходники FSR 4 на GitHub и удалила их. Пользователи успели сделать форкиtproger.ru

Далее он применил довольно хакерское решение: использовал pyOCD для создания telnet-порта с выходом семихостинга, затем через socat пробросил это в виртуальное TTY-устройство, поверх него поднял SLIP (Serial Line Internet Protocol). Да, тот самый, из эпохи dial-up.

Читать также:
Вышел обновленный VSCode. 90% его функций связаны с ИИ-помощником Copilot

После этого на Linux можно было поднять IP-интерфейс sl0 и назначить IP-адрес — теперь микроконтроллер был виден как узел локальной сети.

А веб-сервер?

В качестве TCP/IP-стека был выбран uIP — крайне легкий вариант от Contiki OS, специально рассчитанный на 8- и 16-битные микроконтроллеры.

Он же включает в себя минимальный HTTP-сервер. После небольшой адаптации под семихостинг и исправления проблем с выравниванием памяти на ARM все заработало.

Причем не просто «заработало», а заработало удивительно быстро: после оптимизации буферов и избавления от побайтной передачи, RTT упали до 20 мс, а загрузка страницы — до 160 мс.

Несмотря на сверхограниченные ресурсы (всего 3 КБ RAM, из которых почти половина уже занята сервером), автор сумел:

  • организовать буферизацию и кольцевой буфер;
  • запустить TCP/IP-стек и веб-сервер;
  • реализовать подсчет посещений и возврат JSON-ответов;
  • полностью уместить все в оставшиеся ~20КБ флеша.

Он даже добавил простую статистику: уникальный ID микроконтроллера и количество посещений со времени последнего «краша».

Зачем это все?

Как отмечает сам автор, цель была не в создании полезного веб-сервера, а в демонстрации возможностей предельно скромного «железа», которое в обычной жизни просто выбрасывается.

Иными словами — это искусство, хакерская эстетика и демонстрация инженерной изобретательности.

Похожие статьи