Phần mềm nhúng - Yocto xây dựng Raspberry Pi 4, ảnh chụp màn hình của máy tính

Yocto xây dựng Raspberry Pi 4

Trong môi trường Docker

Hướng dẫn dự án Yocto mã nguồn mở

mẹo thiết lập Linux tùy chỉnh trên Raspberry Pi với Docker

Hướng dẫn Yocto Project mã nguồn mở cho Linux tùy chỉnh trên Raspberry Pi với mẹo thiết lập Docker

Đi sâu vào Dự án Yocto cho các hệ thống Linux tùy chỉnh trên bất kỳ phần cứng nào. Hoàn hảo cho các nhà phát triển và những người đam mê hệ thống nhúng . Bắt đầu xây dựng ngay bây giờ!

Khám phá Dự án Yocto, một sáng kiến mã nguồn mở để tạo các hệ thống Linux tùy chỉnh cho bất kỳ kiến trúc phần cứng nào. Tìm hiểu cách sử dụng CROPS để phát triển đa nền tảng, thiết lập bộ chứa Docker và xây dựng hình ảnh Linux phù hợp cho các thiết bị nhúng và IoT. Hướng dẫn của chúng tôi bao gồm thiết lập trên macOS, định cấu hình môi trường xây dựng và tối ưu hóa cho Raspberry Pi. Cho dù bạn là người mới bắt đầu hay chuyên gia, hãy tìm các phương pháp hay nhất, công cụ và hỗ trợ cộng đồng cho nhu cầu dự án Linux của bạn.

Yocto chạy trong docker container

Trong tài liệu yocto có một chương (2.2.2) để thiết lập CROss PlatformS (CROPS) thay thế cho việc thiết lập một máy tính linux gốc. Thay thế này sử dụng docker container để xây dựng một hình ảnh hệ thống tùy chỉnh, ví dụ như cho Raspberry Pi.

Thật không may, có một số lỗi nhỏ trong tài liệu để thiết lập môi trường này cho tôi trên Mac OS X (Monterey).

Thiết lập docker container cho Mac OS X

Để sử dụng docker CROPS trên Linux, Windows và Mac OS X, cần có một số cài đặt đặc biệt. Trước khi setup container cho Yocto, các bạn phải tạo một docker volume để lưu trữ kết quả. Ngoài ra một docker samba container được sử dụng để cung cấp các tập tin trong Mac OS X.

Tạo docker volume

Trong cửa sổ terminal, gõ các lệnh sau:

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

Tạo và chạy vùng chứa samba

OSX sẽ không cho phép bạn kết nối với một chia sẻ samba đang chạy cục bộ. Do đó, trước tiên bạn phải tạo bí danh cho 127.0.0.1 của 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Sau đó tạo samba container, cho phép các bạn xem các file trong docker volume:

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

Vì bạn sẽ luôn cần phải có bí danh để kết nối với vùng chứa samba, bạn có thể kết hợp phần đầu của samba và bí danh như sau:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Bây giờ bạn có thể mở workdir trong trình duyệt tệp. Trong công cụ tìm, nhấn "Command-K" và trong hộp địa chỉ máy chủ, nhập "smb://127.0.0.2/workdir" và nhấp vào "Kết nối". Bây giờ các bạn sẽ thấy nội dung của docker volume trong finder.

Tạo và khởi động vùng chứa Yocto

Để tạo và/hoặc khởi động vùng chứa Yocto, hãy nhập vào cửa sổ terminal:

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

Thiết lập môi trường xây dựng trong container

Khi docker container được khởi động, bạn có một terminal prompt trông như thế này: "pokyuser@d4ddfe042587:/workdir".

Bây giờ bạn có thể thiết lập môi trường xây dựng.

Phiên bản sao chép poky

Trong trường hợp của tôi, tôi sử dụng Yocto phiên bản 3.4 với tên "Honister", bởi vì các lớp meta-raspberry không có sẵn cho các phiên bản poky mới hơn tại thời điểm này. Lần đầu tiên bạn phải sao chép kho lưu trữ poky:

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

Nếu bạn muốn cập nhật poky lên phiên bản mới nhất:

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

Các lớp meta bổ sung cho Raspberry Pi

Thay đổi thành "poky-honister" và sao chép các kho sau: meta-raspberry, meta-openembedded và nếu cần 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

Thiết lập cấu hình xây dựng

