Khởi tạo cấu trúc thư mục Yocto và Clone Layers
Bước đầu tiên là tạo cấu trúc thư mục gốc (workspace) để chứa các thành phần của Yocto Project. Việc này giúp tách biệt dự án khỏi hệ thống host, đảm bảo tính ổn định và dễ dàng backup.
Chúng ta sẽ sử dụng thư mục ~/yocto-project làm nơi chứa code nguồn. Tiếp theo, clone repository chính thức từ Poky (Poky là bộ layer mặc định của Yocto) và các layer hỗ trợ Raspberry Pi CM5 cần thiết.
Thực hiện lệnh tạo thư mục và clone layer Poky bản Stable (Dunfell hoặc Kirkstone, ở đây dùng Kirkstone để hỗ trợ tốt cho CM5):
mkdir -p ~/yocto-project && cd ~/yocto-project
git clone https://git.yoctoproject.org/poky.git -b kirkstone
Kết quả mong đợi: Thư mục poky được tạo ra trong ~/yocto-project với nội dung source code của Yocto.
Để hỗ trợ phần cứng Raspberry Pi CM5, chúng ta cần layer meta-raspberrypi từ Raspberry Pi Foundation và layer meta-raspberrypi-bsp (nếu cần driver cụ thể). Ở đây, layer chính là meta-raspberrypi cung cấp các recipe cho CM4 và CM5.
Clone layer meta-raspberrypi vào cùng thư mục workspace:
cd ~/yocto-project
git clone https://github.com/RaspberryPiFoundation/meta-raspberrypi.git
Kết quả mong đợi: Thư mục meta-raspberrypi xuất hiện bên cạnh thư mục poky.
Verify cấu trúc thư mục
Chạy lệnh ls để xác nhận cả hai thư mục đã tồn tại:
ls -la ~/yocto-project
Bạn sẽ thấy poky và meta-raspberrypi trong danh sách.
Tạo Project Layer Tùy chỉnh
Trong Yocto, nguyên tắc vàng là không bao giờ sửa đổi trực tiếp vào các layer gốc (như poky hay meta-raspberrypi). Mọi thay đổi cấu hình, recipe tùy chỉnh, hoặc file overlay đều phải nằm trong một layer riêng do dự án bạn tạo ra.
Layer tùy chỉnh này sẽ đóng vai trò chứa các file .bbappend để ghi đè recipe gốc, file .bb mới, và các file cấu hình đặc thù cho CM5.
Đi vào thư mục poky để sử dụng công cụ oe-layers hoặc bitbake-layers có sẵn:
cd ~/yocto-project/poky
source oe-init-build-env ~/yocto-project/build
Kết quả mong đợi: Script khởi tạo môi trường sẽ chạy và tạo ra thư mục build cùng các file cấu hình mặc định, đồng thời thay đổi prompt shell sang dạng (poky) user@host:~/yocto-project/build$.
Bây giờ, sử dụng lệnh bitbake-layers create-layer để tạo layer mới. Đặt tên là meta-cm5-custom và đặt vào thư mục layers trong workspace:
mkdir -p ~/yocto-project/layers
bitbake-layers create-layer ~/yocto-project/layers/meta-cm5-custom
Kết quả mong đợi: Thư mục meta-cm5-custom được tạo với cấu trúc tiêu chuẩn bao gồm thư mục conf, classes, recipes-core, v.v.
Verify layer mới
Kiểm tra cấu trúc bên trong layer vừa tạo:
tree ~/yocto-project/layers/meta-cm5-custom -L 2
Bạn sẽ thấy các thư mục con chuẩn của Yocto layer.
Cấu hình local.conf và bblayers.conf
Để build được image cho Raspberry Pi CM5, chúng ta cần cấu hình hai file quan trọng nhất nằm trong thư mục build: bblayers.conf (danh sách các layer) và local.conf (tham số build và target machine).
Trước tiên, chỉnh sửa bblayers.conf để thêm layer meta-raspberrypi và layer tùy chỉnh meta-cm5-custom vào danh sách BBLAYERS.
File cấu hình đầy đủ nằm tại ~/yocto-project/build/conf/bblayers.conf:
cat > ~/yocto-project/build/conf/bblayers.conf
Kết quả mong đợi: File được ghi đè với đường dẫn tuyệt đối đến các layer. Lưu ý thay /home/user bằng đường dẫn home thực tế của bạn nếu khác.
Tiếp theo, cấu hình local.conf. File này xác định máy ảo target (MACHINE) và loại image (IMAGE_INSTALL) cũng như các tham số tối ưu hóa.
Đối với Raspberry Pi CM5, giá trị MACHINE trong Yocto (thông qua meta-raspberrypi) thường là rpi4cm hoặc rpi400 tùy thuộc vào biến thể, nhưng CM5 thường được map vào rpi4cm hoặc rpi5 tùy version của layer. Với meta-raspberrypi mới nhất, hãy dùng rpi5 hoặc rpi4cm. Ở đây ta dùng rpi5 cho CM5 (vì kiến trúc CPU giống nhau).
File cấu hình đầy đủ nằm tại ~/yocto-project/build/conf/local.conf:
cat > ~/yocto-project/build/conf/local.conf
Kết quả mong đợi: File local.conf được ghi với target MACHINE = "rpi5". Lưu ý: Nếu layer meta-raspberrypi của bạn yêu cầu tên máy khác (ví dụ: rpi4cm), hãy sửa lại dòng MACHINE tương ứng.
Verify cấu hình
Chạy lệnh để kiểm tra xem bitbake có nhận diện đúng machine và layers hay không:
bitbake -e | grep "^MACHINE="
bitbake -e | grep "^BBLAYERS="
Bạn sẽ thấy output hiển thị giá trị MACHINE="rpi5" và danh sách các đường dẫn layer đã được thêm vào.
Sử dụng Máy ảo Build (Build Appliance)
Việc build Yocto từ source trên máy chủ (Host) có thể rất nặng về tài nguyên và gặp lỗi do sự không tương thích của các công cụ build (GCC, QEMU, etc) giữa Host và target. Yocto cung cấp giải pháp "Build Appliance" - một máy ảo Linux (thường là Ubuntu) đã được cài sẵn mọi công cụ cần thiết.
Chúng ta sẽ tạo máy ảo dựa trên Ubuntu LTS, mount thư mục workspace vào máy ảo, và thực hiện build bên trong đó.
Tạo máy ảo Ubuntu 22.04 LTS (hoặc 20.04 LTS tùy theo version Yocto K Kirkstone yêu cầu) trên VirtualBox hoặc KVM. Sau khi cài đặt xong, truy cập vào terminal của máy ảo.
Trong máy ảo, cài đặt các công cụ build cần thiết (build dependencies):
sudo apt-get update
sudo apt-get install -y git wget curl python3 python3-pyelftools python3-pyserial python3-dev libgl1-mesa-glx libglu1-mesa libglib2.0-0 libssl-dev libgmp-dev libmpc-dev libmpfr-dev libncurses5-dev libreadline-dev
Kết quả mong đợi: Các package cần thiết cho Yocto được cài đặt thành công.
Clone source code Yocto và các layers vào máy ảo (hoặc mount thư mục từ Host để tiết kiệm thời gian và dung lượng). Ở đây giả sử bạn clone trực tiếp trong máy ảo để đảm bảo môi trường sạch:
mkdir -p ~/yocto-project && cd ~/yocto-project
git clone https://git.yoctoproject.org/poky.git -b kirkstone
git clone https://github.com/RaspberryPiFoundation/meta-raspberrypi.git
Kết quả mong đợi: Source code được tải về trong máy ảo.
Khởi tạo môi trường build và cấu hình lại bblayers.conf và local.conf tương tự như trên Host, nhưng với đường dẫn tuyệt đối trong máy ảo (ví dụ: /home/ubuntu/yocto-project...).
Sau khi cấu hình xong, thực hiện lệnh build đầu tiên để tạo image base (core-image-minimal):
cd ~/yocto-project/poky
source oe-init-build-env ~/yocto-project/build
bitbake core-image-minimal
Kết quả mong đợi: Quá trình build bắt đầu. Lần đầu tiên sẽ mất rất nhiều thời gian (có thể vài tiếng) vì nó phải compile tất cả các package từ source. Nếu không có lỗi, bạn sẽ thấy dòng Build at ... completed successfully.
Verify Build Appliance
Kiểm tra thư mục output để xem file image đã được tạo:
ls -lh ~/yocto-project/build/tmp/deploy/images/rpi5/*.img
Bạn sẽ thấy file core-image-minimal-rpi5.wic (hoặc .img) đã xuất hiện, sẵn sàng để flash vào SD Card hoặc eMMC của CM5.
Điều hướng series:
Mục lục: Series: Xây dựng hệ điều hành Linux tùy biến từ source cho Raspberry Pi CM5
« Phần 1: Chuẩn bị môi trường và yêu cầu phần cứng cho Raspberry Pi Compute Module 5
Phần 3: Tùy chỉnh Linux Kernel cho Raspberry Pi CM5 »