Raspberry Pi Zero mit Ubuntu-artigem Yocto-gcc mit libusb

Was du machen willst

Führen Sie das Yocto-Projekt auf dem Raspberry Pi Zero WH aus. Sie können Wi-Fi verwenden, Sie können gcc verwenden und Sie können USB mit libusb steuern. Ich bezog mich auf verschiedene Informationen, aber ich war hier und da in Schwierigkeiten. Jetzt, wo es endlich funktioniert, werde ich zusammenfassen, was ich getan habe.

Es sieht so aus, wenn ich es in ein Diagramm schreibe. linux_Yocto概要(一般).PNG

Umgebung

Ungefähr wie in der obigen Abbildung gezeigt.

Auf der Host-PC-Seite

Die Zielseite

Yocto Projecto wird also 3.1 (Dunfell) verwenden. Ich benutze Dunfell, weil es kurz vor dem Veröffentlichungsdatum von Ubuntu 20.04.1 liegt.

Ubuntu sind ca. 128 GB virtuelle Festplatte zugeordnet. Selbst mit 64 GB denke ich, dass das, was danach geschrieben wird, in letzter Minute erledigt werden kann. Bei 32 GB konnte DiskFull nicht erstellt werden. Bitte seien Sie vorsichtig.

Referenzmaterial

https://blog.web.nifty.com/engineer/1040 Ich habe dies als Referenz verwendet. Ich mache fast den gleichen Fluss wie hier. Es unterscheidet sich hier und da aufgrund der unterschiedlichen Version und des Pakets, das Sie einfügen möchten.

Erstellen Sie eine Yocto-Umgebung

Es wird davon ausgegangen, dass Virtual Box 6.1 auf dem Windows 10-PC installiert ist und Ubuntu 20.04.1 ausgeführt wird. Ich werde die Umgebung bisher nicht im Detail erklären.

Installation der für die Yocto-Umgebung erforderlichen Pakete

Installieren Sie unter Bezugnahme auf diesen Artikel.

$ sudo apt-get install sed wget subversion git-core coreutils unzip texi2html texinfo libsdl1.2-dev docbook-utils fop gawk python-pysqlite2 diffstat make gcc build-essential xsltproc g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev autoconf automake groff libtool xterm libxml-parser-perl

Ich habe das Gefühl, dass das nicht genug war. Ich werde es hinzufügen, wenn ich mich erinnere.

Bringen Sie Poky mit und bereiten Sie die Build-Umgebung vor

Es ist wie in yocto / rpi0 in Ihrem Home-Verzeichnis zu arbeiten. Dieser Bereich ist Ihre Wahl. Bringen Sie den Dunfell-Zweig von Poky und Meta-Himbeerpi.

$ mkdir yocto
$ cd yocto
$ mkdir rpi0
$ cd rpi0
$ git clone git://git.yoctoproject.org/poky.git -b dunfell
$ cd poky
$ git clone git://git.yoctoproject.org/meta-raspberrypi -b dunfell
$ source oe-init-build-env ../build

Wenn der Befehl erfolgreich ist, wird das Erstellungsverzeichnis erstellt und Sie werden dorthin verschoben.

Ebene bearbeiten

Ich bringe Meta-Openembedded und Meta-Linaro. Verzweigen Sie bei Dunfell, um oben zu passen. Ich habe Meta-Linaro mit der Absicht gebracht, GCC-Linaro zu machen, aber ich habe es nicht wirklich benutzt. Vielleicht funktioniert es danach ohne. Ich habe es jedoch nicht ohne Meta-Linaro bestätigt, daher werde ich es vorerst hier lassen.

$ cd ../poky
$ git clone git://git.openembedded.org/meta-openembedded -b dunfell
$ git clone git://git.linaro.org/openembedded/meta-linaro.git -b dunfell
$ cd ../build
$ nano conf/bblayers.conf

Ich benutze es oft mit Raspberry Pi, also ist es eine Nano-Gruppe. Fügen Sie bblayers.conf meta-openembedded-Serien und meta-raspberrypi hinzu.

bblayers.conf


# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /home/mine/yocto/rpi0/poky/meta \
  /home/mine/yocto/rpi0/poky/meta-poky \
  /home/mine/yocto/rpi0/poky/meta-yocto-bsp \
  /home/mine/yocto/rpi0/poky/meta-openembedded/meta-oe \
  /home/mine/yocto/rpi0/poky/meta-openembedded/meta-networking \
  /home/mine/yocto/rpi0/poky/meta-openembedded/meta-perl \
  /home/mine/yocto/rpi0/poky/meta-openembedded/meta-python \
  /home/mine/yocto/rpi0/poky/meta-raspberrypi \
  "

Bearbeiten Sie die Datei local.conf und fügen Sie Pakete hinzu

Bearbeiten der local.conf

$ nano conf/local.conf

Als Referenz wird fast so kopiert, wie es ist. Die Unterschiede werden unten erklärt. Ich habe diese oben in local.conf hinzugefügt und die anderen auf ihren Standardeinstellungen belassen. dl_dir ?= "${topdir}/downloads"Leitung ist nicht kommentiert und aktiviert.

local.conf


# machine setting
MACHINE = "raspberrypi0-wifi"

DISTRO_FEATURES_append = " bluez5"
COMBINED_FEATURES_append = " alsa ext2 usb-gadget usbhost wifi bluetooth"

# images
IMAGE_INSTALL_append = " linux-firmware-bcm43430 connman connman-client pulseaudio pulseaudio-server usbutils sudo "
IMAGE_INSTALL_append = " libusb-compat libusb-compat-dev libusb1 nano net-tools bash libjpeg-turbo libjpeg-turbo-dev tiff "
IMAGE_FEATURES_append = " ssh-server-dropbear"
EXTRA_IMAGE_FEATURES_append = " tools-sdk "
 
# use systemd
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES_append = " systemd"
 
# host setup
hostname_pn-base-files = "yoctopi"
INHERIT_append = " extrausers"
EXTRA_USERS_PARAMS = "useradd -P raspberry pi;usermod -P raspberry root;"

Endlich bauen

Bauen

Erstellen Sie mit dem Befehl bitbake im Erstellungsverzeichnis. Ich habe auf verschiedenen Websites geschrieben, um mit "$ bitbake rpi-hwup-image" zu erstellen, aber als ich es versuchte, erhielt ich eine Warnung wie "rpi-hwup-image is veraltet". Der neue scheint "Core-Image-Base" zu verwenden.

$ bitbake core-image-base

Warten Sie in meiner Umgebung etwa 8 Stunden. .. Bei Erfolg haben Sie eine Datei in "build / tmp / deploy / images / raspberrypi0-wifi /". Es scheint, dass es in der alten Umgebung eine Datei mit der Erweiterung .rpi-sdimg gibt, aber es scheint, dass sie ab einem bestimmten Zeitpunkt nicht mehr standardmäßig erstellt werden kann (es scheint, dass sie je nach Einstellung erstellt werden kann).

Also verwende ich eine Datei mit einem Namen wie "core-image-base-raspberrypi0-wifi-YYYYMMDDhhmmss.rootfs.wic.bz2". Enthält YYYYMMDDhhmmss die Startzeit des Builds? Gibt es eine Build-Endzeit? (Es ist mir nicht so wichtig)

Schreiben Sie auf die SD-Karte

Schreiben Sie mit dem Befehl dd aus Ubuntu.

Stecken Sie den USB-Kartenleser in Ihren Windows 10-PC und wählen Sie [Gerät] -> [USB] -> [Geräteähnlicher Name des Kartenlesers] aus dem VirtualBox-Menü, um ihn für Ubuntu sichtbar zu machen. Als ich es mit der App "Disk" überprüft habe, wurde es in meiner Umgebung / dev / sdb zugewiesen. Ich denke, das ist in jeder Umgebung anders.

Ich weiß auch nicht, ob es notwendig oder unnötig ist, aber vorerst initialisiere ich jedes Mal alle Partitionen der SD-Karte, formatiere sie mit ext4 und schreibe sie. Das Schreiben dauert einige Minuten, daher ist es mühsam, von vorne zu beginnen, um Fehler zu vermeiden.

$ cp tmp/deploy/images/raspberrypi0-wifi/core-image-base-raspberrypi0-wifi-YYYYMMDDhhmmss.rootfs.wic.bz2 [Irgendwo geeignetes Verzeichnis]
$ cd [Irgendwo geeignetes Verzeichnis]
$ bunzip2 core-image-base-raspberrypi0-wifi-YYYYMMDDhhmmss.rootfs.wic.bz2
$ sudo dd if=core-image-base-raspberrypi0-wifi-YYYYMMDDhhmmss.rootfs.wic of=/dev/sdb bs=1M

