Камерные процессоры 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. Как установить, написано в разделе
«Начало работы».