Forum: Mikrocontroller und Digitale Elektronik cross-compiled esp flash tool


von Simon (Gast)


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).

von Lara (Gast)


Lesenswert?

Sollte durchaus machbar sein. Ich würde mir aber dennoch eine 
Windowsumgebung fürs Testen besorgen. Eine VM sollte es tun.

von Stefan F. (Gast)


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.

von Lara (Gast)


Lesenswert?

Stefan F. schrieb:
> Cross Compiling und statisch gelinkte Programme sind in der Sprache Go
> besonders einfach.

kann ich bestätigen, funktioniert auch wunderbar in der gitlab pipeline. 
Aber für Rust gibt es schon Projekte fürs esp-flashen. Bei go wüsste ich 
nicht.

von Stefan F. (Gast)


Lesenswert?

Lara schrieb:
> Bei go wüsste ich nicht.

https://github.com/Fluepke/esptool

Wenn man da die oben genannte go-serial Bibliothek einbaut, läuft es 
vielleicht auch unter Windows.

von Lara (Gast)


Lesenswert?

Stefan F. schrieb:
> Lara schrieb:
>> Bei go wüsste ich nicht.
>
> https://github.com/Fluepke/esptool
>
> Wenn man da die oben genannte go-serial Bibliothek einbaut, läuft es
> vielleicht auch unter Windows.

laut README leider nicht

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

von Stefan F. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.