Posts by md_fg

    Der Fehler war die Datei udev aus /usr/share/initramfs-tools/hooks/
    Wie/wann diese Datei auf den RasPi gekommen ist, kann nicht mehr ermittelt werden. Die Datei wird verschoben.

    Code
    cd /usr/share/initramfs-tools/hooks/
    sudo mv udev /home/louis/

    Mit Filezilla die Datei udev von einen anderen RasPi mit Bookworm geholt und in das aktuelle System kopiert.
    Alle folgenden Schritte laufen ohne Fehler durch, auch die framp Tools sind wieder benutzbar.

    Hallo

    Das upgrade von eben geht auch nicht, wieder die gleichen Fehler.

    Könntest Du die Datei udev aus Deinen System hier einstellen ?

    Bei mir sieht es jetzt so aus.

    Hallo

    Hier die Ausgaben von Heute

    Es sollte ein Update von 6.12.62+rpt-rpi-v8 auf 6.12.87+rpt-rpi-v8 werden.
    Das upgrade bricht mit einer merkwürdigen Fehler Meldung ab. Schon diese Zeile ist unklar.
    /usr/sbin/mkinitramfs: 922: /usr/share/initramfs-tools/hooks/udev: Permission denied

    Der Witz nach einem Reboot läuft der RasPi munter weiter mit Kernel
    uname -a
    Linux kiosk 6.12.87+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.87-1+rpt1~bookworm (2026-05-12) aarch64 GNU/Linux

    Auch unklar die Meldungen von framps/raspberryTools

    Der Ablauf bis zum Abbruch

    Arduino IDE 1.8.19 ?

    Und wenn alles in /home/user ist, was ist daran portable ?

    :conf:

    Wenn die IDE auf einen USB-Stick eingerichtet wurde, könnte die IDE mit allen Bibliotheken und Sketchen in der Hosentasche mit zum Kumpel wandern.
    Bei meiner Testreihe zum OTA Update mit Password Verschlüsselung habe ich 3 Portable IDE benutzt.
    In jeder war ein anderes ESP32 Package 3.3.0, 3.3.5 und 3.3.6 Installiert.

    Als Software wird die 64 Bit Version der IDE Version 1.8.9 benutzt.
    Die Einrichtung kann auf einen USB-Stick oder in einem Ordner auf der Localen SD/HD erfolgen.
    Die IDE Software das Icon und die Boardverwalter Liste wurden mit FileZilla auf den RasPi kopiert.
    Hier der Weg in einem Ordner auf einer Localen SD.

    Code
    pwd
    /home/louis
    mkdir -p ide-portable
    cp arduino-1.8.19-linuxaarch64.tar.xz ide-portable/
    cd ide-portable/
    tar -xvf arduino-1.8.19-linuxaarch64.tar.xz
    cd arduino-1.8.19
    mkdir -p portable
    ./arduino

    Die IDE wird gestartet und kann eingerichtet werden, unter Datei - Voreinstellungen - Zusätzliche Boardverwalter-URLs werden die folgenden Links eingetragen.
    http://arduino.esp8266.com/stable/package_esp8266com_index.json
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

    Als erstes wird die Installation der Arduino Boards unter Werkzeuge - Boardverwalter - Arduino AVR Boards angestoßen.
    Zur Kontrolle ob die Arduino Boards wirklich in der Portablen IDE Installiert wurden.

    Code
    ls /home/louis/ide-portable/arduino-1.8.19/portable/packages/arduino/hardware/avr/1.8.7/
    boards.txt  bootloaders  cores  drivers  extras  firmwares  libraries  platform.txt  post_install.bat  programmers.txt  README.md  variants

    Dann wird die ESP32 Package 3.3.6 in die Portable IDE Installiert die Kontrolle.

    Code
    ls /home/louis/ide-portable/arduino-1.8.19/portable/packages/esp32/hardware/esp32/3.3.6/
    boards.txt  CMakeLists.txt  cores  idf_component.yml  Kconfig.projbuild  libraries  package.json  platform.txt  programmers.txt  tools  variant

    Dann wird die ESP8266 Package 3.1.2 in die Portable IDE Installiert die Kontrolle.

    Code
    ls /home/louis/ide-portable/arduino-1.8.19/portable/packages/esp8266/hardware/esp8266/3.1.2/
    boards.txt  bootloaders  cores  keywords.txt  libraries  LICENSE  package.json  platform.txt  POLICY.md  programmers.txt  README.md  tests  tools  variants

    Dann wird die RP2040 Package 5.5.0 in die Portable IDE Installiert die Kontrolle.

    Code
    ls /home/louis/ide-portable/arduino-1.8.19/portable/packages/rp2040/hardware/rp2040/5.5.0/
    ArduinoCore-API  boards.txt  boot2  cores  docs  FreeRTOS-Kernel  include  keywords.txt  lib  libraries  LICENSE  ota  package.json  pico-sdk  platform.txt  programmers.txt  README.md  system  tests  tools  variants

    Nun als Test noch einige Bibliotheken Installieren unter Sketch - Bibliothek - Bibliotheksverwalter zb. die "U8g2", "URTClib" dann die Kontrolle.

    Code
    ls /home/louis/ide-portable/arduino-1.8.19/portable/sketchbook/libraries/
    readme.txt  U8g2  uRTCLib

    In Bookworm sind vor dem ersten Start vom Blink Sketch für UNO, in der IDE noch ein paar Vorarbeiten nötig zb. muss sich der user in der Gruppe uucp befinden.
    Auch die vielen Warn und Fehler Meldungen im Journal können ausgeblendet werden. Öffnen Sie die .bash_profile und fügen Sie zwei Zeilen hinzu.

    Code
    id											# Abfragen in welchen Gruppen sich der "user" befindet.
    sudo usermod -a -G uucp louis				# Die Gruppe uucp auch dem user louis geben.
    nano ~/.bash_profile						# Wenn vorhanden dann diese 2 Zeilen hinzufügen oder neu erstellen.
    QT_LOGGING_RULES="*=false"
    export QT_LOGGING_RULES

    Mein letztes Update für einen Raspberry 4 war am 11.08.2025 und brachte Kernel 6.12.34+rpt-rpi-v8
    Am 03.02.2026 wollte ich nun mal wieder Updaten, ja ein langer Zeitraum.

    sudo apt update # Aktualisierung für 234 Pakete verfügbar.
    sudo apt upgrade # 230 aktualisiert, 17 neu installiert, 0 zu entfernen und 4 nicht aktualisiert. Es müssen 741 MB an Archiven heruntergeladen werden.
    Bis zu dem folgenden Fehler war alles OK.

    Python
    SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
    dpkg: Fehler beim Bearbeiten des Archivs /tmp/apt-dpkg-install-r0lPoz/124-python3-libcamera_0.5.2+rpt20250903-1~bpo12+1_arm64.deb (--unpack):
    »neues pre-removal-Skript des Paketes python3-libcamera:arm64«-Unterprozess gab den Fehlerwert 1 zurück
    Traceback (most recent call last):
    File "/usr/bin/py3compile", line 26, in <module>
    import optparse
    File "/usr/lib/python3.11/optparse.py", line 90, in <module>
    from gettext import gettext, ngettext
    File "/usr/lib/python3.11/gettext.py", line 1

    Fehler traten auf beim Bearbeiten von:

    Code
    /tmp/apt-dpkg-install-r0lPoz/123-python3-jinja2_3.1.2-1+deb12u3_all.deb
    /tmp/apt-dpkg-install-r0lPoz/124-python3-libcamera_0.5.2+rpt20250903-1~bpo12+1_arm64.deb
    /tmp/apt-dpkg-install-r0lPoz/125-python3-picamera2_0.3.31-1_all.deb
    /tmp/apt-dpkg-install-r0lPoz/126-python3-setuptools_66.1.1-1+deb12u2_all.deb
    /tmp/apt-dpkg-install-r0lPoz/127-python3-pkg-resources_66.1.1-1+deb12u2_all.deb
    /tmp/apt-dpkg-install-r0lPoz/129-python3-urllib3_1.26.12-1+deb12u3_all.deb
    /tmp/apt-dpkg-install-r0lPoz/130-python3-zipp_1.0.0-6+deb12u1_all.deb
    E: Sub-process /usr/bin/dpkg returned an error code (1)

    Was nun, der Ansatz hier aus dem Forum war kein Erfolg.

    Sascha100977
    February 16, 2025 at 9:10 PM

    Mein neuer Ansatz in der alten Datei(python3.11) war nur eine lange Zeile mit ÿÿ Zeichen zu sehen.
    Also verschieben und mit einer neuen Datei(python3.14) von Arch Linux zu Testen. Datei mit Filezilla auf den RasPi kopiert.

    Code
    ls -la /usr/lib/python3.11/gettext.py
    -rw-r--r-- 1 root root 5684 30. Nov 2024 /usr/lib/python3.11/gettext.py
    less /usr/lib/python3.11/gettext.py
    sudo mv /usr/lib/python3.11/gettext.py /home/louis/gettext.py.old
    
    ls -la /usr/lib/python3.14/gettext.py
    -rw-r--r-- 1 root root 21595 2. Jan 15:27 /usr/lib/python3.14/gettext.py
    sudo cp gettext.py /usr/lib/python3.11/
    ls -la /usr/lib/python3.11/gettext.py
    -rw-r--r-- 1 root root 21595 3. Feb 20:11 /usr/lib/python3.11/gettext.py

    Nach den folgenden Schritten lief das Update ohne Fehler durch, der Kernel nun 6.12.62+rpt-rpi-v8

    Code
    sudo apt update
    apt list --upgradable
    sudo apt upgrade

    Hallo
    Sollte trixi soviel anders als bookworm sein, hier die Abfragen von meinem RasPi4

    Hallo
    Auf meinen RasPi 4 mit VERSION="12 (bookworm)" läuft pipewire für die Audio Ausgabe ob das bei 13 Trixi auch so ist kann ich nicht sagen.
    Versuch doch mal diese Abfragen bei socket und service sollte dann "pipewire-pulse.socket - PipeWire PulseAudio" stehen.

    Code
    systemctl --user status pipewire-pulse.socket
    systemctl --user status pipewire-pulse.service
    systemctl --user status wireplumber.service

    Um das Problem weiter einzugrenzen könnten diese Abfragen helfen.

    Code
    wpctl status
    wpctl inspect xx
    pactl info
    pw-top
    pw-cli i xx
    pw-cli lr
    pw-cli ls
    pw-play SONNE.mp3

    Hallo
    In #1 hatte ich ja geschrieben Shell-Skripte nach C ”portieren” zu wollen, was zu der verkleideten Version in #1 geführt hat.
    Deine Version mit dem execlp gefällt mir auch viel besser.
    Der Link zu lcdi2c ist ein Volltreffer, leider kann mit dem aktuellen BookwormOS das alte Makefile nicht benutzt werden.
    Der Hinweis die Funktionen aus dem lcdi2c Programm zu nutzen ist gut, das werde ich Versuchen.
    Danke für die vielen Tips und Hinweise.

    Hallo
    Noch eine Frage an die Experten.
    Ein 24x2 LCD Display im Raspberry wird für diverse Anzeigen benutzt. Das Programm lcdi2c liegt unter /usr/local/bin/
    Der Aufruf mit system() ist OK, wie kann das mit execlp oder execl ersetzt werden.

    Hallo
    Hier die Meldung ein Beispiel sollte ja OK sein.

    Hallo
    So ist es natürlich auch OK
    Zeile 48: if (status.statusOK != 1) {

    Einige Fragen habe ich noch zb.
    Um "execlp" zu benutzen braucht es die #include <unistd.h> Zeile eine Doku dazu habe ich hier gefunden.

    Linux-UNIX-Programmierung – 7.10 Die exec-Familie

    Laut Doku Blockiert der Aufruf von status = waitForInterrupt2 das Programm bis zum Eintreffen der auslösenden Flanke oder bis zum Ablauf des Timeouts.
    Das ist nach #8 so gewollt oder liege ich hier falsch.

    Um auch die BCM oder Physikalische Nummerierung am Raspberry zu Testen werde ich auch "WPI_PIN_BCM" und "WPI_PIN_PHYS" verwenden.
    wiringPiSetupPinType(WPI_PIN_WPI)

    In der WiringPi Doku gibt es auch einen ISR2 method Test Programm "isr_debounce.c" das konnte nicht Kompiliert werden.
    gcc -o isr_debounce isr_debounce.c -l wiringPi

    Hallo
    Nachdem der Besuch meiner Enkel zu Ende ist, kann ein Test erfolgen.
    Zuvor wurden die folgenden Zeilen geändert, damit der gcc läuft.
    Wird nach dem Start die Taste gedrückt kommt sofort die Fehler Meldung.
    gcc -o pi-shutdown-2 pi-shutdown-2.c -lwiringPi
    08: #define DEBOUNCE_TIME 300 // Mikrosekunden
    35: puts("Kann wiringPi nicht aufsetzen!");
    52: start_timestamp_us = status.timeStamp_us;

    ./pi-shutdown-2
    Raspberry Init mit wiringPi
    Fehler beim warten auf Knopfdruck!

    Der Beitrag beschreibt wie mit einer Taste und einer 2 Farb LED ein Reboot bzw. Poweroff des RasPi angezeigt und eingeleitet wird.
    Nachdem meine alten Bash Scripte mit "cat /sys/class/gpio/gpio14/value" unter Bookworm nicht mehr laufen, wurden die Scripte
    auf C# umgestellt und als Programm pi-shutdown.c mit der WiringPi Library in Version 3.16 Kompiliert.
    Leider steht die WiringPi Library nicht direkt in Raspberry Pi OS zur Verfügung, darum muss sie manuell Installiert werden.
    Die Dokumentation in Deutsch.

    WiringPi/documentation/deutsch/functions.md at master · WiringPi/WiringPi
    The arguably fastest GPIO Library for the Raspberry Pi - WiringPi/WiringPi
    github.com

    Für die aktuellen Raspberry Pi OS Version kann man sich das Debian-Paket für die Architektur armhf (32-Bit) und arm64 (64-Bit) direkt von Git-Hub herunterladen.

    Releases · WiringPi/WiringPi
    The arguably fastest GPIO Library for the Raspberry Pi - WiringPi/WiringPi
    github.com

    Die Installation auf einen Raspberry 2 Model B, Revision: 02, Memory: 512MB

    sudo apt install git
    git clone https://github.com/WiringPi/WiringPi.git
    cd WiringPi
    ./build debian
    mv debian-template/wiringpi_3.16_armhf.deb .
    sudo apt install ./wiringpi_3.16_armhf.deb

    Einige Abfragen und Kontrollen nach der Installation.

    apt search wiringpi
    wiringpi/now 3.16 armhf  [Installiert,lokal]
    gpio -h
    gpio readall
    gpio i2cd
    gpio -v

    Der Programm Ablauf in Kurzform.
    Physical Pin 11 = GPIO 17 als Eingang nutzen, der wird zum Erkennen ob ein Poweroff oder Reboot des RasPi erfolgen soll benutzt.
    Physical Pin 13 = GPIO 27 als Ausgang nutzen, zur Zustand Anzeige mit einer 2 Farb LED auf einer Zusatz Platine.
    Beim Start bzw. Hochlauf des RasPi leuchtet die 2 Farb LED diffus Gelb je nach Blickwinkel.
    Nach dem Start von pi-shutdown leuchtet die 2 Farb LED Grün.
    Die Reset Taste wird für ca. 1 Sec. gedrückt der Eingang Pin 11 erkennt LOW, damit wird ein Reboot des RasPi eingeleitet die LED wechselt von Grün auf Rot 3 mal mit 0.5 Sek. Pause
    Die Reset Taste wird für ca. 3 Sec. gedrückt der Eingang Pin 11 erkennt LOW, damit wird ein Poweroff des RasPi eingeleitet die LED wechselt von Grün auf Rot 3 mal mit 1.5 Sek. Pause
    Nach dem Reboot bzw. Poweroff leuchtet die 2 Farb LED Rot, wenn wieder Diffus Gelb ist ein Ping(Reboot) möglich oder das NT(Poweroff) kann ausgeschalten werden.<br>

    Hier der Schaltplan der Zusatz Platine zur Ansteuerung der 2 Frab LED.

    Das Programm pi-shutdown.c wird mit den folgenden Zeilen Kompiliert, verschoben und gestartet.

    gcc -o pi-shutdown pi-shutdown.c -lwiringPi
    sudo mv pi-shutdown /usr/local/bin/
    pi-shutdown 

    Hier das Programm pi-shutdown.c

    #include <wiringPi.h> // Benoetigte wiringPi-Library in Vers. 3.16
    #include <stdio.h> // Deklariert eine Menge grundlegender Funktionen, Makros und Typen für die Ein/Ausgabe zb. *fopen
    #include <stdlib.h> // Ein Sammelsurium von Funktionen zb. atoi
    #include <time.h>

    #define pih "sudo systemctl poweroff"
    #define pir "sudo systemctl reboot"

    #define Stop_Pin 0 // wiringPi-Pin 0 = GPIO.0 = Physical Pin 11 = BCM Pin 17 -> vom Optokoppler der Auswerteschaltung
    #define LED_Pin 2 // wiringPi-Pin 2 = GPIO.2 = Physical Pin 13 = BCM Pin 27 -> die 2-Farb LED mit Auswerteschaltung

    int zi, zr, zh, val;

    void init()
    {
    printf("Raspberry Init mit wiringPi\n");
    if(wiringPiSetup() == -1) // wiringPi initialisieren
    exit (EXIT_FAILURE); // Fehler? -> Programmende
    pinMode(Stop_Pin, INPUT); // Physical Pin 11 als Eingang nutzen das wird zum Halt bzw. Reboot des RasPi benutzt.
    pinMode(LED_Pin, OUTPUT); // Physical Pin 13 als Ausgang nutzen das ist die 2 Farb LED auf der Zusatz Platine.
    }


    void anhalten()
    {
    while(1)
    {
    val = digitalRead(Stop_Pin); // Stop Pin lesen
    if (val == 0) { // if 1 Wenn die Reset Taste auf 0 gleich LOW/GND gezogen wurde also gedrückt wurde
    for (zi=0; zi<=9; zi++) { // Dann starte die Zählschleife zi bei 0 und gehe bis 9
    delay(500);
    val = digitalRead(Stop_Pin);
    if ((zi >=0 ) && (zi <= 1) && (val == 1)) { // if 2 Wenn zi >=0 und zi <=1 und der Wert von val=Stop_Pin == 1/HIGH Reset Taste wieder offen also NICHT gedrückt dann
    for (zr=1; zr<=3; zr++) { // starte den reboot Zähler zr und setze 3 mal für je 0.5 Sek. die LED auf grün bzw. rot
    digitalWrite(LED_Pin, LOW); // den LED_Pin auf an = 2-Farb LED ist grün.
    delay(500);
    digitalWrite(LED_Pin, HIGH); // den LED_Pin auf aus = 2-Farb LED ist rot.
    delay(500);
    } // Ende von zr for
    delay(500);
    system(pir); // Reboot starten
    } // Ende von if 2
    else if ((zi >=2 ) && (zi <= 5) && (val == 1)) { // Wenn zi >=2 und zi <=5 und der Wert von val=Stop_Pin == 1/HIGH Reset Taste wieder offen also NICHT gedrückt dann
    for (zh=1; zh<=3; zh++) { // starte den halt Zähler zh und setze 3 mal für je 1.5 Sek. die LED auf grün bzw. rot
    digitalWrite(LED_Pin, LOW); // den LED_Pin auf an = 2-Farb LED ist grün.
    delay(1500);
    digitalWrite(LED_Pin, HIGH); // den LED_Pin auf aus = 2-Farb LED ist rot.
    delay(1500);
    } // Ende von zh for
    delay(500);
    system(pih); // Poweroff starten
    } // Ende von else if
    } // Ende von zi for
    } // Ende von if 1
    } // Ende while
    } // Ende Funktion

    int main()
    {
    init(); // Bei Bedarf mit LCD Display Init
    anhalten(); // Ersetzt das ta_shutdown Bash Script
    } // Ende main