# 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 - **Перезагрузка системы**: Кнопка безопасной перезагрузки с корректным отмонтированием ## Структура проекта ``` . ├── 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](https://mongoose.ws) v7.19 - встроенный веб-сервер - [cJSON](https://github.com/DaveGamble/cJSON) v1.7.18 - JSON парсер - Права root (для монтирования устройств и перезагрузки) ## Сборка ```bash make ``` ## Запуск ```bash 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/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 ```c #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