MicroPython Firmeware bauen -> newlib component has been renamed

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1662
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo zusammen,

ich würde gerne MicroPython mit dem `st7789` Modul bauen. Für den ESP8266 hat das auch geklappt. Zumindest der `make` lief erfolgreich durch. Aber der hat zu wenig Speicherplatz für die Firmware.
Dann wollte ich auf den ESP32 ausweichen, allerdings läuft hier `make` nicht erfolgreich:

Code: Alles auswählen

CMake Error at /home/dennis/esp/esp-idf/tools/cmake/build.cmake:376 (message):
  Failed to resolve component 'newlib' required by component 'main': unknown
  name.
Call Stack (most recent call first):
  /home/dennis/esp/esp-idf/tools/cmake/build.cmake:419 (__build_resolve_and_add_req)
  /home/dennis/esp/esp-idf/tools/cmake/build.cmake:749 (__build_expand_requirements)
  /home/dennis/esp/esp-idf/tools/cmake/project.cmake:741 (idf_build_process)
  CMakeLists.txt:68 (project)

-- Configuring incomplete, errors occurred!
HINT: newlib component has been renamed to esp_libc. Any `REQUIRES newlib` can simply be deleted as esp_libc is REQUIRED by default.
Der Hinweis ist recht eindeutig und ich habe mich auf die Suche gemacht, wo ich denn `newlib` finde und je nach dem hätte ich das einfach umbenannt oder eben rausgeworfen, weil es ja nicht benötigt wird.

Mit `grep` habe ich gesucht und überall hier wird "newlib" gefunden:

Code: Alles auswählen

