94 lines
2.6 KiB
Markdown
94 lines
2.6 KiB
Markdown
# Factory Flashing Toolkit (Local-Only)
|
|
|
|
This toolkit now runs in local-only mode.
|
|
|
|
- Network workflows are not used.
|
|
- `flash.bin_encryption` config item is no longer supported.
|
|
- Firmware package format is **always** `.bin.enc` + `.sig`.
|
|
|
|
## Quick Start
|
|
|
|
### 1) Build firmware
|
|
|
|
From project root:
|
|
|
|
```bash
|
|
idf.py build
|
|
```
|
|
|
|
`idf.py build` now auto-overwrite-syncs required plaintext build outputs
|
|
from `build/flasher_args.json` into `tools/esptool-factory/bin/`.
|
|
|
|
If you already built firmware and only want to refresh bin files manually:
|
|
|
|
```bash
|
|
python3 tools/esptool-factory/sync_factory_bins.py
|
|
```
|
|
|
|
### 2) Prepare private config
|
|
|
|
Use plaintext config:
|
|
|
|
- `tools/esptool-factory/conf/factory_private.json`
|
|
|
|
Requirements:
|
|
|
|
- Do not set `flash.bin_encryption`.
|
|
- Keep `flash.layout` / `app_bin_name` aligned with current build outputs.
|
|
- `flash.app_bin_name` must exist in `flash.layout`, and `flash.app_partition_offset`
|
|
must match that layout entry offset.
|
|
- `flash.flash_args` (`flash_mode`/`flash_freq`/`flash_size`/`before`/`after`)
|
|
must use supported enum values.
|
|
- `flash.layout` uses original build artifact names (for example `bootloader.bin`);
|
|
the packager converts them to `bootloader.bin.enc` automatically.
|
|
|
|
### 3) Package
|
|
|
|
From project root:
|
|
|
|
```bash
|
|
tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py
|
|
```
|
|
|
|
By default, the packager now directly uses files in `tools/esptool-factory/bin/`.
|
|
If you still want packager-side sync from `build/`, use:
|
|
|
|
```bash
|
|
tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py \
|
|
--sync-build-bins
|
|
```
|
|
|
|
The packager always uses:
|
|
|
|
- `tools/esptool-factory/keys/firmware/fw_key.bin`
|
|
|
|
and copies it into the release package under `keys/firmware/fw_key.bin`.
|
|
|
|
Default output:
|
|
|
|
- `tools/esptool-factory/dist/factory/`
|
|
|
|
You can change output folder name:
|
|
|
|
```bash
|
|
tools/esptool-factory/.venv/bin/python3 tools/esptool-factory/package_factory_tools.py \
|
|
--package-name line-a
|
|
```
|
|
|
|
### 4) Factory use
|
|
|
|
1. Run packaged GUI.
|
|
2. Connect device and click start.
|
|
3. Tool executes: device check -> flash -> post-flash check.
|
|
- If secure boot is already enabled but flash `0x0` header is blank/invalid,
|
|
GUI will switch to initial full-flash provisioning (with force semantics where needed)
|
|
instead of app-only.
|
|
- `force` is gated to `bootloader@0x0` only. Before writing, GUI re-checks
|
|
bootloader image chip/revision compatibility and blocks plaintext force if
|
|
flash encryption appears enabled.
|
|
|
|
No environment variable is required for `.enc` decrypt key.
|
|
The GUI reads `keys/firmware/fw_key.bin` from the package directory.
|
|
|
|
No network endpoint is required.
|