Để lại thư mục poky-honister, để bạn đang ở trong /workdir. Bây giờ nguồn môi trường xây dựng với tập lệnh oe-init-build-env.

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

Một thư mục mới "rpi-build" - bạn có thể đặt tên nó như bạn muốn - và một thư mục conf với các tệp bblayers.conf, local.conf và templateconf.cfg được tạo.

Vì không có trình soạn thảo văn bản nào được cài đặt trong vùng chứa, bạn phải chỉnh sửa các tệp cấu hình trong ổ đĩa samba được gắn trong Mac OS X hoặc phải cài đặt trình soạn thảo văn bản trong vùng chứa. Để thực hiện việc này, bạn phải mở cửa sổ terminal thứ hai - trong khi container yocto đang chạy - và bắt đầu một bash shell trong container với các đặc quyền root:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit
Sau đó, bạn có thể chỉnh sửa các tệp cấu hình trong vùng chứa yocto dưới dạng pokyuser.

Ghi

Trình chỉnh sửa không được cài đặt vĩnh viễn. Sau khi rời khỏi container và nhập lại, bạn phải cài đặt lại

#### Đầu tiên thêm meta-raspberry vào tệp bblayers.conf
nano conf/bblayers.conf

Thêm "/workdir/poky-honister/meta-raspberrypi " để nó trông giống như

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

và lưu nó.

Thứ hai chỉnh sửa local.conf

Chỉnh sửa tệp local.conf:

nano conf/local.conf

Thay đổi các dòng sau:

-MÁY?? = "qemux86-64" -> MÁY ?? = "mâm xôipi4-64"

Tùy thuộc vào loại Raspberry bạn muốn sử dụng (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, v.v.)

Bỏ ghi chú các dòng sau:

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

Thêm các dòng sau vào cuối, để có được một sdimg để flash vào thẻ SD:

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

Lưu tệp local.conf.

Bitbake hình ảnh đầu tiên

Bây giờ bạn có các cài đặt tối thiểu để xây dựng hình ảnh đầu tiên:

bitbake -k core-image-minimal

Trong tài liệu Yocto, bạn tìm thấy một mô tả ngắn về các mô tả hình ảnh có sẵn.

Chẳng hạn:

  • core-image-minimal: Một hình ảnh nhỏ chỉ có khả năng cho phép thiết bị khởi động.
  • core-image-base: Một hình ảnh chỉ dành cho bảng điều khiển hỗ trợ đầy đủ phần cứng thiết bị đích.
  • core-image-full-cmdline: Một hình ảnh chỉ dành cho bảng điều khiển với chức năng hệ thống Linux đầy đủ tính năng hơn được cài đặt.

Sau một thời gian - có thể là giờ máy chủ lần đầu tiên - bitbake kết thúc và bạn tìm thấy tệp sdimg trong thư mục sau:

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

Cấu hình bổ sung

Cấu hình phần cứng Raspberry bổ sung

Để đặt cài đặt phần cứng cụ thể, bạn có thể xem extra-apps.mdextra-build-config.md. Bạn tìm thấy tệp này cũng trong thư mục meta-raspberrypi/docs.

Lớp meta cũng cung cấp cấu hình hình ảnh "rpi-test-image" để sử dụng với bitbake. Hình ảnh dựa trên "core-image-base" bao gồm hầu hết các gói trong meta-raspberrypi và một số mẫu phương tiện.

bitbake -k rpi-test-image

 

Cấu hình phần mềm bổ sung

Tùy thuộc vào cấu hình xây dựng hình ảnh bạn đang sử dụng, bạn có thể cần cài đặt các gói phần mềm bổ sung.

Bạn có thể làm điều này, bằng cách thêm một số cài đặt vào tệp local.conf.

Ví dụ: thêm các dòng sau, để đặt ssh-server, pi-user và 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"

Hoặc thêm python:

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

Ghi

Không gian bắt đầu trong "python3 python3-pip rpi-gpio raspi-gpio" rất quan trọng, vì văn bản được gắn vào cấu hình hiện có và cần được tách ra bằng khoảng trắng này.

Giấy phép bản quyền

**Bản quyền © 2022 Interelectronix ví dụ: **
Mã nguồn Project này được cấp phép theo giấy phép GPL-3.0.

Lời cảm ơn

Các nguồn được sử dụng để tạo Hướng dẫn này:

Cảm ơn tất cả.