HOWTO: Firmware unter Ubuntu 22.04 installieren

Einführung

Ich habe meinen PC neu installiert und dabei Ubuntu 22.04 gewählt. Ich konnte den ESP32 nicht mehr flashen. Dieses HOWTO beschreibt, wie wir den ESP32 unter Ubuntu 22.04 über https://install.openbikesensor.org installieren.

Problem: Chromium

Installation:

sudo apt install chromium-browser

Dies installiert Chromium als snap, was äquivalent zu Folgendem ist:

sudo snap install chromium

Öffnen: https://install.openbikesensor.org/

Wenn wir nun auf CONNECT klicken, dann werden keine Geräte gefunden:

Es scheint, dass das Snap-Paket nicht auf /dev und damit nicht auf USB zugreifen kann.

Install Google Chrome

Wir installieren daher Google Chrome über das deb-Paket:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb

Google Chrome starten:

google-chrome

Öffnen: https://install.openbikesensor.org/

Wenn wir nun erneut auf CONNECT klickt, dann werden Geräte gefunden. Wenn wir nach unten scrollen, dann sollten wir das Gerät CP2102 finden. In diesem Fall taucht das Gerät nicht auf:

Dies überprüfen wir einmal mit sudo dmesg. Wir sehen, ein interface 0 claimed by cp210x while ‚brltty‘ und ein device disconnected:

[   75.721614] usb 1-2: new full-speed USB device number 9 using xhci_hcd
[   75.900960] usb 1-2: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
[   75.900979] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   75.900989] usb 1-2: Product: CP2102 USB to UART Bridge Controller
[   75.900995] usb 1-2: Manufacturer: Silicon Labs
[   75.901001] usb 1-2: SerialNumber: 0001
[   75.954784] usbcore: registered new interface driver usbserial_generic
[   75.954815] usbserial: USB Serial support registered for generic
[   75.959500] usbcore: registered new interface driver cp210x
[   75.959523] usbserial: USB Serial support registered for cp210x
[   75.959562] cp210x 1-2:1.0: cp210x converter detected
[   75.962263] usb 1-2: cp210x converter now attached to ttyUSB0
[   75.996175] input: PC Speaker as /devices/platform/pcspkr/input/input26
[   76.522111] input: BRLTTY 6.4 Linux Screen Driver Keyboard as /devices/virtual/input/input27
[   76.682984] usb 1-2: usbfs: interface 0 claimed by cp210x while 'brltty' sets config #1
[   76.683573] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0
[   76.683596] cp210x 1-2:1.0: device disconnected

D.h. brltty blockert den ESP32 (siehe auch). Daher deinstallieren wir brltty:

sudo apt remove brltty

Wenn wir nun den USB-Stecker einmal raus- und wieder reinstecken, dann ist der ESP32 nun verbunden, was wir an der Meldung cp210x converter now attached to ttyUSB0 erkennen:

[  181.134949] usb 1-2: USB disconnect, device number 9
[  182.943663] usb 1-2: new full-speed USB device number 10 using xhci_hcd
[  183.123055] usb 1-2: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
[  183.123074] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  183.123083] usb 1-2: Product: CP2102 USB to UART Bridge Controller
[  183.123090] usb 1-2: Manufacturer: Silicon Labs
[  183.123096] usb 1-2: SerialNumber: 0001
[  183.132551] cp210x 1-2:1.0: cp210x converter detected
[  183.133846] usb 1-2: cp210x converter now attached to ttyUSB0

Nun sollte das Gerät in der Liste auftauchen:

Sobald wir das Gerät auswählen kommt der folgende Fehler: Failed to open serial port:

Ein Blick in chrome://device-log zeigt ein FILE_ACCESS_DENIED:

Wir schauen uns das /dev/ttyUSB0 näher an, und wir erkennen, dass root:dialout als Besitzer gesetzt ist:

Wir fügen den aktuellen User zur Gruppe dialout hinzu:

sudo adduser $USER dialout

Einmal aus- und wieder einloggen. Ggf. einmal neustarten. Der Benutzer sollte in der Gruppe dialout sein:

Nun können wir den ESP32 mit der Firmware flashen (ich muss im Prozesss immer BOOT am ESP32 drücken):

Nach einiger Zeit ist das Flashen der Firmware erfolgreich:

1 „Gefällt mir“

Wow, danke fürs Beschreiben und Zusammentragen. Das fühlt sich arg komplex an, da ist es eventuell einfacher die esptools zu installieren?
Beim Googeln bin ich noch auf Bug #1890365 “[snap] Web Serial fails to access local device” : Bugs : chromium-browser package : Ubuntu gestoßen. Eventuell hilft auch ein: sudo snap connect chromium:raw-usb?

1 „Gefällt mir“

Ja, das war auch ein längerer Prozess für mich.

Das mit chromium:raw-usb werde ich nochmal ausprobieren, wenn ich wieder am PC bin.

Um brltty entfernen (blockiert /dev/ttyUSB) und Benutzer zur Dialout-Gruppe hinzufügen (sonst Zugriffsfehler) kommt man nicht herum.

Das kann ich mir vorstellen. Eventuell braucht es dann doch noch eine weitere Alternative :frowning: .

Ich sehe nicht warum wir Linuxer nicht einfach selbst kompilieren und flashen lassen mit PlatformIO.

Ich flashe immer mit pio run -t upload, das ist der einfachste Einzeiler den ich mir vorstellen kann.

Bei mir (ArchLinux) kommt platformio mit /usr/lib/udev/rules.d/99-platformio-udev.rules, da wird für alle möglichen Geräte (zuvorderst CP210X USB UART) der Mode 0666 gesetzt, also Schreibrechte für alle.

Dependencies, toolchains runterladen und kompilieren dauert zwar kurz, dafür geht das flashen in 10s statt 2-3 Minuten, und dann ist die Zeit schon wieder drin.

1 „Gefällt mir“

Ja, das hat geholfen sich über Chromium mit dem ESP32 zu verbinden, ohne Google Chrome installieren zu müssen.