Embedded Software Raspberry Pi - Yocto - Raspberry - PIGPIO - Qt ein Screenshot eines Computerprogramms

Yocto – Raspberry – PIGPIO – Qt

Linux mit pigpio-Bibliothek und Qt-Toolchain

BitBake-Recipe pigpio

Recipe für die pigpio-Library erstellen

Für dieses Projekt benötigen wir die pigpio-Library, um mit einer Library auf I2C, SPI und andere GPIOs zugreifen zu können.

Leider haben wir kein recipe dafür in den gängigen Meta-Layern für Yocto gefunden und müssen unsere eigenen erstellen.

„pigpio_git.bb“-recipe

Das Erstellen eines benutzerdefinierten recipe für Yocto ist nicht so schwierig – aber im Detail kann es das sein.

Das Standardverfahren ist, die Quelle zu erhalten und sie mit BitBake zu backen:

DESCRIPTION = "pigpio"
SECTION = "devel/libs"
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = "file://UNLICENCE"

COMPATIBLE_MACHINE = "^rpi$"

SRC_URI = "git://github.com/joan2937/pigpio.git;protocol=https;tag=v79 \
"

S = "${WORKDIR}/git"

inherit pkgconfig cmake

Aber wenn Sie den Prozess „bitbake pigpio“ ausführen, werden einige Fehler auftreten, da keine versionierten Bibliotheken konfiguriert sind und der Speicherort der Manpages-Dateien nicht korrekt gehandhabt wird.

Manpages-Fehler

Zuerst tritt folgender Fehler auf:

ERROR: pigpio-git-r0 do_package: QA Issue: pigpio: Files/directories were installed but not shipped in any package:
  /usr/man
  /usr/man/man1
  ...

Sie können diesen Fehler mit den folgenden Einstellungen beheben:

FILES:${PN}-doc += "\
     /usr/man/man1/pigs.1 \
     /usr/man/man1/pig2vcd.1 \
     /usr/man/man1/pigpiod.1 \
     /usr/man/man3/pigpio.3 \
     /usr/man/man3/pigpiod_if.3 \
     /usr/man/man3/pigpiod_if2.3 \
"

Nicht-Symlink-Fehler

Nachdem der Fehler mit den Manpages behoben wurde, erscheint der nächste Fehler:

ERROR: pigpio-git-r0 do_package_qa: QA Issue: pigpio rdepends on pigpio-dev [dev-deps]
ERROR: pigpio-git-r0 do_package_qa: QA Issue: -dev package pigpio-dev contains non-symlink .so '/usr/lib/libpigpio.so'
-dev package pigpio-dev contains non-symlink .so '/usr/lib/libpigpiod_if2.so'
-dev package pigpio-dev contains non-symlink .so '/usr/lib/libpigpiod_if.so' [dev-elf]

Dies geschieht, weil aus „CMakeLists.txt“ keine versionierten Bibliotheken generiert werden. Um dies zu beheben, fügen wir Folgendes hinzu:

SOLIBS = ".so"
FILES_SOLIBSDEV = ""

Systemd startet automatisch Pigpiod

Um den Pigpio-Daemon automatisch zu starten, fügen wir Folgendes hinzu:

do_install() {
    install -d ${D}${bindir}
    install -d ${D}${libdir}
    install -d ${D}${PYTHON_SITEPACKAGES_DIR}
     
    install -m 0644 ${S}/pigpio.py ${D}${PYTHON_SITEPACKAGES_DIR}

    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${S}/util/pigpiod.service ${D}${systemd_system_unitdir}

    cmake_do_install
}

SYSTEMD_SERVICE:${PN} = "pigpiod.service"

Hinweis

Wenn Sie für die Entwicklung installierte Header-Dateien benötigen, müssen Sie „IMAGE_FEATURES "dev-pkgs“ installieren.

IMAGE_FEATURES += "package-management dev-pkgs doc-pkgs"

Laden Sie das gezippte Meta-Layer mit dem recipe von meta-interelectronix-rpi herunter.

Globale Image-Konfiguration

local.conf-Einstellungen

Laden Sie die gezippten Build-Konfigurationsdateien von rpi4-build herunter.