./micropython/extmod/modplatform.h
./micropython/lib/btstack/platform/chibios/retarget_chibios.c
./micropython/lib/btstack/port/apollo2-em9304/btstack_port.c
./micropython/lib/btstack/port/msp432p401lp-cc256x/main.c
./micropython/lib/btstack/port/nrf5-cinnamon/pca10040/armgcc/Makefile
./micropython/lib/btstack/port/renesas-ek-ra6m4a-da14531/e2-project/.cproject
./micropython/lib/btstack/port/renesas-ek-ra6m4a-da14531/e2-project/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c
./micropython/lib/btstack/port/renesas-ek-ra6m4a-da14531/port/hal_entry.c
./micropython/lib/btstack/port/renesas-tb-s1ja-cc256x/template/btstack_example/.cproject
./micropython/lib/btstack/port/renesas-tb-s1ja-cc256x/template/btstack_example/synergy/ssp/src/bsp/mcu/all/bsp_sbrk.c
./micropython/lib/btstack/port/stm32-f4discovery-cc256x/port/port.c
./micropython/lib/fsp/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c
./micropython/lib/libffi/.ci/bfin-sim.exp
./micropython/lib/libffi/.ci/m32r-sim.exp
./micropython/lib/libffi/.ci/moxie-sim.exp
./micropython/lib/libffi/.ci/or1k-sim.exp
./micropython/lib/libffi/.ci/powerpc-eabisim.exp
./micropython/lib/libffi/.ci/wine-sim.exp
./micropython/lib/libffi/config.sub
./micropython/lib/libm/ef_rem_pio2.c
./micropython/lib/libm/ef_sqrt.c
./micropython/lib/libm/erf_lgamma.c
./micropython/lib/libm/fdlibm.h
./micropython/lib/libm/kf_cos.c
./micropython/lib/libm/kf_rem_pio2.c
./micropython/lib/libm/kf_sin.c
./micropython/lib/libm/kf_tan.c
./micropython/lib/libm/sf_cos.c
./micropython/lib/libm/sf_erf.c
./micropython/lib/libm/sf_frexp.c
./micropython/lib/libm/sf_ldexp.c
./micropython/lib/libm/sf_modf.c
./micropython/lib/libm/sf_sin.c
./micropython/lib/libm/sf_tan.c
./micropython/lib/libm/wf_lgamma.c
./micropython/lib/libm/wf_tgamma.c
./micropython/lib/nxp_driver/lpcopen/lpc11u6x/gcc/cr_startup_lpc11u6x.c
./micropython/lib/nxp_driver/lpcopen/lpc11uxx/gcc/cr_startup_lpc11xx.c
./micropython/lib/nxp_driver/lpcopen/lpc13xx/gcc/cr_startup_lpc13xx.c
./micropython/lib/pico-sdk/README.md
./micropython/lib/pico-sdk/bazel/config/BUILD.bazel
./micropython/lib/pico-sdk/bazel/constraint/BUILD.bazel
./micropython/lib/pico-sdk/cmake/preload/toolchains/pico_arm_cortex_m0plus_clang.cmake
./micropython/lib/pico-sdk/cmake/preload/toolchains/pico_arm_cortex_m33_clang.cmake
./micropython/lib/pico-sdk/cmake/preload/toolchains/util/pico_arm_clang_common.cmake
./micropython/lib/pico-sdk/src/rp2_common/pico_clib_interface/BUILD.bazel
./micropython/lib/pico-sdk/src/rp2_common/pico_clib_interface/CMakeLists.txt
./micropython/lib/pico-sdk/src/rp2_common/pico_printf/include/pico/printf.h
./micropython/lib/pico-sdk/src/rp2_common/pico_printf/printf.c
./micropython/lib/pico-sdk/test/pico_float_test/pico_double_test.c
./micropython/lib/pico-sdk/test/pico_float_test/pico_float_test.c
./micropython/lib/pico-sdk/test/pico_sha256_test/pico_sha256_test.c
./micropython/lib/pico-sdk/test/pico_stdlib_test/pico_stdlib_test.c
./micropython/lib/pico-sdk/test/pico_time_test/pico_time_test.c
./micropython/lib/tinyusb/hw/bsp/board.c
./micropython/ports/cc3200/FreeRTOS/Source/tasks.c
./micropython/ports/esp32/boards/sdkconfig.base
./micropython/ports/esp32/esp32_common.cmake
./micropython/ports/esp32/managed_components/espressif__mdns/tests/test_afl_fuzz_host/Makefile
./micropython/ports/esp32/build-ESP32_GENERIC/log/idf_py_stderr_output_58277
./micropython/ports/esp32/build-ESP32_GENERIC/CMakeFiles/CMakeConfigureLog.yaml
./micropython/ports/esp32/build-ESP32_GENERIC/CMakeFiles/3.31.6/CompilerIdC/a.out
./micropython/ports/esp32/build-ESP32_GENERIC/CMakeFiles/3.31.6/CompilerIdCXX/a.out
./micropython/ports/esp32/build-ESP32_GENERIC/sdkconfig.combined.in
./micropython/ports/esp32/build-ESP32_GENERIC/sdkconfig.combined
Einfach da durch gehen und jedes "newlib" in "new_lib" umbenennen, könnte funktionieren. Das ist aber nicht meine Art. Habe ich trotzdem gemacht und wie zu erwarten, geht das nicht:

Code: Alles auswählen

CMake Error at /home/dennis/esp/esp-idf/tools/cmake/build.cmake:376 (message):
  Failed to resolve component 'new_lib' required by component 'main': unknown
  name.
Call Stack (most recent call first):
  /home/dennis/esp/esp-idf/tools/cmake/build.cmake:419 (__build_resolve_and_add_req)
  /home/dennis/esp/esp-idf/tools/cmake/build.cmake:749 (__build_expand_requirements)
  /home/dennis/esp/esp-idf/tools/cmake/project.cmake:741 (idf_build_process)
  CMakeLists.txt:68 (project)


-- Configuring incomplete, errors occurred!
HINT: The component 'new_lib' could not be found. This could be because: component name was misspelled, the component was not added to the build, the component has been moved to the IDF component manager, the component has been removed and refactored into some other component or the component may not be supported by the selected target.
Please look out for component in 'https://components.espressif.com' and add using 'idf.py add-dependency' command.
Refer to the migration guide for more details about moved components.
Refer to the build-system guide for more details about how components are found and included in the build.
Da stehen ja jetzt auch wieder Hinweise. Allerdings habe ich das Problem ja mehr oder weniger erzwungen. Daher eher meine Frage, wie würdet ihr bei der originalen Fehlermeldung vorgehen? Kann ich das in Griff bekommen und wenn ja, wie?

