DEV Community

Review Laptop
Review Laptop

Posted on Originally published at reviewlaptop.vn

Cross-compile ARM và RISC-V với GCC, QEMU và Docker buildx

Cài đặt GCC cross-compiler và QEMU User Emulation

Chạy compile trực tiếp trên bo mạch nhúng ARM hay chip RISC-V thường xuyên nghẽn ở I/O thẻ nhớ và tốc độ xử lý của CPU. Giải pháp chuẩn là dựng cross-toolchain trên máy host x86 để rút ngắn thời gian build, sau đó test binary bằng QEMU user-mode ngay trên cùng terminal.

Cài đặt toolchain trên Linux (Debian/Ubuntu):

Cùng chủ đề, Hưng Phát Laptop từng viết một bài kỹ hơn về phần này.

sudo apt update && sudo apt install -y \
  gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
  gcc-riscv64-linux-gnu g++-riscv64-linux-gnu \
  qemu-user qemu-user-static binfmt-support
Enter fullscreen mode Exit fullscreen mode

Build và test thử file C cho kiến trúc ARM64 hoặc RISC-V:

# Compile target ARM64 & RISC-V 64-bit
aarch64-linux-gnu-gcc -O2 main.c -o main_arm64 -static
riscv64-linux-gnu-gcc -O2 main.c -o main_riscv64 -static

# Chạy test trực tiếp qua QEMU
qemu-aarch64-static ./main_arm64
qemu-riscv64-static ./main_riscv64
Enter fullscreen mode Exit fullscreen mode

Đóng gói đa kiến trúc với Docker buildx

Khi làm việc với các ứng dụng nhúng chạy container (k3s, edge runtime), docker buildx kết hợp QEMU cho phép build image multi-arch chỉ với một lệnh duy nhất mà không cần cắm board đích.

Khởi tạo builder instance:

docker run --privileged --rm tonistiigi/binfmt --install all
docker buildx create --name multiarch-builder --use
docker buildx inspect --bootstrap
Enter fullscreen mode Exit fullscreen mode

Lệnh build và push image đồng thời cho linux/amd64, linux/arm64, linux/riscv64:

docker buildx build \
  --platform linux/amd64,linux/arm64,linux/riscv64 \
  -t my-registry/app:latest --push .
Enter fullscreen mode Exit fullscreen mode

Native vs Cross-compile: Đánh đổi thực tế

Tiêu chí Native Compile trên Target Board Cross-Compile trên Host x86
Thời gian build Lâu (bị giới hạn bởi CPU lõi yếu, RAM hẹp) Rất nhanh (dùng trọn đa nhân x86, SSD NVMe)
Cấu hình toolchain Đơn giản, dùng gcc mặc định Cần chuẩn bị sysroot và libc tương thích
Debug & Test Test trực tiếp trên ngoại vi thật Cần QEMU hoặc gdb-server remote

Khi debug code nhúng nhiều giờ liền hoặc mang máy ra hiện trường nạp firmware, điều kiện hiển thị thực tế ảnh hưởng rất nhiều đến mắt. Bạn có thể tham khảo thêm bài phân tích độ sáng và độ phủ màu từ reviewlaptop.vn để chọn thông số màn hình phù hợp với môi trường làm việc.

Đừng compile trực tiếp dự án lớn trên board nhúng nếu không bắt buộc. Dựng sẵn cross-toolchain cùng Docker buildx giúp tiết kiệm hàng giờ chờ đợi trong quy trình phát triển.

Top comments (0)