Yocto · Bài 2/9
Bài 2: Các thuật ngữ quan trọng trong Yocto
4 lượt đọc4 phút đọc
Khi mới học Yocto, bạn sẽ gặp rất nhiều từ lạ: image, machine, distro, local.conf. Hiểu rõ chúng là bước đầu để đọc được các tệp cấu hình mà không bị rối. Bài này giải thích từng thuật ngữ bằng ví dụ thật lấy từ Poky nhánh scarthgap.
Hãy hình dung việc build hệ điều hành như làm một món ăn: image là món cuối cùng, machine là cái bếp (phần cứng), distro là phong cách nấu, và local.conf là ghi chú riêng của bạn cho lần nấu này.
1.Image
Image cũng là một recipe. Nó mô tả những gì sẽ có trong hệ thống tập tin gốc (root file system, viết tắt RFS) của thiết bị. Poky có sẵn vài image, ví dụ core-image-minimal là image nhỏ nhất đủ để khởi động hệ thống.
Xem tệp của nó:
cat poky/meta/recipes-core/images/core-image-minimal.bbNội dung có dạng:
SUMMARY = "A small image just capable of allowing a device to boot."
IMAGE_INSTALL = "packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}"
IMAGE_LINGUAS = " "
LICENSE = "MIT"
inherit core-image
IMAGE_ROOTFS_SIZE ?= "8192"
IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "" ,d)}"Ý nghĩa các dòng chính:
IMAGE_INSTALL: danh sách gói được cài vào RFS.packagegroup-core-bootlà nhóm gói tối thiểu để khởi động.CORE_IMAGE_EXTRA_INSTALLlà chỗ bạn thêm gói của mình.IMAGE_LINGUAS: các ngôn ngữ hỗ trợ. Để trống nghĩa là không thêm gói ngôn ngữ nào.inherit core-image: kế thừa classcore-image, class này lo việc xử lýIMAGE_INSTALL, tạo hệ thống tập tin và nhiều việc khác.IMAGE_ROOTFS_SIZE: kích thước RFS, tính bằng KB.IMAGE_ROOTFS_EXTRA_SPACE:append: thêm chỗ trống tùy theo tính năng của distro.
2.Machine
Machine là tệp mô tả một phần cứng cụ thể mà bạn build image cho nó. Mỗi machine có một tệp .conf trong layer, ở thư mục conf/machine/.
Ví dụ máy ảo QEMU x86 64 bit:
cat poky/meta/conf/machine/qemux86-64.confMột số biến quan trọng thường thấy trong tệp machine:
KERNEL_IMAGETYPE: loại tệp kernel (bzImage, zImage, Image...).SERIAL_CONSOLES: cấu hình cổng nối tiếp dùng làm console.MACHINE_FEATURES: các tính năng phần cứng, ví dụpci,usbhost,wifi.PREFERRED_PROVIDER_virtual/kernel: chọn recipe kernel mà machine này dùng.UBOOT_MACHINE: cấu hình U-Boot, nếu có.
Tệp machine thường gọi thêm các tệp dùng chung bằng require, ví dụ cấu hình tối ưu cho từng dòng CPU. Bạn nên mở các tệp đó ra đọc để hiểu rõ hơn.
3.Distro
Distro quyết định "chính sách" của hệ thống: dùng init nào, những tính năng nào được bật, phiên bản kernel ưa thích. Mặc định của Poky là distro poky.
Biến DISTRO trong local.conf cho biết bạn đang dùng distro nào:
grep "DISTRO" build/conf/local.confTệp mô tả distro nằm ở meta-poky/conf/distro/poky.conf. Các biến đáng chú ý:
DISTROvàDISTRO_NAME: tên ngắn và tên đầy đủ.DISTRO_VERSIONvàDISTRO_CODENAME: phiên bản và tên mã. Với nhánh này, tên mã làscarthgap.DISTRO_FEATURES: các tính năng của hệ thống nhưwifi,systemd,opengl. Xem danh sách đầy đủ trong tài liệu Yocto, mục DISTRO_FEATURES.POKY_DEFAULT_DISTRO_FEATURES: các tính năng mặc định của Poky.
Khi muốn một hệ thống riêng, bạn có thể tạo distro của mình kế thừa từ poky rồi chỉ sửa những chỗ cần khác.
4.local.conf
local.conf nằm ở build/conf/. Đây là nơi bạn chỉnh cấu hình cho thư mục build hiện tại. Một số biến hay dùng:
MACHINE: máy đích cần build.IMAGE_FSTYPES: định dạng của hệ thống tập tin (ext4, wic, tar.bz2...).BB_NUMBER_THREADS: số tác vụ BitBake chạy song song.PARALLEL_MAKE: số luồng cho lệnhmake.TMPDIR: nơi lưu kết quả build.IMAGE_INSTALL:append: thêm gói vào image.
Thay đổi trong local.conf chỉ ảnh hưởng đến thư mục build này, không đổi cấu hình chung của Yocto.

5.Tóm tắt nhanh
- Image: món cuối cùng, mô tả nội dung RFS.
- Machine: phần cứng đích.
- Distro: chính sách và tính năng của hệ thống.
- local.conf: tùy chỉnh riêng cho lần build này.
6.Kết luận
Nắm vững bốn khái niệm này, bạn đọc được phần lớn tệp cấu hình trong Yocto. Ở bài sau, chúng ta sẽ tạo layer riêng và thêm chương trình Helloworld đầu tiên vào image.
