Hướng dẫn dự án Yocto mã nguồn mở
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
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.md và extra-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ả.