Der Link zu MicroPython noch, falls jemand Interesse daran hat.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14264
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wonach hast Du gegrepped? Da steht "REQUIRES newlib" kann entfernt werden. Nicht das "newlib" in "new_lib" umbenannt werden soll.
“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
Benutzeravatar
Dennis89
User
Beiträge: 1662
Registriert: Freitag 11. Dezember 2020, 15:13

Hi und danke,
irgendwo hatte ich doch was von umbenannt in "new_lib" gelesen.
Naja egal, gesucht habe ich mit:

Code: Alles auswählen

grep --exclude=*.bin -rnwl . -e newlib
Die Suche nach "REQUIRES newlib" ist erfolglos (ich habe das Repo davor natürlich gelöscht und das aktuelle wieder herunter geladen). Jetzt suche ich mit:

Code: Alles auswählen

grep --exclude=*.bin -rnwl . -e '(REQUIRES).*(newlib)'
Auf https://regex101.com/ macht der Ausdruck was er soll.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14264
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Es steht nicht so direkt drin. In micropython/ports/esp32/esp32_common.cmake steht ein ``REQUIRES ${IDF_COMPONENTS}`` (auf zwei Zeilen verteilt) und in der gleichen Datei steht ein ``list(APPEND IDF_COMPONENTS`` wo in der folgenden Liste dann das ``newlib`` drin steht.
“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
Benutzeravatar
Dennis89
User
Beiträge: 1662
Registriert: Freitag 11. Dezember 2020, 15:13

Vielen Dank. Wie hast du das jetzt gefunden? Erfahrung?

Ich habe "newlib" aus der Liste gelöscht.
Dann kam:

Code: Alles auswählen

CMake Error at /home/dennis/esp/esp-idf/tools/cmake/build.cmake:376 (message):
  Failed to resolve component 'usb' required by component 'main': unknown
  name.
Call Stack (most recent call first):
  /home/dennis/esp/esp-idf/tools/cmake/build.cmake:419 (__build_resolve_and_add_req)
  /home/dennis/esp/esp-idf/tools/cmake/build.cmake:749 (__build_expand_requirements)
  /home/dennis/esp/esp-idf/tools/cmake/project.cmake:741 (idf_build_process)
  CMakeLists.txt:68 (project)


-- Configuring incomplete, errors occurred!
HINT: The component 'usb' could not be found. This could be because: component name was misspelled, the component was not added to the build, the component has been moved to the IDF component manager, the component has been removed and refactored into some other component or the component may not be supported by the selected target.
Please look out for component in 'https://components.espressif.com' and add using 'idf.py add-dependency' command.
Refer to the migration guide for more details about moved components.
Refer to the build-system guide for more details about how components are found and included in the build.
HINT: USB host layer ('usb' component) was removed from ESP-IDF. Please use 'usb' component from IDF component manager instead.
You can install 'usb' component using 'idf.py add-dependency espressif/usb' command.
Refer to the migration guide for more details.
Ich habe:

Code: Alles auswählen

idf.py add-dependency espressif/usb
und es kommt

Code: Alles auswählen

[dennis@dennis esp32]$ idf.py add-dependency espressif/usb
Executing action: add-dependency
NOTICE: Successfully added dependency "espressif/usb": "*" to component "main"
NOTICE: If you want to make additional changes to the manifest file at path /home/dennis/PycharmProjects/TWxSimulation/micropython/ports/esp32/main/idf_component.yml manually, please refer to the documentation: https://docs.espressif.com/projects/idf-component-manager/en/latest/reference/manifest_file.html
Done
Mit

Code: Alles auswählen

idf.py update-dependencies
kommt allerdings:

Code: Alles auswählen

CMake Error at /home/dennis/esp/esp-idf/tools/cmake/build.cmake:693 (message):
  ERROR: Because project depends on espressif/usb (*) which doesn't match any
  versions, version solving failed.

Call Stack (most recent call first):
  /home/dennis/esp/esp-idf/tools/cmake/project.cmake:741 (idf_build_process)
  CMakeLists.txt:68 (project)


..........-- Configuring incomplete, errors occurred!
cmake failed with exit code 1, output of the command is in the /home/dennis/PycharmProjects/TWxSimulation/micropython/ports/esp32/build/log/idf_py_stderr_output_90134 and /home/dennis/PycharmProjects/TWxSimulation/micropython/ports/esp32/build/log/idf_py_stdout_output_90134
Ohne `HINT` bin ich total hilflos.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1662
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

da ich auch auf GitHub kein ähnliches Issue gefunden habe, ist der erste logische Schritt, für mich zumindest, es muss an mir liegen.
Zum gefühlt 100. mal habe ich `esp-idf` gelöscht, das MicroPython-Repo gelöscht und von vorne angefangen. Mein Gedanke, ich baue mal nur die MikroPython Firmware ohne zusätzlichen Code. Dafür habe ich mich an die README.md von MicroPython gehalten und `make` lief erfolgreich durch. Keine Meldung von wegen `newlib` oder `usb`.
Hier wird allerdings vor `make` noch `make submodules` ausgeführt.
Dann habe ich folgendes gemacht:

Code: Alles auswählen

make clean
make USER_C_MODULES=../../../../../st7789_mpy/
Und es lief erfolgreich durch und hat sich auf den ESP32 flashen lassen und `st7789` ist importierbar.

Was macht den `make submodules` ? Es verrät ja, dass da irgendwelche Module compiliert werden, die benötigt werden. Wenn ich in das README von ESP8266 schaue, dann wird da kein `make submodules` benötigt und das ist vermutlich auch der Grund, wieso ich diese Firmware bauen konnte, ich aber auf Probleme mit dem ESP32 gestoßen bin, weil ich diese Anleitung verwendet habe. Macht das Sinn?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14264
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich hatte nach ``REQUIRES newlib`` gesucht und nix gefunden, also im nächsten Schritt dann nach Dateien die ``REQUIRES`` und ``newlib`` irgendwo enthalten. So habe ich die Datei gefunden und dort dann geschaut wo ``newlib`` verwendet wird und wie der Zusammenhang mit dem ``REQUIRES`` ist. Wirklich mehr Ahnung habe ich davon leider auch nicht. :-)
“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
Benutzeravatar
Dennis89
User
Beiträge: 1662
Registriert: Freitag 11. Dezember 2020, 15:13

