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.
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.
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.
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.
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.
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.
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 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;"
MACHINE
Dieses Mal habe ich mit Raspberry Pi Zero WH nachgefragt, also habe ich raspberrypi0-wifi
angegeben. raspberrypi
, raspberrypi0
, raspberrypi0-wifi
, raspberrypi2
, raspberrypi3
, raspberrypi3-64
, raspberrypi-cm
, raspberrypi-cm3
Es scheint verschiedene Definitionen zu geben (unbestätigt).usbgadget
von COMBINED_FEATURES_append
unverändert bleibt, tritt ein Buildfehler auf. Ich bin der Meinung, dass diese Art des Schreibens korrekt ist, egal welches Material ich betrachte, aber in seltenen Fällen sagen Websites in Übersee "USB-Gadget", und wenn ich versuche, es mit dem Gefühl zu schreiben, am Strohhalm festzuhalten, verschwindet der Fehler. Es war. Ich weiß nicht, ob es richtig ist. Hat sich der Name geändert?IMAGE_INSTALL_append
hinzugefügt. Ich bin mir nicht sicher, ob Net-Tools funktioniert haben. Ich habe vorerst Bash hinzugefügt, aber ich habe es nicht benutzt.EXTRA_USERS_PARAMS
Ich habe keine Lust, mich mit dem Internet zu verbinden, daher ist die Sicherheit minimal. Das Root-Passwort lautet ebenfalls "Himbeere". Wenn jemand es kopieren möchte, sei vorsichtig.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 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.
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.
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.
$ 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.
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.
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