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ó:

bash
cat poky/meta/recipes-core/images/core-image-minimal.bb

Nội dung có dạng:

bash
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-boot là nhóm gói tối thiểu để khởi động. CORE_IMAGE_EXTRA_INSTALL là 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 class core-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:

bash
cat poky/meta/conf/machine/qemux86-64.conf

Mộ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:

bash
grep "DISTRO" build/conf/local.conf

Tệp mô tả distro nằm ở meta-poky/conf/distro/poky.conf. Các biến đáng chú ý:

  • DISTRO và DISTRO_NAME: tên ngắn và tên đầy đủ.
  • DISTRO_VERSION và 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ệnh make.
  • 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.

Cách Yocto đọc cấu hình của người dùng

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.