Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Successful in 6s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Successful in 10s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Successful in 8s
134 lines
5.1 KiB
Markdown
134 lines
5.1 KiB
Markdown
# 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
|