2026-03-14 05:59:41 +07:00
2026-03-14 05:34:33 +07:00
2026-03-14 05:59:41 +07:00
2026-03-14 05:59:41 +07:00
2026-03-14 05:32:29 +07:00
2026-03-14 05:32:29 +07:00
2026-03-14 05:32:29 +07:00
2026-03-14 05:32:29 +07:00
2026-03-14 05:59:41 +07:00
2026-03-14 05:32:29 +07:00

Bootloader Update Manager

Веб-приложение на C для обновления ядра, device-tree и U-Boot environment на Orange Pi Zero 2W.

Возможности

  • Веб-интерфейс: Современный адаптивный UI для удобного управления
  • Обновление ядра: Загрузка Image.gz в boot раздел
  • Обновление Device-Tree: Загрузка sun50i-h618-orangepi-zero2w.dtb
  • U-Boot Environment: Загрузка uboot.env
  • Редактор extlinux.conf: Просмотр и редактирование конфигурации загрузчика
  • Индикатор прогресса: Отображение прогресса загрузки в реальном времени
  • Авто-монтирование: Автоматически монтирует /dev/mmcblk1p1 в /media
  • Поддержка больших файлов: Загрузка файлов до 200 MB
  • Перезагрузка системы: Кнопка безопасной перезагрузки с корректным отмонтированием
  • Мониторинг температуры: Отображение температуры CPU с цветовой индикацией

Структура проекта

.
├── main.c              # Основной сервер (C + mongoose + cJSON)
├── index.html          # HTML веб-интерфейса
├── style.css           # Стили веб-интерфейса
├── app.js              # Frontend JavaScript
├── Makefile            # Конфигурация сборки
├── README.md           # Документация
├── mongoose.h          # Mongoose web server (v7.19)
├── mongoose.c          # Mongoose web server (v7.19)
├── cJSON.h             # JSON parser (v1.7.18)
├── cJSON.c             # JSON parser (v1.7.18)
└── mongoose_config.h   # Конфигурация mongoose

Требования

  • GCC компилятор
  • Библиотеки встроены в проект:
    • Mongoose v7.19 - встроенный веб-сервер
    • cJSON v1.7.18 - JSON парсер
  • Права root (для монтирования устройств и перезагрузки)

Сборка

make

Запуск

sudo ./up

Сервер запустится на http://localhost:43243

Веб-интерфейс

System Status

  • Статус монтирования /dev/mmcblk1p1 → /media
  • Информация о устройстве

File Upload

Три вкладки для загрузки:

  • Kernel → /media/Image.gz
  • Device-Tree → /media/sun50i-h618-orangepi-zero2w.dtb
  • U-Boot Environment → /media/uboot.env

extlinux.conf Editor

  • Загрузка текущего extlinux.conf
  • Редактирование в текстовом поле
  • Сохранение изменений

System Control

  • Кнопка Reboot System с подтверждением
  • Безопасная перезагрузка:
    • sync() - сброс буферов ФС
    • umount /media - отмонтирование
    • shutdown -r now - мягкая перезагрузка через finit

API Endpoints

Endpoint Method Описание
/api/upload POST Загрузка файлов (kernel, dtb, uboot)
/api/extlinux GET Чтение extlinux.conf
/api/extlinux POST Запись extlinux.conf
/api/progress GET Статус загрузки
/api/mount GET Статус монтирования
/api/temperature GET Температура CPU
/api/reboot POST Перезагрузка системы

Параметры загрузки

Для /api/upload (multipart/form-data):

  • type: Тип файла (kernel, dtb, uboot)
  • file: Загружаемый файл

Расположение файлов

Тип Файл назначения
Ядро /media/Image.gz
Device-Tree /media/sun50i-h618-orangepi-zero2w.dtb
U-Boot Env /media/uboot.env
Extlinux /media/extlinux/extlinux.conf

Конфигурация

mongoose_config.h

#define MG_MAX_RECV_SIZE (256 * 1024 * 1024)  // 256 MB лимит запроса
#define MG_IO_SIZE 131072                      // 128 KB буфер

Ограничения

  • Максимальный размер файла: 200 MB
  • Порт сервера: 43243

Безопасность

⚠️ Предупреждение:

  • Приложение требует права root для монтирования и перезагрузки
  • Используйте с осторожностью в production окружении
  • Рекомендуется ограничить доступ к веб-интерфейсу

Зависимости

Все зависимости встроены в проект:

  • mongoose.c/h - веб-сервер (из репозитория Cesanta)
  • cJSON.c/h - JSON парсер (из репозитория DaveGamble)

Лицензия

MIT License

S
Description
No description provided
Readme
411 KiB
Languages
C 86.6%
C++ 10.8%
JavaScript 1.1%
CSS 0.7%
HTML 0.7%