mirror of
https://github.com/Klipper4FlashForge/firmware.git
synced 2026-10-22 05:12:16 -05:00
Builds a modified FlashForge update package that the printer installs by itself from a USB stick, reusing FlashForge's own updater rather than a parallel one. Integration is a single file: /usr/prog/PROGRAM/software/firmwareExe is replaced with a shell script. Everything funnels through that binary, so app_startup.sh, rcS and the init chain stay completely stock. The genuine binary is kept as firmwareExe.stock and remains the default UI. Key findings from the stock firmware, each enforced by a test: - components named *.tar.xz are PLAIN tar; the installer runs bare `tar -xvf` - the .tgz is DES3-encrypted plain tar, not gzip - nothing in init starts Klipper -- firmwareExe runs start.sh, so replacing the UI without S70klipper leaves a printer that cannot move - the installer wipes the software dir before run.sh, so an uninstall package must ship the genuine firmwareExe rather than back one up - ssh already works: stock ships dropbear + an enabled S50dropbear, only the root password is missing Brick-safety is designed in, not bolted on: a five-rung profile ladder starting with a probe that changes nothing, a container-based simulation that actually runs the installer and asserts the printer would still boot, an uninstall round-trip test, and a SAFE-MODE latch for UI crash loops. 75 checks pass. Not yet run on hardware.
34 lines
1.3 KiB
Bash
34 lines
1.3 KiB
Bash
#!/bin/sh
|
|
# /usr/prog/klipper/start.sh
|
|
#
|
|
# Kept as close to stock as possible. The web stack is NOT started here even
|
|
# though stock has the (commented-out) lines for it -- that is the job of
|
|
# /usr/data/mod/init.d/S60web, so there is exactly one place that starts
|
|
# nginx and moonraker and one place to restart them from over ssh.
|
|
#
|
|
# The only change from stock: klipper_pri.sh is actually invoked. FlashForge
|
|
# ships that script but never calls it, so klippy runs at normal priority.
|
|
|
|
cmd_mcu write_firmware /usr/prog/libmcu-bare.bin
|
|
cmd_mcu bootup
|
|
sleep 2
|
|
|
|
export PATH=$PATH:/usr/prog/Python-3.8.2/bin
|
|
export LD_LIBRARY_PATH=/usr/prog/Python-3.8.2/lib:$LD_LIBRARY_PATH
|
|
export LD_LIBRARY_PATH=/usr/prog/openssl-1.0.2d/lib:$LD_LIBRARY_PATH
|
|
export LD_LIBRARY_PATH=/usr/prog/libffi-3.4.4/lib:$LD_LIBRARY_PATH
|
|
|
|
# Idempotence guard: firmwareExe runs this script, and so does
|
|
# init.d/S70klipper when the stock UI is not present. Running it twice would
|
|
# start a second klippy against the same MCU.
|
|
if [ -S /tmp/uds ]; then
|
|
echo "start.sh: klippy already running, nothing to do"
|
|
exit 0
|
|
fi
|
|
|
|
/usr/prog/klipper/checkEboard
|
|
/usr/prog/klipper/klipperDaemon start
|
|
|
|
# Real-time priority for klippy (stock ships this but never runs it).
|
|
sh /usr/prog/klipper/klipper_pri.sh >/dev/null 2>&1 &
|