Raspberry Pi Zero avec Yocto-gcc de style Ubuntu avec libusb

Chose que tu veux faire

Exécutez le projet Yocto sur le Raspberry Pi Zero WH. Vous pouvez utiliser le Wi-Fi, vous pouvez utiliser gcc et vous pouvez contrôler l'USB avec libusb. J'ai évoqué diverses informations, mais j'avais des problèmes ici et là. Maintenant que ça marche enfin, je vais résumer ce que j'ai fait.

Cela ressemble à ceci lorsque je l'écris dans un diagramme. linux_Yocto概要(一般).PNG

environnement

À peu près comme le montre la figure ci-dessus.

Du côté du PC hôte

Le côté cible

Ainsi, Yocto Projecto utilisera 3.1 (Dunfell). J'utilise Dunfell car il est proche de la date de sortie d'Ubuntu 20.04.1.

Environ 128 Go de disque dur virtuel sont alloués à Ubuntu. Même avec 64 Go, je pense que ce qui est écrit après cela peut être fait à la dernière minute. À 32 Go, DiskFull n'a pas pu être généré. S'il vous plaît soyez prudente.

Matériel de référence

https://blog.web.nifty.com/engineer/1040 Je l'ai utilisé comme référence. Je fais presque le même flux qu'ici. Cela diffère ici et là en raison de la différence de version et du package que vous souhaitez mettre.

Créer un environnement Yocto

Il est supposé que Virtual Box 6.1 est installé sur le PC Windows10 et Ubuntu 20.04.1 est en cours d'exécution. Je n'expliquerai pas l'environnement jusqu'ici en détail.

Installation des packages requis pour l'environnement Yocto

Installez en vous référant à cet article

$ 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

Je pense que ce n'était pas suffisant. Je vais l'ajouter si je me souviens.

Apportez Poky et préparez l'environnement de construction

C'est comme travailler dans yocto / rpi0 dans votre répertoire personnel. Cette zone est votre choix. Apportez la branche Dunfell de Poky et de meta-raspberrypi.

$ 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

Si la commande réussit, le répertoire de construction sera créé et vous y serez déplacé.

Modifier le calque

J'apporte meta-openembedded et meta-linaro. Branche à Dunfell pour s'adapter au-dessus. J'ai apporté meta-linaro avec l'intention de faire gcc linaro, mais je ne l'ai pas vraiment utilisé. Peut-être que cela fonctionnera après cela sans cela. Cependant, je ne l'ai pas confirmé sans meta-linaro, je vais donc le laisser ici pour le moment.

$ 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

Je l'utilise souvent avec Raspberry Pi, c'est donc un groupe nano. Ajoutez des séries meta-openembedded et meta-raspberrypi à bblayers.conf.

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 \
  "

éditez local.conf et ajoutez des packages

Modification de local.conf

$ nano conf/local.conf

Pour référence est copié presque tel quel. Les différences sont expliquées ci-dessous. J'ai ajouté ceux-ci en haut de local.conf et laissé les autres à leurs valeurs par défaut. dl_dir ?= "${topdir}/downloads"La ligne n'est pas commentée et activée.

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;"

Enfin construire

Construire

Construisez avec la commande bitbake dans le répertoire de construction. J'ai écrit sur différents sites pour construire avec $ bitbake rpi-hwup-image, mais quand je l'ai essayé, j'ai reçu un avertissement comme" rpi-hwup-image est obsolète ". Le nouveau semble utiliser core-image-base.

$ bitbake core-image-base

