[FW-898] CLI-Subkommando pack-bf3 zum Erzeugen von BF3-Files - #13
Merged
Conversation
Das Makesystem der Firmware erzeugt BF3-Files kuenftig selbst, statt ein .bf2 zu bauen und es per Bf3File.bf2_import() zu konvertieren. Weil make2 unter Python 2.7 laeuft, ruft es "bec2format pack-bf3" in einem eigenen Prozess auf. Das Manifest wird komplett ueber stdin gelesen, weil es den Firmware-Key enthaelt: so landet der Key weder in einer Datei noch in der Prozessliste. Entsprechend gibt das Kommando weder das Manifest noch einen Traceback aus, Fehler gehen als "ERROR: ..." nach stderr. cli.py wird bewusst nicht von __init__.py importiert - das Paketverzeichnis wird von der CI in die micropython-lib kopiert, wo weder argparse noch json verfuegbar sind. FW-898 Co-Authored-By: Claude <noreply@anthropic.com>
Die Funktion verwarf die erste 128-Byte-Zeile jedes Speicherbereichs nach einer Luecke und behielt zugleich dessen Startadresse: im Gap-Zweig wurde der Block geflusht und cur_block geleert, das Payload der ausloesenden Zeile aber nie angehaengt. Die Daten landeten dadurch 128 Byte zu frueh im Bereich und die ersten 128 Byte fehlten - eine stille Firmware-Korruption. Bisher latent, weil BF2_TAGTYPE_MAP uc-Firmware auf BF2COMPATIBLE abbildet und der MEMORYIMAGE-Pfad nie genommen wurde. Mit FW-898 wird er relevant, sobald jemand ein BF2 nach BF3/MEMIMAGE konvertiert. FW-898 Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
jkatins
approved these changes
Aug 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Teil A von FW-898. Das Makesystem der Firmware (Bros2FW, Python 2.7) erzeugt
BF3-Files kuenftig selbst, statt ein .bf2 zu bauen und es per
Bf3File.bf2_import()zu konvertieren. Weil bec2format Python >=3.10 verlangt,ruft make2 das neue CLI per
uvxin einem eigenen Prozess auf.Neues Subkommando
bec2format pack-bf3Neues Modul
bec2format/cli.pymit argparse-Subkommandostruktur undmain()als Entrypoint (poetry-Skript
bec2format).Das Manifest kommt komplett ueber stdin, weil es den Firmware-Key enthaelt: so
landet der Key weder in einer Datei noch in der Prozessliste. Entsprechend gibt
das Kommando weder das Manifest noch einen Traceback aus - Fehler gehen als
ERROR: ...nach stderr, Exitcode != 0.cli.pywird bewusst nicht von__init__.pyimportiert: die CI kopiert daskomplette Paketverzeichnis in die micropython-lib, wo weder
argparsenochjsonverfuegbar sind.package.json(mip-Manifest) bleibt unveraendert.Das Manifest-Schema ist im README dokumentiert.
Bugfix in
Bf3File.bf2_unpack_payload()Die Funktion verwarf die erste 128-Byte-Zeile jedes Speicherbereichs nach einer
Luecke und behielt zugleich dessen Startadresse - die Daten landeten 128 Byte zu
frueh im Bereich, die ersten 128 Byte fehlten. Stille Firmware-Korruption.
Bisher latent, weil
BF2_TAGTYPE_MAPuc-Firmware aufBF2COMPATIBLEabbildetund der
MEMORYIMAGE-Pfad nie genommen wurde. Mit FW-898 wird er relevant,sobald jemand ein BF2 nach BF3/MEMIMAGE konvertiert.
Tests / Verifikation
tests/-Verzeichnis (27 Tests), invoke-Tasktestund eigener CI-Jobin
verify-bec2format.ymlpack-bf3->Bf3File.read_file()-> mitdem
fw_keyentschluesseln -> aufactual_lenkuerzen -> Payload byte-gleichrot, mit exakt dem dokumentierten Symptom (128 Byte Versatz)
uvx --from ".[aes]" bec2format pack-bf3 < manifest.json, alsogenau die Aufrufform von make2
unberuehrt, weil
cli.pynicht am Paket-Init haengtinvoke lintist auf master bereits rot (black 1 Datei, isortbec2file.py, 12 flake8-Findings, 45 mypy-Fehler). Gegen diese Baselinegediffed: keine neuen Findings aus
cli.py,tests/odertasks.py;mypy 45 -> 44, weil
poetry install --all-extrasden fehlendencryptography-Stub aufloest.
Zwei Funde ausserhalb des Auftrags (nicht angefasst)
bf3file.py:443vergleichtdescription.get(BF3TAG.ENC)(bytes) mit demintBF3ENC.SESSIONKEY- nie wahr.Bf3File.read_file()entschluesseltsessionkey-verschluesselte Komponenten also nie.
package.jsonlistetbec2format/compatibility.py; die Datei heisst seiteiner Umbenennung
micropython_compatibility_quirks.py.Hinweis zur Reihenfolge
Bros2FW pinnt einen bec2format-Commit in
maketools/make2_baltech_ext/bf3_builders.py(BEC2FORMAT_REQ) und intox.ini. Der Pin muss nach dem Merge dieses PRs auf den neuen Commit gehobenwerden - vorher ist der Bros2FW-Branch nicht mergefaehig.
FW-898