Zalo Inbox

Chạy giả lập image bằng QEMU


  • author-image

    devlinux

  • blog-tag yocto
  • blog-comment 0 Bình luận
  • blog-comment 311 Views
  • created-date 10 Feb, 2025
blog-image


Bài viết này sẽ hướng dẫn bạn từng bước để thiết lập môi trường, tải mã nguồn, cấu hình, và xây dựng image cho Yocto Project. Đồng thời, chúng ta cũng sẽ sử dụng QEMU để giả lập và kiểm tra image đã tạo ra.

1. Yêu cầu phần cứng và phần mềm

1.1. Yêu cầu phần cứng

Để đảm bảo quá trình biên dịch và xây dựng image diễn ra mượt mà, bạn cần chuẩn bị phần cứng đáp ứng các tiêu chí sau:

  • CPU: Tối thiểu CPU 4 nhân (quad-core) hoặc cao hơn để tăng tốc độ xử lý.
  • RAM: Ít nhất 8GB RAM, nhưng khuyến nghị sử dụng 16GB hoặc nhiều hơn để xử lý khối lượng công việc lớn.
  • Dung lượng ổ cứng: Cần ít nhất 50GB dung lượng trống để lưu trữ mã nguồn, meta layer và output từ quá trình build. Với các dự án lớn, có thể cần đến 100GB hoặc hơn. Nên sử dụng ổ SSD để tăng tốc độ đọc/ghi, tuy nhiên ổ HDD vẫn có thể sử dụng nếu cần.

1.2. Yêu cầu phần mềm

Hệ điều hành: Ubuntu 20.04 LTS hoặc cao hơn, hoặc Debian 10/Buster trở lên. Các bản phân phối Linux khác như Fedora hoặc CentOS cũng có thể được sử dụng, nhưng có thể yêu cầu thêm cấu hình bổ sung.

1.3. Cấu hình tham khảo

Thông số:

  • Hệ điều hành: Ubuntu 22.04
  • RAM: 8GB
  • Ổ cứng: 100GB SSD
  • CPU: 4 nhân, 2 luồng, tốc độ 3.2GHz

2. Chuẩn bị môi trường

2.1. Cài đặt các công cụ cần thiết

2.1.1. Ubuntu hoặc Debian

sudo apt-get update
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
     build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
     xz-utils debianutils iputils-ping libsdl1.2-dev xterm vim

2.1.1. Fedora

sudo dnf install gawk make wget tar bzip2 gzip python3 unzip perl patch \
     diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \
     ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue perl-bignum socat \
     python3-pexpect findutils which file cpio python python3-pip xz SDL-devel xterm

3. Tải mã nguồn Yocto Project

3.1. Tải mã nguồn của Yocto Project

Tạo và di chuyển vào thư mục ~/yocto:

mkdir ~/yocto
cd ~/yocto

Bắt đầu bằng cách tải mã nguồn của Yocto Project từ kho chính thức:

~/yocto$ git clone git://git.yoctoproject.org/poky
Cloning into 'poky'...
remote: Enumerating objects: 658036, done.
remote: Counting objects: 100% (1018/1018), done.
remote: Compressing objects: 100% (250/250), done.
Receiving objects:   9% (63464/658036), 31.86 MiB | 1.23 MiB/s  s

3.2. Cấu trúc thư mục trong Yocto

Sau khi tải mã nguồn Yocto Project thành công, cấu trúc thư mục của Poky sẽ bao gồm:

  • bitbake/: Công cụ BitBake chịu trách nhiệm quản lý quá trình build.
  • meta/: Layer cơ bản chứa các recipe, class, và hàm cốt lõi.
  • meta-poky/: Layer mở rộng cho Poky, cung cấp các recipe và cấu hình mặc định.
  • meta-yocto-bsp/: Chứa các Board Support Package (BSP) cho phần cứng cụ thể.
  • scripts/: Các script hỗ trợ quản lý dự án.
  • oe-init-build-env: Script thiết lập môi trường build.

image.png

4. Xây dựng image cho QEMU

4.1. Chuyển sang branch phù hợp

Đảm bảo bạn đang ở trong thư mục mã nguồn poky và chọn branch phù hợp với yêu cầu:

cd ~/yocto/poky
git checkout dunfell

4.2. Khởi tạo môi trường

Chạy script oe-init-build-env để thiết lập môi trường xây dựng trên máy chủ.

source oe-init-build-env

Sau khi chạy lệnh này, một thư mục build sẽ được tạo ra. Đây sẽ là nơi chứa các file cấu hình và output của quá trình build.

4.3. Tùy chỉnh file cấu hình

4.3.1. local.conf

File local.conf trong Yocto Project là một tệp cấu hình cục bộ được tạo ra khi khởi tạo môi trường xây dựng bằng script oe-init-build-env. Tệp này nằm trong thư mục conf của thư mục build (poky/build/conf) và là nơi để thiết lập các cấu hình cho quá trình build image.

  • Để tiết kiệm dung lượng ổ đĩa, thêm dòng sau để xóa các thư mục work sau khi build xong:

    NHERIT += "rm_work"
    
  • Mặc định, máy đích (target machine) là qemux86, tạo ra một image có thể sử dụng trong QEMU và được nhắm đến kiến trúc Intel 32-bit. Sau này, bạn có thể thay đổi nhanh chóng máy đích thông qua biến MACHINE để build một image cho máy khác.

  • Đặt trình quản lý gói sử dụng trong quá trình build (mặc định là RPM):

    ACKAGE_CLASSES ?= "package_rpm"
    

4.3.2. bblayers.conf

File bblayers.conf quản lý danh sách các layers mà BitBake sẽ sử dụng. Ví dụ:

BBLAYERS ?= " \
  /home/aosp/yocto/poky/meta \
  /home/aosp/yocto/poky/meta-poky \
  /home/aosp/yocto/meta-openembedded/meta-oe \
  /home/aosp/yocto/meta-yocto-bsp \
"

4.4. Tiến hành xây dựng image

Mở file build/conf/local.conf và thay đổi biến để MACHINE xây dựng máy ảo QEMU cho kiến trúc x86-64:

MACHINE ?= "qemux86-64"

Xây dựng image hệ điều hành cho máy ảo QEMU, trong ví dụ này là core-image-minimal.

bitbake core-image-minimal
  • Lưu ý: Quá trình xây dựng lần đầu tiên có thể mất vài giờ tùy thuộc vào số lượng CPU, dung lượng RAM, tốc độ kết nối Internet và các yếu tố khác. Các lần build sau sẽ nhanh hơn vì nhiều phần của quá trình build đã được lưu trữ vào bộ nhớ cache. image.png

4.5. Chạy image bằng QEMU

Sau khi quá trình build hoàn tất, bạn có thể chạy image trên QEMU để kiểm tra:

runqemu qemux86-64 nographic

5. Kết luận

Quy trình trên giúp bạn thiết lập môi trường và xây dựng image với Yocto Project một cách bài bản. Việc sử dụng QEMU để giả lập giúp bạn kiểm tra kết quả trước khi triển khai lên phần cứng thực tế. Yocto không chỉ là một công cụ mạnh mẽ mà còn linh hoạt, cho phép bạn tùy chỉnh hệ điều hành nhúng theo nhu cầu cụ thể của mình.

author_photo
devlinux

0 Bình luận