Okay :D Darauf hätte man (ich) also auch selbst kommen können 🙄

Für die Detailfrage von mir, sollte man mal einen gewissen User aus dem Forums-Schlaf aufwecken. Kannst du dich mal auf die Suche machen? In der richtigen Stadt bist du ja schon mal 😇
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1662
Registriert: Freitag 11. Dezember 2020, 15:13

Noch was anderes. Ich benutze diese Schriftart:
https://github.com/Dennis-89/st7789_mpy ... /README.md

Da ist ein ausgefüllter Kreis abgebildet. Wo bekomme ich jetzt die Hex-Darstellung oder das Symbol her? Den Smile hätte ich auch gerne. Die Schriftart an sich finde ich gar nirgends, also mit der Bezeichung `vga`. Raus gefunden habe ich bis jetzt nur, das 0x002E den ganz normalen Punkt, also das Satzzeichen darstellt. In dieser Tabelle gibt es aber keinen ausgefüllten Kreis. Das war hier unter "Basis-Lateinisch"

Kennt ihr die Schriftart, die ich verwende? Wie heißt die richtig?

Danke und Grüße
Dennis

Btw. Ansonsten läuft jetzt alles recht gut, der PR ist auch erstellt, dabei habe ich entdeckt, das es den schon gab :D Der ist aber noch offen und von 2024.
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 14264
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die Kodierung sieht nach code page 437 aus. Meinst Du das Zeichen an 7. Stelle in der ersten Zeile? Das wäre dann 0x07. Und die Schriftart wird dem Namen nach wahrscheinlich die aus dem ROM einer IBM VGA Grafikkarte sein.
“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
Benutzeravatar
Dennis89
User
Beiträge: 1662
Registriert: Freitag 11. Dezember 2020, 15:13

Perfekt, genau dass ist die.

Vielen Dank.
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten