cross-compiled esp flash tool

Gast #7322585
Lesenswert?

Grüßt euch!

Ich suche nach einer Möglichkeit, ein tool zu entwickeln, das als self-contained binary (keine Laufzeitumgebung, kein Python-Interpreter etc.) unter Windows zum Flashen eines ESP devboards via USB benutzt werden kann. Der Anwender soll lediglich wissen, wie er ein USB-Kabel zu stecken hat und die Anwendung öffnen, vielleicht noch einen com-port auswählen. Dabei soll das Kompilieren des tools in einem Linux-basierten Ökosystem erfolgen, bzw. automatisiert in einer gitlab-ci pipeline.

Dazu habe ich mal angefangen, mir rust anzuschauen un z.B. das hier gefunden

https://github.com/esp-rs/espflash

Da Rust für mich komplettes Neuland ist (von Windows habe ich auch keine Ahnung), wollte ich mich mal umhören, wie realistisch so was ist, bevor ich sehr viel Zeit damit verbrate und ob es vielleicht einen einfacheren Ansatz gibt (OTA kann ich nicht machen).

Gast #7323264
Lesenswert?

Cross Compiling und statisch gelinkte Programme sind in der Sprache Go besonders einfach.

https://go.dev/doc/

Mit dem folgenden Befehl compiliere ich meine Go Projekte auf jedem beliebigen Rechner:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go install -v -a -ldflags '-s' ./...

go install ./... : Ist das Kommando, mit dem man ein komplettes Projektverzeichnis compiliert. Das ausführbare Binary befindet sich danach im Verzeichnis <home>/go/bin.

GOOS=linux: legt das Betriebssstem fest

GOARCH=amd64: legt die Hardware Architektur fest

-v: Aktiviert mehr Ausgaben zum Fortschritt

-a: Erzwingt, dass alle Quelltexte neu compiliert werden (keinen Cache verwenden)

Standardmäßig hängen Go Programme nur von der Standard C Bibliothek ab. Mit den folgenden Parametern wird man auch diese Abhängigkeit los:

CGO_ENABLED=0 -ldflags '-s'


Um Serielle Ports anzusprechen brauchst du eine 3rd Party Bilbiothek. Ich bin bisher mit https://github.com/jacobsa/go-serial/serial gut zurecht gekommen.

Gast #7323300
Lesenswert?

Lara schrieb:

It only works on Linux as of right now, because Microsoft(r) Windows(tm)(c) does not support termios.

Deswegen sollst du ja die andere Bibliothek verwenden.

By the way: das ist der korrigierte Link: https://github.com/jacobsa/go-serial

"Currently this package works only on OS X, Linux and Windows."

Was dir da allerdings vermutlich fehlt ist die Möglichkeit, die Handshake Leitungen im Stil der NodeMCU Module zu steuern. Wer einen Flash-Button (oder Schalter) hat, braucht das auch nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren