Merge pull request 'Update README.md' (#1) from develop into main
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Successful in 5s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Successful in 9s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Successful in 8s

Reviewed-on: https://gitea.home.com:3000/TolaMironcenko/up/pulls/1
This commit was merged in pull request #1.
This commit is contained in:
wt
2026-03-14 05:42:05 +07:00
+94 -73
View File
@@ -1,112 +1,133 @@
# Bootloader Update Manager
A C-based web application for updating kernel, device-tree, and U-Boot environment files on Orange Pi Zero 2W.
Веб-приложение на C для обновления ядра, device-tree и U-Boot environment на Orange Pi Zero 2W.
## Features
## Возможности
- **Web Interface**: Modern, responsive UI for easy file management
- **Kernel Update**: Upload `Image.gz` to boot partition
- **Device-Tree Update**: Upload `sun50i-h618-orangepi-zero2w.dtb`
- **U-Boot Environment**: Upload `uboot.env`
- **extlinux.conf Editor**: View and edit boot configuration
- **Progress Bar**: Real-time upload progress tracking
- **Auto-mount**: Automatically mounts `/dev/mmcblk1p1` to `/media`
- **Large File Support**: Upload files up to 200MB
- **Веб-интерфейс**: Современный адаптивный UI для удобного управления
- **Обновление ядра**: Загрузка `Image.gz` в boot раздел
- **Обновление Device-Tree**: Загрузка `sun50i-h618-orangepi-zero2w.dtb`
- **U-Boot Environment**: Загрузка `uboot.env`
- **Редактор extlinux.conf**: Просмотр и редактирование конфигурации загрузчика
- **Индикатор прогресса**: Отображение прогресса загрузки в реальном времени
- **Авто-монтирование**: Автоматически монтирует `/dev/mmcblk1p1` в `/media`
- **Поддержка больших файлов**: Загрузка файлов до 200 MB
- **Перезагрузка системы**: Кнопка безопасной перезагрузки с корректным отмонтированием
## Requirements
## Структура проекта
- GCC compiler
- [Mongoose](https://mongoose.ws) - Embedded web server
- [cJSON](https://github.com/DaveGamble/cJSON) - JSON parser
- Root privileges (for mounting devices)
### Installing Dependencies
**Ubuntu/Debian:**
```bash
# Install mongoose (or build from source)
sudo apt-get install libmongoose-dev
# Install cJSON
sudo apt-get install libcjson-dev
```
.
├── 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
```
**Build from source:**
```bash
# Mongoose
git clone https://github.com/cesanta/mongoose.git
cd mongoose && make && sudo make install
## Требования
# cJSON
git clone https://github.com/DaveGamble/cJSON.git
cd cJSON && mkdir build && cd build && cmake .. && make && sudo make install
```
- GCC компилятор
- Библиотеки встроены в проект:
- [Mongoose](https://mongoose.ws) v7.19 - встроенный веб-сервер
- [cJSON](https://github.com/DaveGamble/cJSON) v1.7.18 - JSON парсер
- Права root (для монтирования устройств и перезагрузки)
## Building
## Сборка
```bash
make
```
## Running
## Запуск
```bash
sudo make run
# or
sudo ./up
```
The server will start on **http://localhost:8080**
Сервер запустится на **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 | Description |
|----------|--------|-------------|
| `/api/upload` | POST | Upload files (kernel, dtb, uboot) |
| `/api/extlinux` | GET | Read extlinux.conf |
| `/api/extlinux` | POST | Write extlinux.conf |
| `/api/progress` | GET | Get upload progress |
| `/api/mount` | GET | Get mount status |
| 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 | Перезагрузка системы |
## Upload Parameters
## Параметры загрузки
For `/api/upload`:
- `type`: File type (`kernel`, `dtb`, or `uboot`)
- `file`: The file to upload
Для `/api/upload` (multipart/form-data):
- `type`: Тип файла (`kernel`, `dtb`, `uboot`)
- `file`: Загружаемый файл
## File Locations
## Расположение файлов
| Type | Destination File |
|------|------------------|
| Kernel | `/media/Image.gz` |
| Тип | Файл назначения |
|-----|-----------------|
| Ядро | `/media/Image.gz` |
| Device-Tree | `/media/sun50i-h618-orangepi-zero2w.dtb` |
| U-Boot Env | `/media/uboot.env` |
| Extlinux | `/media/extlinux.conf` |
| Extlinux | `/media/extlinux/extlinux.conf` |
## Project Structure
## Конфигурация
```
.
├── main.c # Main application (C server)
├── index.html # Web interface HTML
├── style.css # Web interface styles
├── app.js # Frontend JavaScript
├── Makefile # Build configuration
└── README.md # This file
### mongoose_config.h
```c
#define MG_MAX_RECV_SIZE (256 * 1024 * 1024) // 256 MB лимит запроса
#define MG_IO_SIZE 131072 // 128 KB буфер
```
## Screenshots
### Ограничения
- Максимальный размер файла: **200 MB**
- Порт сервера: **43243**
The web interface includes:
- System status panel showing mount state
- Tabbed upload interface for different file types
- Real-time progress bar during uploads
- Full-featured text editor for extlinux.conf
## Безопасность
## Security Notes
⚠️ **Предупреждение**:
- Приложение требует права **root** для монтирования и перезагрузки
- Используйте с осторожностью в production окружении
- Рекомендуется ограничить доступ к веб-интерфейсу
⚠️ **Warning**: This application requires root privileges to mount devices. Use with caution and ensure proper access controls in production environments.
## Зависимости
## License
Все зависимости встроены в проект:
- `mongoose.c/h` - веб-сервер (из репозитория Cesanta)
- `cJSON.c/h` - JSON парсер (из репозитория DaveGamble)
## Лицензия
MIT License