Schauen Sie sich zuerst die Datei „bblayers.conf“ an. Darin finden Sie die benötigten Meta-Layer. Laden Sie die Meta-Layer herunter, falls Sie dies noch nicht getan haben, und passen Sie Ihre „bblayers.conf“-Datei an.

Zweitens werfen Sie einen Blick auf die Datei „local.conf“.

I2C-Einstellungen

Wenn Sie einen mit I2C verbundenen Sensorchip (z. B. einen Temperatursensor) verwenden möchten, müssen Sie I2C in der Datei „local.conf“ aktivieren.

ENABLE_I2C = "1"
KERNEL_MODULE_AUTOLOAD_rpi += " i2c-dev"

X11 und Wayland entfernen

Es treten viele Fehler im Bitbake-Prozess auf, wenn wir X11 und Wayland vorher nicht entfernen.

In unserem Fall – da wir nicht mehrere Fenster benötigen – entfernen wir sie.

DISTRO_FEATURES:remove = "ptest x11 wayland vulkan directfb"

Um eglfs richtig zu verwenden, fügen wir Folgendes hinzu:

VC4DTBO ?= "vc4-fkms-v3d"

Raspberry-Image mit BitBake backen

Image-Konfigurationsdatei erstellen

In der Datei „rpi4-64-qt5-gpio-image.bb“ definieren wir, welche Pakete wir in unserer Linux-Distribution benötigen. Hier können Sie – wie bereits erwähnt – die „IMAGE_FEATURES dev-pkgs“ einbinden.

Die Datei ist in mehrere Abschnitte unterteilt, wie zum Beispiel DEV-SDK, EXTRA_TOOLS usw., um leicht benötigte Pakete hinzuzufügen.

pigpio-Paket

Dieses Paket wird unter „CUSTOM_STUFF“ hinzugefügt:

CUSTOM_STUFF = " \
    pigpio \
"

# Qt-Pakete

Die für Qt benötigten Pakete werden zu Paketgruppen hinzugefügt und diese Paketgruppen werden hier hinzugefügt:

IMAGE_INSTALL:append += " packagegroup-qt5 packagegroup-qt5-toolchain-target packagegroup-qt5-qtcreator-debug"

Sie können „packagegroup-qt5“ in der Datei „packagegroup-qt5.bb“ finden und Qt-Pakete hinzufügen oder löschen.

Laden Sie das gezippte Meta-Layer mit dem Image von meta-interelectronix-rpi-qt herunter.

Danach können Sie das Image mit Bitbake backen:

bitbake rpi4-64-qt5-gpio-image

BitBake-SDK

SDK-Toolchain erstellen

Wenn Sie eine Qt-Anwendung für diese benutzerdefinierte Linux-Distribution entwickeln möchten, möchten Sie sicherlich eine Cross-Kompilierungs-Toolchain haben, um sie Ihrer QtCreator-Konfiguration hinzuzufügen.

Mit dem folgenden BitBake-Befehl können Sie ganz einfach ein SDK erstellen:

bitbake -c populate_sdk rpi4-64-qt5-gpio-image

Wir haben die Paketgruppen „packagegroup-qt5-toolchain-target packagegroup-qt5-qtcreator-debug“ zur Image-Konfigurationsdatei hinzugefügt.

SDK installieren

Das generierte SDK finden Sie im folgenden Verzeichnis:

/tmp/deploy/sdk

In unserem Fall heißt es „poky-glibc-x86_64-rpi4-64-qt5-gpio-image-cortexa72-raspberrypi4-64-toolchain-3.4.3.sh“.

Diese Datei enthält Setup-Anweisungen und alle erforderlichen Dateien (in einem komprimierten Format).

Kopieren Sie diese Datei auf Ihren Entwicklungsrechner und führen Sie sie aus:

./poky-glibc-x86_64-rpi4-64-qt5-gpio-image-cortexa72-raspberrypi4-64-toolchain-3.4.3.sh

Folgen Sie den Anweisungen, um das SDK zu installieren.

Urheberrechtslizenz

Copyright © 2022 Interelectronix e.K.
Dieser Projekt-Quellcode ist unter der GPL-3.0 Lizenz lizenziert.