febecf4dd920ffb5107d9986ca0bb7616aa0d76b
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 компилятор
- Библиотеки встроены в проект:
- Права 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
Languages
C
86.6%
C++
10.8%
JavaScript
1.1%
CSS
0.7%
HTML
0.7%