Perangkat Lunak Tertanam - Yocto membangun Raspberry Pi 4 tangkapan layar komputer

Yocto membangun Raspberry Pi 4

dalam lingkungan docker

Panduan Proyek Yocto sumber terbuka

tips penyiapan Linux kustom di Raspberry Pi dengan Docker

Panduan Proyek Yocto open source untuk Linux kustom di Raspberry Pi dengan tips penyiapan Docker

Selami Proyek Yocto untuk sistem Linux khusus pada perangkat keras apa pun. Sempurna untuk pengembang dan penggemar sistem tertanam. Mulai bangun sekarang!

Jelajahi Proyek Yocto, inisiatif sumber terbuka untuk membuat sistem Linux khusus untuk arsitektur perangkat keras apa pun. Pelajari cara menggunakan CROPS untuk pengembangan lintas platform, menyiapkan kontainer Docker, dan membuat gambar Linux yang disesuaikan untuk perangkat tertanam dan IoT. Panduan kami mencakup penyiapan di macOS, mengonfigurasi lingkungan build, dan mengoptimalkan untuk Raspberry Pi. Baik Anda seorang pemula atau ahli, temukan praktik terbaik, alat, dan dukungan komunitas untuk kebutuhan proyek Linux Anda.

Yocto bekerja di dalam wadah docker

Dalam dokumen yocto terdapat sebuah bab (2.2.2) untuk menyiapkan CROss PlatformS (CROPS) sebagai alternatif untuk menyiapkan pc linux asli. Alternatif ini menggunakan wadah docker untuk membangun sistem citra yang disesuikan misalnya untuk Raspberry Pi.

Sayangnya bagi saya, ada beberapa kesalahan kecil dalam dokumentasi untuk menyiapkan lingkungan ini di Mac OS X (Monterey).### Penyetelan wadah docker untuk OS Mac X

Untuk menggunakan docker CROP di Linux, Windows, dan Mac OS X, ada beberapa pengaturan khusus yang dibutuhkan. Sebelum menyiapkan wadah untuk Yocto, Anda harus membuat sebuah volume (mekanisme file sistem) docker untuk menyimpan hasilnya. Serta, wadah samba docker digunakan untuk memberikan file-nya di dalam OS Mac X.

Buat volume docker

Di jendela terminal, tuliskan perintah-perintah berikut:

docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir

Buat dan jalankan wadah samba

OSX tidak akan mengizinkan Anda terhubung ke bagian samba yang bekerja secara lokal. Oleh karena itu pertama-tama, Anda harus membuat alias (data objek alternatif) untuk 127.0.0.1 dari 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Kemudian, buat wadah samba, yang memungkinkan Anda untuk melihat file dalam volume docker:

docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba

Karena harus selalu memiliki alias untuk terhubung ke wadah samba, Anda dapat menggabungkan awal samba dan alias seperti ini:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Sekarang Anda dapat membuka perintah workdir di peramban file. Di perintah pencari tuliskan "Command-K" dan di kotak alamat server ketik "smb://127.0.0.2/workdir" dan klik "Connect ". Sekarang, Anda akan melihat isi volume docker di dalam hasil pencari.

Buat dan mulai wadah Yocto

Untuk membuat dan/atau memulai jenis kontainer Yocto di jendela terminal:

docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir

Penyetelan lingkungan build (rancangan perintah) dalam kontainer

Ketika wadah docker dimulai, Anda memiliki prompt terminal yang terlihat seperti ini: "pokyuser@d4ddfe042587:/workdir".

Sekarang, Anda dapat menyetel lingkungan build.

Kloning versi Poky

Dalam kasus saya, saya menggunakan Yocto versi 3.4 dengan nama "Honister", karena lapisan meta-raspberry tidak tersedia untuk versi Poky yang lebih baru saat ini. Untuk pertama kalinya, Anda harus kloning repositori Poky:

git clone -b honister git://git.yoctoproject.org/poky poky-honister

Jika Anda ingin memperbarui Poky ke versi terbaru:

cd poky-honister
git pull --all --prune

Lapisan meta tambahan untuk Raspberry Pi

Ubah ke "poky-honister" dan kloning repositori berikut: meta-raspberry, meta-openembedded, dan jika diperlukan 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

Penyetelan konfigurasi build

Biarkan direktori poky-honister, sehingga Anda berada di direktori /workdir. Sekarang ambil lingkungan build dengan script ooe-init-build-env.

cd ..
source poky-honister/oe-init-build-env rpi-build

Direktori baru "rpi-build" - Anda dapat menamainya sesuai keinginan Anda - dan direktori conf dengan file bblayers.conf, local.conf, dan templateconf.cfg akan dibuat.

Karena tidak ada editor teks yang terpasang di wadah, Anda bisa jadi harus mengedit file konfigurasi dalam volume samba yang terpasang di OS Mac X atau harus memasang editor teks di wadah. Untuk melakukan hal ini, Anda harus membuka jendela terminal kedua - saat kontainer Yocto sedang bekerja - dan memulai menjalan shell bash dalam kontainer dengan hak root:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit

Kemudian Anda dapat mengedit file konfigurasi dalam wadah Yocto sebagai pengguna Poky.

Catatan

Editor tidak dipasang secara permanen. Setelah keluar dari wadah dan kemudian ingin masuk lagi, Anda harus memasang editor lagi

Pertama, tambahkan meta-raspberry dalam file bblayers.conf

nano conf/bblayers.conf

Tambahkan "/workdir/poky-honister/meta-raspberrypi " sehingga terlihat seperti

BBLAYERS ?= " \
  /workdir/poky-honister/meta \
  /workdir/poky-honister/meta-poky \
  /workdir/poky-honister/meta-yocto-bsp \
  /workdir/poky-honister/meta-raspberrypi \
  "

dan simpan.

Kedua, edit local.conf

Edit file local.conf:

nano conf/local.conf

Ubah baris berikut:

  • MACHINE ??= "qemux86-64" -> MACHINE ??= "raspberrypi4-64"

Tergantung Raspberry mana yang ingin Anda gunakan (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, dll)

Uncomment baris berikut:

  • DL_DIR ?= "${TOPDIR}/downloads"
  • SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
  • TMPDIR = "${TOPDIR}/tmp"

Tambahkan baris berikut di akhir, agar sdimg bisa flash ke kartu SD:

  • IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
  • SDIMG_ROOTFS_TYPE = "ext4.xz"

Simpan file local.conf.

Melakukan Bitbake pada gambar pertama

Sekarang, Anda memiliki pengaturan minimal untuk membuat citra pertama:

bitbake -k core-image-minimal

Di dokumentasi Yocto, Anda dapat menemukan deskripsi singkat dari deskripsi citra yang tersedia.

Misalnya:

  • core-image-minimal: Sebuah citra kecil yang hanya mampu memungkinkan perangkat untuk melakukan boot.
  • core-image-base: Sebuah citra khusus konsol yang sepenuhnya mendukung perangkat keras dari perangkat target.
  • core-image-full-cmdline: Sebuah citra khusus konsol dengan fungsionalitas sistem Linux berfitur lebih lengkap yang diinstal.

Setelah beberapa saat, - yang bisa menjadi jam server untuk pertama kalinya - Bitbake akan selesai dan Anda menemukan file sdimg di direktori berikut:

/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64

Konfigurasi ekstra

Konfigurasi perangkat keras Raspberry ekstra

Untuk meetapkan pengaturan perangkat keras tertentu, Anda dapat melihat ke extra-apps.md dan extra-build-config.md. Anda juga dapat menemukan file ini di direktori meta-raspberrypi/docs.

Lapisan meta juga memberikan konfigurasi gambar "rpi-test-image" untuk digunakan dengan Bitbake. citra didasarkan pada "core-image-base" yang mencakup sebagian besar paket dalam meta-raspberrypi dan beberapa sampel media.

bitbake -k rpi-test-image

Konfigurasi perangkat lunak ekstra

Tergantung pada konfigurasi build citra apa yang Anda gunakan, Anda mungkin perlu menginstal paket perangkat lunak tambahan.

Anda dapat melakukan hal ini dengan menambahkan beberapa pengaturan ke file local.conf.

Misalnya, tambahkan baris berikut untuk menetapkan ssh-server, pi-user dan 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"

Atau tambahkan Python:

IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"

Catatan

Spasi awal di " python3 python3-pip rpi-gpio raspi-gpio" itu penting, karena teks ditambahkan ke konfigurasi yang ada dan perlu dipisahkan dengan spasi ini.

Lisensi Hak Cipta

Hak Cipta © 2022 Interelectronix e.K.
Kode sumber proyek ini dilisensikan di bawah lisensiGPL-3.0.

Ucapan terima kasih

Sumber yang digunakan untuk membuat Instruksi ini:

Terima kasih kepada semua.