mirror of
https://github.com/Klipper4FlashForge/firmware.git
synced 2026-10-21 21:02:16 -05:00
A sweep for comments and messages that describe machinery this tree no longer
has. Each one read as current and was not.
* bin/verify.sh, retired two commits before this branch, was still named as
the thing `make release` and docs/building.md were explaining the absence
of. The absence needs no explaining -- `make qa-replica` is the gate.
* `make test-recovery` does not exist. docs/hardware-testing.md told owners
it "used to" prove the stock rollback; the useful half of that -- nothing
tests the rollback today, treat it as unverified -- is kept and the dead
target name is not. runFirmwareExe.sh pointed at it too.
* run-append.sh in bin/build-payload.py, case-install.sh in
docs/printer-replica.md: both files are gone.
* `make test`/`make test-py` over test/, and the note that both suites run
in CI "until a case-*.sh has a green replacement" -- test/ was deleted and
there are no case scripts left to replace.
* docs/building.md still said a package carries the software component.
CI's shellcheck globs are the one real defect this turned up. Two of the four
-- pkgs/*/payload/init.d/S* and pkgs/*/prog/*.sh -- match nothing: the recipes
stopped using both paths, and payload/prog/ is where those scripts live now.
shellcheck given a pattern that expands to nothing writes usage to stderr and
exits 1, so that step has been failing for its globs rather than for the code.
Fixed to the paths that exist, with a pointer to
qa/static/test_shell_syntax.py, which addresses the same files and refuses a
glob that matches nothing -- the guard this step did not have.
Verified: the corrected invocation runs clean over the 21 files it now
matches, and 112 static tests pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CH7Yb4wuPhnppHAB25UX7e
105 lines
4.5 KiB
Markdown
105 lines
4.5 KiB
Markdown
# Hardware testing
|
|
|
|
CI installs the package into a replica of the printer -- the real
|
|
`rootfs.squashfs` running under qemu-mipsel, on the printer's own busybox and
|
|
`unTar` (see [printer-replica.md](printer-replica.md)) -- and proves the
|
|
machine would still boot. What it cannot do is drive the screen, the MCUs, the
|
|
toolchanger or a print. This is the on-hardware procedure.
|
|
|
|
There is one flash: the firmware package for your model.
|
|
|
|
**Rule: have the stock FlashForge package for your model on a spare stick
|
|
before you flash anything.** Flashing it back is the uninstall, and it is the
|
|
only recovery step that needs nothing but a USB port — no ssh, no screen.
|
|
|
|
**Nothing currently tests that rollback** — no gate installs the mod into the
|
|
replica and flashes the stock package back over it (see
|
|
[qa-migration.md](qa-migration.md)). It worked when it was last checked, but
|
|
treat it as unverified against the current build.
|
|
|
|
---
|
|
|
|
## Step zero: check the model gate
|
|
|
|
Every package carries a gate. Its `runFirmwareExe.sh` has `MACHINE=` / `PID=`
|
|
baked in, and compares them against the values `app_startup.sh` passes from
|
|
the firmware already on the printer. A mismatch is **refused** with
|
|
"Firmware does not match machine type" — it will not install, and it is not a
|
|
valid recovery image either.
|
|
|
|
| Model | MACHINE | PID |
|
|
|---|---|---|
|
|
| Creator 5 | `Creator5` | `0028` |
|
|
| Creator 5 Pro | `Creator5Pro` | `0029` |
|
|
|
|
The gate is not cosmetic: the two models ship **different `firmwareExe`
|
|
binaries**, so a package must be built from the stock package for its own
|
|
model. `make release` builds both.
|
|
|
|
Find yours in Settings → About, or in
|
|
`/usr/data/firmwareRes/config/general.json` (`machineName`), and set
|
|
`TARGET_MACHINE` in `config.env`. Then:
|
|
|
|
```sh
|
|
make build # one model
|
|
make release # both, into dist/
|
|
```
|
|
|
|
**You must start from a stock package built for your own model** — the mod
|
|
inherits the gate from whatever package you unpack, so a package built from
|
|
the wrong stock file carries the wrong gate and your printer will refuse it
|
|
with "Firmware does not match machine type". Nothing on the build host warns
|
|
you first; `make qa-replica` catches it by installing the package the way the
|
|
printer does.
|
|
|
|
## Before the first flash
|
|
|
|
- [ ] Put a copy of the **stock FlashForge package for your model** on a spare
|
|
USB stick and keep it physically separate. That is your recovery image:
|
|
flashing it restores every file the mod touches. Check it is the right
|
|
model first — see above.
|
|
- [ ] Note your printer's serial number (Settings → About). The factory image
|
|
restores a placeholder serial and you may need to put yours back.
|
|
- [ ] Confirm you can reach the printer's IP.
|
|
- [ ] `make qa` passes.
|
|
- [ ] `make qa-replica` passes — needs `PRINTER_IMAGE` in `test.env` and a
|
|
package from `make build`; this parses every script that
|
|
will run on the printer using the printer's own busybox ash.
|
|
|
|
Two USB sticks, FAT32, both packages at the **root** of the stick (not in a
|
|
folder). Ship both filenames (`Creator5-*` and `Creator5Pro-*`): the Pro's
|
|
boot script globs `Creator5Pro-*.tgz`, the non-Pro globs `Creator5-*.tgz`.
|
|
|
|
---
|
|
|
|
## The flash
|
|
|
|
One flash brings up everything: a root password you know, Mainsail and
|
|
moonraker, the forked Klipper with the toolchanger extras, and HelixScreen on
|
|
the touchscreen in place of FlashForge's UI.
|
|
|
|
From here the procedure is the one an owner follows, and it is written for
|
|
them rather than repeated here:
|
|
|
|
| | |
|
|
|---|---|
|
|
| [Installing](installing.md) | the flash itself, the first boot, the root password |
|
|
| [Your first print](first-print.md) | the go/no-go checks, calibration, and the two files under `gcode/` |
|
|
| [Support](support.md) | the logs, and the way back to stock |
|
|
|
|
What follows is the part that is ours rather than theirs: keeping those two
|
|
verification files honest as the macros change.
|
|
|
|
## Keeping the verification files honest
|
|
|
|
Nothing checks them automatically any more. `make test-py` used to: every
|
|
command in them had to be one the mod's Klipper config or
|
|
`pkgs/klipper/payload/klipper/klippy/extras/` defines (bar an explicit
|
|
allowlist of Klipper built-ins, currently just `SET_PRESSURE_ADVANCE`),
|
|
`TOOLS=` had to list every tool the feature print uses, and the safe file's own
|
|
lines had to stay cold and above Z50. That check went with the `test/` tree.
|
|
|
|
So a renamed macro now breaks the print rather than the suite. If you rename or
|
|
remove a macro, read `gcode/creator5-safe-moves.gcode` and
|
|
`gcode/creator5-feature-test.gcode` before you ship it.
|