Ich habe Angst, wenn etwas Seltsames passiert, also kopiere ich es in ein geeignetes Verzeichnis und arbeite daran. Es scheint, dass Sie die .wic.bz2-Datei mit bunzip2 extrahieren und wie mit dem Befehl dd auf die SD-Karte schreiben können.

Ich werde es endlich bewegen

Legen Sie die SD-Karte mit Yocto in Raspberry Pi Zero WH ein, schließen Sie HDMI und Tastatur an und schalten Sie das Gerät ein.

Starten Sie über den Regenbogenbildschirm, der Raspi-Benutzern vertraut ist. Dann kam eine Startmeldung heraus ...

yoctopi login:

Wenn die Nachricht herauskommt, ist es ein Erfolg. Sie können sich als pi-Benutzer oder root anmelden und es so oft verwenden, wie Sie möchten.

Versuchen Sie es vorerst mit gcc

Ist es so

$ nano hoge.c

hoge.c


#include <stdio.h>

int main()
{
    printf("hogehoge!\n");
    return 0;
}
$ gcc hoge.c -o hoge
$ ./hoge
hogehoge!

Ich werde nicht "Hallo Welt!" Oh, es war ein alphabetisches Tastaturlayout im Standardzustand. Wenn Sie eine japanische Tastatur anschließen, werden Sie durch die Eingabe von Symbolen verwirrt.

libusb test

$ nano testUsb.c

testUsb.c


#include <stdio.h>
#include <usb.h>

int main()
{
    usb_init();
    printf("usb_init(): OK\n");
    return 0;
}
$ gcc testUsb.c -o testUsb -lusb
$ ./testUsb
usb_init(): OK

Es war nichts in Ordnung, aber wenn Sie ohne -lusb erstellen, wird ein Linkfehler angezeigt, da kein usb_init () vorhanden ist. Libusb scheint also so zu funktionieren, wie es ist.

Versuchen Sie, eine Verbindung zu Wi-Fi herzustellen

Ich habe connman in die Bearbeitung von local.conf aufgenommen, also verbinden wir es mit Wi-Fi. So was.

$ connmanctl
connmanctl> technologies
connmanctl> enable wifi
connmanctl> scan wifi
connmanctl> services
[Viele gescannte Zugangspunkte werden ausgegeben]
connmanctl> agent on
connmanctl> connect [Geben Sie einen der gescannten Zugangspunkte ein]
  Passphrase? [Geben Sie die Passphrase ein]
connmanctl> quit

Wenn Sie eine Verbindung zu einem offenen Zugangspunkt herstellen, benötigen Sie keinen "Agenten an". Wenn Sie damit eine Verbindung zum Access Point herstellen, können Sie auch von einem PC im LAN aus eine Verbindung zu SSH herstellen. Es scheint, dass die Einstellungen des Zugriffspunkts, der einmal verbunden war, irgendwo gespeichert wurden und ab dem nächsten Mal ohne Erlaubnis verbunden wurden.

Zusammenfassung

Derzeit läuft Yocto Project 3.1 (Dunnfell) auf Raspberry Pi Zero WH. Es scheint, dass Sie verschiedene Dinge tun können, weil es mit Wi-Fi verbunden ist und die C-Sprache funktioniert, aber in Wirklichkeit ist es unentschlossen, was zu verwenden ist.

Mit den hier eingeführten Einstellungen sollten Perl und Python funktionieren, aber Perl funktionierte und Python nicht. Wir untersuchen, was falsch ist, aber wenn jemand weiß, wie Python funktioniert, lassen Sie es mich bitte wissen.

Recommended Posts

Raspberry Pi Zero mit Ubuntu-artigem Yocto-gcc mit libusb
Finden Sie Raspberry Pi von Android mit mDNS
Ich konnte Docker nicht mit Himbeer pi2 b + installieren.
Wie man javafx mit Raspeye ausführt veröffentlicht am 12.07.2020
Zeigen Sie Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an
Lesen Sie Temperatur / Luftfeuchtigkeit von Raspberry Pi 3 & DHT11 mit Java ab