Przewodnik po projekcie Yocto o otwartym kodzie źródłowym
Przewodnik po projekcie Yocto o otwartym kodzie źródłowym dla niestandardowego systemu Linux na Raspberry Pi ze wskazówkami dotyczącymi konfiguracji platformy Docker
Zanurz się w projekcie Yocto, aby uzyskać niestandardowe systemy Linux na dowolnym sprzęcie. Idealny dla programistów i entuzjastów systemów wbudowanych . Zacznij budować już teraz!
Zapoznaj się z projektem Yocto, inicjatywą typu open source służącą do tworzenia niestandardowych systemów Linux dla dowolnej architektury sprzętowej. Dowiedz się, jak używać CROPS do programowania międzyplatformowego, konfigurować kontenery platformy Docker i tworzyć dostosowane obrazy systemu Linux dla urządzeń osadzonych i IoT. Nasz przewodnik obejmuje konfigurację w systemie macOS, konfigurowanie środowisk kompilacji i optymalizację pod kątem Raspberry Pi. Niezależnie od tego, czy jesteś początkującym, czy ekspertem, znajdź najlepsze rozwiązania, narzędzia i wsparcie społeczności dla swoich potrzeb związanych z projektem Linux.
Yocto uruchomiony w kontenerze dockera
W dokumentach Yocto znajduje się rozdział (2.2.2) dotyczący tworzenia platform CROss (CROPS) jako alternatywy dla tworzenia natywnego komputera z linuksem.Ta alternatywa wykorzystuje kontener dockera do budowania niestandardowego obrazu systemu, np. dla Raspberry Pi.
Niestety w dokumentacji dotyczącej konfiguracji tego środowiska w systemie Mac OS X (Monterey) są drobne błędy.### Konfiguracja kontenera docker dla Mac OS X
Aby używać dockera CROPS w systemach Linux, Windows i Mac OS X, potrzebne są specjalne ustawienia. Przed skonfigurowaniem kontenera dla Yocto należy utworzyć wolumin dockera, aby zapisać w nim wyniki. Do dostarczania plików w systemie Mac OS X służy również kontener samba dockera.
Utwórz wolumin dockera
W oknie terminala wpisz następujące polecenia:
docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir
Utwórz i uruchom kontener samba
OSX nie pozwoli na połączenie z lokalnie udostępnianą sambą. Dlatego najpierw należy utworzyć alias dla 127.0.0.1 z 127.0.0.2.
sudo ifconfig lo0 127.0.0.2 alias up
Następnie utwórz kontener samby, który pozwala zobaczyć pliki w woluminie dockera:
docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba
Ponieważ zawsze musisz mieć alias, aby połączyć się z kontenerem samby, możesz połączyć początek samby z aliasem w następujący sposób:
docker start samba && sudo ifconfig lo0 127.0.0.2 alias up
Teraz możesz otworzyć workdir w przeglądarce plików. W wyszukiwarce naciśnij „Command-K”, a w polu adresu serwera wpisz „smb://127.0.0.2/workdir” i kliknij „Połącz”. Teraz powinieneś zobaczyć zawartość woluminu dockera w wyszukiwarce.
Tworzenie i uruchamianie kontenera Yocto
Aby utworzyć i/lub uruchomić kontener Yocto, wpisz w oknie terminala:
docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir
Konfiguracja środowiska testowego w kontenerze
Po uruchomieniu kontenera dockera pojawia się komunikat terminala, który wygląda następująco: „pokyuser@d4ddfe042587:/workdir”.
Teraz możesz skonfigurować środowisko testowe.
Klonuj wersję poky
W moim przypadku używam wersji Yocto 3.4 o nazwie „Honister” ponieważ warstwy meta-raspberry nie są obecnie dostępne dla nowszych wersji poky. Jeśli robisz to po raz pierwszy, musisz sklonować repozytorium poky:
git clone -b honister git://git.yoctoproject.org/poky poky-honister
Jeśli chcesz zaktualizować poky do najnowszej wersji:
cd poky-honister
git pull --all --prune
Dodatkowe meta warstwy dla Raspberry Pi
Zmień na „poky-honister” i sklonuj następujące repozytoria: meta-raspberry, meta-openembedded i w razie potrzeby meta-qt5
cd poky-honister
git clone -b honister git://git.yoctoproject.org/meta-raspberrypi
git clone -b honister git://git.openembedded.org/meta-openembedded
git clone -b honister https://github.com/meta-qt5/meta-qt5.git
Konfiguracja kompilacji konfiguracji
Opuść katalog poky-honister, aby znaleźć się w katalogu /workdir. Teraz pobierz środowisko testowe za pomocą skryptu oe-init-build-env.
cd ..
source poky-honister/oe-init-build-env rpi-build
Zostanie utworzony nowy katalog „rpi-build” - możesz go nazwać jak chcesz - oraz katalog konfiguracyjny z plikami bblayers.conf, local.conf i templateconf.cfg.
Ponieważ w kontenerze nie ma zainstalowanego edytora tekstu, należy albo edytować pliki konfiguracyjne w zamontowanym woluminie samby w systemie Mac OS X, albo zainstalować edytor tekstu w kontenerze. Aby to zrobić, musisz otworzyć drugie okno terminala - podczas gdy kontener yocto jest uruchomiony - i uruchomić powłokę bash w kontenerze z uprawnieniami roota:
docker exec -it --user=root crops-poky bash
apt-get install nano
exit
Następnie możesz edytować pliki konfiguracyjne w kontenerze yocto jako pokyuser.
Uwaga
Edytor nie jest zainstalowany na stałe. Po opuszczeniu kontenera i ponownym wejściu należy go ponownie zainstalować
Najpierw dodaj meta-raspberry do pliku bblayers.conf
nano conf/bblayers.conf
Dodaj „/workdir/poky-honister/meta-raspberrypi \”, aby wyglądał jak
BBLAYERS ?= " \
/workdir/poky-honister/meta \
/workdir/poky-honister/meta-poky \
/workdir/poky-honister/meta-yocto-bsp \
/workdir/poky-honister/meta-raspberrypi \
"
i zapisz go.
Druga edycja pliku local.conf
Edytuj plik local.conf:
nano conf/local.conf
Zmień następujące wiersze:
- MACHINE ??= "qemux86-64" -> MACHINE ??= "raspberrypi4-64"
W zależności od tego, której wersji Raspberry chcesz użyć (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, itp.)
odkomentuj następujące wiersze:
- DL_DIR ?= "${TOPDIR}/downloads"
- SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
- TMPDIR = "${TOPDIR}/tmp"
Dodaj następujące wiersze na końcu, aby sdimg zainstalował się na karcie SD:
- IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
- SDIMG_ROOTFS_TYPE = "ext4.xz"
Zapisz plik local.conf.
Wygeneruj pierwszy obraz za pomocą Bitbake
Teraz masz minimalne ustawienia do zbudowania pierwszego obrazu:
bitbake -k core-image-minimal
W dokumentacji Yocto znajdziesz krótki opis dostępnych opisów obrazów.Na przykład:
- core-image-minimal: Mały obraz umożliwiający uruchomienie urządzenia.
- core-image-base: Obraz samej konsoli, który w pełni obsługuje sprzęt urządzenia docelowego.
- core-image-full-cmdline: Obraz samej konsoli z zainstalowaną pełniejszą funkcjonalnością systemu Linux.
Po chwili - która przy pierwszym podejściu może trwać kilka godzin - bitbake kończy pracę i plik sdimg znajduje się w następującym katalogu:
/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64
Dodatkowe konfiguracje
Dodatkowe konfiguracje sprzętu Raspberry
Aby ustawić określone ustawienia sprzętowe, możesz zajrzeć do extra-apps.md i extra-build-config.md.Pliki te znajdują się również w katalogu meta-raspberrypi/docs.
Warstwa meta zapewnia również konfigurację obrazu „rpi-test-image” do użycia z bitbake. Obraz jest oparty na "core-image-base", który zawiera większość pakietów w meta-raspberrypi i niektóre próbki mediów.
bitbake -k rpi-test-image
Dodatkowe konfiguracje oprogramowania
W zależności od używanej konfiguracji budowania obrazu może być konieczne zainstalowanie dodatkowych pakietów oprogramowania.
Możesz to zrobić, dodając niektóre ustawienia do pliku local.conf.
Na przykład możesz dodać następujące wiersze, aby ustawić ssh-server, pi-user i systemd:
## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"
## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME:init_manager = "systemd"
VIRTUAL-RUNTIME:initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES:append = " systemd"
Lub dodać python:
IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"
Uwaga
Spacja początkowa w „ python3 python3-pip rpi-gpio raspi-gpio” jest ważna, ponieważ tekst jest dołączany do istniejącej konfiguracji i musi być oddzielony tą spacją.
Licencja na prawa autorskie
Copyright © 2022 Interelectronix e.K.
Ten kod źródłowy projektu jest udostępniany na licencji **GPL-3.0 * *.
Podziękowania
Źródła użyte do utworzenia niniejszej Instrukcji:
https://docs.yoctoproject.org/index.html
Dziękujemy wszystkim.