Kiểm tra cấu hình phần cứng HackberryPi CM5
Trước khi bắt đầu xây dựng hệ điều hành, bạn cần xác định chính xác thông số kỹ thuật của board HackberryPi CM5 để cấu hình Kernel và Bootloader tương thích.
Sử dụng lệnh lspci và dmidecode trên máy chủ đã cắm board HackberryPi CM5 để lấy thông tin CPU, RAM và các thiết bị ngoại vi.
lspci -vv | grep -i "intel\|realtek\|ethernet"
Kết quả mong đợi: Danh sách các thiết bị phần cứng được nhận diện, bao gồm chipset Intel Atom, bộ điều hợp mạng Realtek hoặc Ethernet controller.
sudo dmidecode -t memory | grep -E "Size|Type|Speed"
Kết quả mong đợi: Thông tin dung lượng RAM (ví dụ: 4GB), loại RAM (DDR4) và tốc độ (MHz) để xác định tham số boot.
sudo lshw -class cpu
Kết quả mong đợi: Thông số chi tiết của CPU (Model, Speed, Core count) để chọn đúng kiến trúc ARM hoặc x86_64 cho cross-compiler. Lưu ý: HackberryPi CM5 thường dùng kiến trúc ARM64 (AArch64) hoặc x86 tùy phiên bản, cần xác định rõ.
Verify kết quả
Bạn đã có danh sách các thành phần phần cứng: CPU model, dung lượng RAM, và các thiết bị I/O. Ghi lại thông tin này vào file ghi chú để dùng trong các bước cấu hình Kernel sau này.
Cài đặt công cụ Cross-compiler (ARM Linux GCC)
Cài đặt dependencies cơ bản
Trên máy chủ build (x86_64 Linux), cần cài đặt các thư viện hỗ trợ để biên dịch Kernel và GCC cross-compiler.
sudo apt-get update && sudo apt-get install -y build-essential bc flex bison libssl-dev libncurses5-dev libelf-dev libgmp-dev libmpc-dev libmpfr-dev liblz4-dev
Kết quả mong đợi: Hệ thống cài đặt thành công các gói công cụ biên dịch và thư viện cần thiết mà không báo lỗi.
Tải và cài đặt ARM GCC từ Linaro
HackberryPi CM5 sử dụng kiến trúc ARM64, do đó cần bộ công cụ GCC được biên dịch sẵn cho mục tiêu aarch64-linux-gnu.
cd /opt
wget https://releases.linaro.org/components/toolchain/binaries/latest-12.2/aarch64-linux-gnu/gcc-linaro-12.2.2-2022.12-aarch64-linux-gnu.tar.xz
tar -xf gcc-linaro-12.2.2-2022.12-aarch64-linux-gnu.tar.xz
Kết quả mong đợi: Thư mục chứa cross-compiler được giải nén tại /opt/gcc-linaro-12.2.2-2022.12-aarch64-linux-gnu.
Cấu hình biến môi trường PATH
Cần thêm đường dẫn thư mục bin của GCC vào biến môi trường PATH để có thể gọi lệnh aarch64-linux-gnu-gcc từ bất kỳ đâu.
export PATH=/opt/gcc-linaro-12.2.2-2022.12-aarch64-linux-gnu/bin:$PATH
echo "export PATH=/opt/gcc-linaro-12.2.2-2022.12-aarch64-linux-gnu/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
Kết quả mong đợi: Biến PATH được cập nhật và lưu vào file ~/.bashrc, cho phép sử dụng cross-compiler ngay lập tức.
Verify kết quả
Kiểm tra xem cross-compiler đã sẵn sàng chưa bằng cách hiển thị phiên bản.
aarch64-linux-gnu-gcc --version
Kết quả mong đợi: Xuất hiện thông tin phiên bản GCC 12.2.2 và mục tiêu aarch64-linux-gnu, xác nhận công cụ đã cài đặt đúng.
Tạo môi trường làm việc và clone nguồn Kernel
Tạo thư mục làm việc (Workspace)
Tạo cấu trúc thư mục chuẩn để tổ chức source code, output build và các file cấu hình, giúp dễ quản lý dự án.
mkdir -p ~/hackberrypi-cm5-build/{kernel,rootfs,bootloader,bin}
cd ~/hackberrypi-cm5-build
Kết quả mong đợi: Thư mục hackberrypi-cm5-build được tạo với các thư mục con tương ứng.
Clone nguồn Kernel Linux từ GitHub
Tải mã nguồn Kernel Linux chính chủ từ repository kernel.org hoặc mirror GitHub. Phiên bản 6.x được khuyến nghị cho kiến trúc ARM64 mới.
cd ~/hackberrypi-cm5-build/kernel
git clone --depth 1 https://github.com/torvalds/linux.git .
Kết quả mong đợi: Mã nguồn Kernel Linux được tải về và đặt trực tiếp trong thư mục ~/hackberrypi-cm5-build/kernel mà không tạo thêm thư mục con.
Cập nhật Git Submodules
Kernel thường yêu cầu các thư viện phụ thuộc (như dtc, kconfig) được quản lý qua submodules, cần khởi tạo chúng để build thành công.
cd ~/hackberrypi-cm5-build/kernel
git submodule update --init --recursive
Kết quả mong đợi: Các thư mục phụ thuộc như scripts/dtc, scripts/kconfig được tải về đầy đủ.
Verify kết quả
Đảm bảo thư mục source đã có đầy đủ file Makefile và file cấu hình mặc định.
ls -lh ~/hackberrypi-cm5-build/kernel/Makefile
cat ~/hackberrypi-cm5-build/kernel/Makefile | grep VERSION
Kết quả mong đợi: File Makefile tồn tại và hiển thị phiên bản Kernel (ví dụ: VERSION = 6).
Tài liệu tham khảo và sơ đồ kiến trúc hệ thống
Tài liệu tham khảo chính thức
Để hiểu rõ cách Kernel tương tác với phần cứng HackberryPi CM5, cần tham khảo các tài liệu sau trong quá trình phát triển.
- Linux Kernel Documentation: https://www.kernel.org/doc/html/latest/
- ARM Architecture Reference Manual: Tài liệu kỹ thuật từ ARM Holdings về kiến trúc AArch64.
- Device Tree Source (DTS): Tài liệu mô tả phần cứng trong thư mục
arch/arm64/boot/dts của Kernel.
- U-Boot Documentation: Tài liệu về bootloader cho các board sử dụng SoC tương thích.
Kết quả mong đợi: Bạn đã có danh sách các nguồn tài liệu cần thiết để tra cứu khi gặp lỗi hoặc cần cấu hình chi tiết.
Sơ đồ kiến trúc hệ thống HackberryPi CM5
Hiểu rõ luồng khởi động và các thành phần phần mềm trong hệ thống là bước quan trọng trước khi bắt đầu build.
+-----------------------+
| Power On Reset |
+-----------+-----------+
|
v
+-----------------------+
| Boot ROM (Hardware) |
+-----------+-----------+
|
v
+-----------------------+
| U-Boot (Bootloader) |
| - SPL (Secondary) |
| - Main U-Boot |
+-----------+-----------+
|
v
+-----------------------+
| Linux Kernel |
| - Decompression |
| - Device Tree Load |
| - Early Init |
+-----------+-----------+
|
v
+-----------------------+
| Initramfs / Rootfs |
| - Init Process (1) |
| - Userspace Apps |
+-----------------------+
Kết quả mong đợi: Bạn đã nắm được luồng dữ liệu từ khi cấp điện cho đến khi hệ điều hành người dùng (Rootfs) hoạt động hoàn chỉnh.
Verify kiến trúc
Đảm bảo bạn đã hiểu vai trò của từng thành phần trong sơ đồ trên, đặc biệt là mối liên hệ giữa U-Boot và Kernel thông qua Device Tree Blob (DTB).
Bước này hoàn tất việc chuẩn bị môi trường. Bạn đã có phần cứng được kiểm tra, công cụ biên dịch cài đặt, source code Kernel sẵn sàng và kiến trúc hệ thống rõ ràng.
Điều hướng series:
Mục lục: Series: Xây dựng hệ điều hành Linux từ source cho HackberryPi CM5
Phần 2: Cấu hình Kernel Linux cho kiến trúc ARM »