Dans mon environnement, attendez environ 8 heures. .. En cas de succès, vous aurez un fichier dans build / tmp / deploy / images / raspberrypi0-wifi /. Il semble qu'il existe un fichier avec l'extension .rpi-sdimg dans l'ancien environnement, mais il semble qu'il ne puisse pas être créé par défaut depuis un certain temps (il semble qu'il puisse être créé en fonction du réglage).

Donc, j'utilise un fichier avec un nom comme core-image-base-raspberrypi0-wifi-YYYYMMDDhhmmss.rootfs.wic.bz2. YYYYMMDDhhmmss contient-il l'heure de début de la construction? Y a-t-il une heure de fin de construction? (Je m'en fous trop)

Écrire sur la carte SD

Écrivez depuis Ubuntu avec la commande dd.

Insérez le lecteur de carte USB dans votre PC Windows 10 et sélectionnez [Device] -> [USB] -> [Card reader device-like name] dans le menu VirtualBox pour le rendre visible par Ubuntu. Lorsque je l'ai vérifié avec l'application "Disk", il a été attribué à / dev / sdb dans mon environnement. Je pense que c'est différent dans chaque environnement.

De plus, je ne sais pas si c'est nécessaire ou inutile, mais pour le moment, j'initialise toutes les partitions de la carte SD à chaque fois, la formate avec ext4 et l'écris. L'écriture prend quelques minutes, il est donc difficile de recommencer, afin d'éviter tout échec.

$ cp tmp/deploy/images/raspberrypi0-wifi/core-image-base-raspberrypi0-wifi-YYYYMMDDhhmmss.rootfs.wic.bz2 [Répertoire quelque part approprié]
$ cd [Répertoire quelque part approprié]
$ 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

J'ai peur quand quelque chose d'étrange se produit, alors je le copie dans un répertoire approprié et je travaille dessus. Il semble que vous puissiez extraire le fichier .wic.bz2 avec bunzip2 et l'écrire sur la carte SD tel quel avec la commande dd.

Je vais enfin le déplacer

Insérez la carte SD avec le Yocto écrit dedans dans Raspberry Pi Zero WH, connectez HDMI et le clavier, et allumez l'alimentation.

Lancez depuis l'écran arc-en-ciel familier aux utilisateurs de Raspi. Ensuite, un message de démarrage est sorti ...

yoctopi login:

Si le message sort, c'est un succès. Vous pouvez vous connecter en tant qu'utilisateur pi ou root et l'utiliser autant que vous le souhaitez.

Essayez d'utiliser gcc pour le moment

Est-ce que c'est comme ça?

$ nano hoge.c

hoge.c


#include <stdio.h>

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

Je n'écrirai pas "Hello world!" Oh, c'était une disposition de clavier alphabétique dans l'état par défaut. Si vous connectez un clavier japonais, vous serez confus en tapant des symboles.

test libusb

$ 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

Il n'y avait rien de correct, mais si vous construisez sans -lusb, vous obtiendrez une erreur de lien car il n'y a pas de usb_init (), donc libusb semble fonctionner tel quel.

Essayez de vous connecter au Wi-Fi

J'ai inclus connman dans l'édition de local.conf, alors connectons-le au Wi-Fi. Comme ça.

$ connmanctl
connmanctl> technologies
connmanctl> enable wifi
connmanctl> scan wifi
connmanctl> services
[De nombreux points d'accès scannés sortent]
connmanctl> agent on
connmanctl> connect [Entrez l'un des points d'accès numérisés]
  Passphrase? [Entrez la phrase de passe]
connmanctl> quit

Si vous vous connectez à un point d'accès ouvert, vous n'avez pas besoin de «agent activé». Si vous vous connectez au point d'accès avec cela, vous pouvez également vous connecter à SSH à partir d'un PC sur le LAN. Il semble que les paramètres du point d'accès qui était connecté une fois sont enregistrés quelque part, et à partir de la prochaine fois qu'il a été connecté sans autorisation.

Sommaire

Pour l'instant, Yocto Project 3.1 (Dunnfell) fonctionne sur Raspberry Pi Zero WH. Il semble que vous puissiez faire diverses choses car il est connecté au Wi-Fi et que le langage C fonctionne, mais en réalité, on ne sait pas quoi utiliser.

De plus, avec les paramètres introduits ici, Perl et Python étaient censés fonctionner, mais Perl fonctionnait et Python ne l'était pas. Nous étudions ce qui ne va pas, mais si quelqu'un sait comment faire fonctionner Python, faites-le moi savoir.

Recommended Posts

Raspberry Pi Zero avec Yocto-gcc de style Ubuntu avec libusb
Trouvez Raspberry Pi d'Android avec mDNS
Je n'ai pas pu installer docker avec raspberry pi2 b +.
Comment exécuter javafx avec Raspeye publié le 12/07/2020
Afficher les caractères sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java
Lire la température / l'humidité avec Java de Raspberry Pi 3 & DHT11