Skip to content
← Все новости

· автор — Команда OpenIPC

OpenIPC запустил Linux 7.0 на камерных процессорах, брошенных вендором на версии 3.0

Камерные процессоры HiSilicon Hi3516 остались на Linux 3.0.8–4.9: вендор так и не дал им более нового ядра. OpenIPC собирает прошивки для семи из них на Linux 7.0 — на Hi3516EV300 это рабочая сборка, на Hi3516CV300 она грузится на живой плате.

Камерные процессоры HiSilicon Hi3516 вышли с Linux 3.0.8–4.9, и более нового ядра вендор для них так и не выпустил. Камеры на этих процессорах до сих пор работают в сетях — с ядром, застывшим десять лет назад. Теперь OpenIPC собирает прошивки для семи таких процессоров на Linux 7.0.

Сборки называются neo и выходят из CI в основном дереве прошивок OpenIPC: Hi3516CV100, CV200, CV300, AV100, AV200, AV300 и EV300. На Hi3516EV300 сборка с 7.0 уже рабочая. На Hi3516CV300 она грузится на живой плате и отдаёт видео. Остальные пять собираются и грузятся в нашем эмуляторе, проверка на железе идёт.

Сложным местом было не ядро. Вендор отдаёт видеотракт готовыми модулями ядра, привязанными к одной его версии через версионирование символов: модуль, собранный под 4.9, просто откажется загружаться на чём-то новее. Мы оставляем эти бинарники и пересобираем из исходников всё вокруг них — слой абстракции от ОС, менеджер памяти, MIPI, watchdog, загрузчик прошивки ISP — за одним заголовком совместимости, который покрывает Linux от 3.0 до 7.0. Один и тот же исходный код драйверов собирается под 4.9, 6.6, 6.18 и 7.0, и условной компиляции внутри него нет. Именно это и развязывает видеотракт камеры с замороженным ядром.

Переход на актуальное ядро — это вопрос безопасности: как только камера работает на сборке с 7.0, до неё доходят исправления, попавшие в upstream после 4.9. Изменения мы обкатываем в эмуляторе, прежде чем они попадут на железо. Наш эмулятор qemu-bench воспроизводит больше сотни машин от десяти вендоров и грузит их на каждый push, а сам эмулятор мы сверили с кремнием: вывод аппаратного ускорителя на живой плате Hi3516EV300 совпал с эмулятором попиксельно по всем восьми операциям.

Ядро лежит в OpenIPC/linux, ветка upstream-patches; открытые драйверы — в OpenIPC/openhisilicon, прошивки — в OpenIPC/firmware. Сообщения об уязвимостях принимаются здесь: OpenIPC/firmware/security.

Образы выкладываются ночными сборками на странице релизов — у файлов neo окончание -neo.tgz. Как установить, написано в разделе «Начало работы».