Kiểm tra yêu cầu phần cứng cho Raspberry Pi Compute Module 5
Đảm bảo bạn có sẵn Compute Module 5 (CM5) và các linh kiện hỗ trợ để eBPF hoạt động ổn định. Thiếu RAM hoặc nguồn điện không ổn định sẽ gây lỗi kernel panic khi load eBPF programs.
Yêu cầu RAM và bộ nhớ
Cần tối thiểu 2GB RAM cho hệ điều hành cơ bản, nhưng để chạy các map eBPF lớn và buffer giám sát, khuyến nghị 4GB hoặc 8GB. Kiểm tra khe RAM trên CM5 hoặc module carrier board.
Kết quả mong đợi: Xác nhận được dung lượng RAM vật lý của CM5 đang sử dụng (ví dụ: 4GB).
Kết nối PCIe và NVMe
CM5 hỗ trợ PCIe Gen 3 x2. Để tối ưu hiệu năng I/O cho logging eBPF, nên dùng NVMe SSD qua adapter M.2 Key-M trên carrier board thay vì SD Card.
Kết quả mong đợi: Xác nhận slot PCIe hoạt động và nhận diện được thiết bị NVMe.
Yêu cầu nguồn điện
Cung cấp nguồn 5V ổn định với dòng tối thiểu 4A (20W) cho CM5 và các thiết bị ngoại vi. Nguồn yếu sẽ gây reset ngẫu nhiên khi CPU tăng xung nhịp để xử lý eBPF.
Verify kết quả: Cấp nguồn và quan sát LED trạng thái trên board, đảm bảo không có hiện tượng nhấp nháy liên tục khi boot.
Tải và chuẩn bị hình ảnh OS Linux tối ưu
Sử dụng Debian Bookworm 64-bit hoặc Raspberry Pi OS 64-bit để tận dụng kiến trúc ARM64. eBPF yêu cầu kernel mới và ABI chuẩn 64-bit.
Tải hình ảnh OS Raspberry Pi OS 64-bit
Tải bản "Lite" để giảm bloatware, phù hợp cho môi trường server/embedded chạy eBPF.
curl -L https://downloads.raspberrypi.com/raspios_lite_arm64.img.xz -o raspbian_lite_arm64.img.xz
Kết quả mong đợi: File hình ảnh OS được tải về thành công với kích thước khoảng 400-500MB.
Ghi hình ảnh OS vào thẻ SD hoặc NVMe
Sử dụng `dd` hoặc `raspi-imager` để ghi OS vào thiết bị lưu trữ. Thay thế `/dev/sdX` bằng đường dẫn thiết bị thực tế (ví dụ: `/dev/mmcblk0` cho SD hoặc `/dev/nvme0n1` cho NVMe).
sudo dd if=raspbian_lite_arm64.img.xz of=/dev/mmcblk0 bs=4M conv=fsync status=progress
Kết quả mong đợi: Lệnh dd chạy xong không báo lỗi, thiết bị lưu trữ đã chứa hệ điều hành.
Cấu hình file config.txt để kích hoạt PCIe và Kernel debug
Mount phân vùng boot (FAT32) và chỉnh sửa file cấu hình để đảm bảo PCIe hoạt động và kernel nhận diện đúng phần cứng cho eBPF.
Đường dẫn file: `/boot/firmware/config.txt` (hoặc `/boot/config.txt` tùy phiên bản).
dtoverlay=pcie-host
arm_64bit=on
enable_uart=1
kernel=zImage
Kết quả mong đợi: File config.txt được ghi đè, thiết bị sẽ boot vào kernel 64-bit với PCIe enabled.
Cấu hình boot để hỗ trợ module BPF
Kernel mặc định của Raspberry Pi OS đã tích hợp BPF, nhưng cần cấu hình boot để đảm bảo các tham số kernel (kernel parameters) cho phép eBPF hoạt động tối đa.
Chỉnh sửa file cmdline.txt
Thêm các tham số để kích hoạt debug info và đảm bảo BPF subsystem được load ngay từ khi khởi động.
Đường dẫn file: `/boot/firmware/cmdline.txt` (hoặc `/boot/cmdline.txt`).
console=serial0,115200 console=tty1 root=PARTUUID=xxxxxxxx-xx-xx ro quiet loglevel=7 bpf_jit_enable=1
Thay `PARTUUID` bằng UUID thực tế của phân vùng root. Lệnh tìm UUID:
lsblk -o NAME,UUID,TYPE
Kết quả mong đợi: File cmdline.txt chứa tham số `bpf_jit_enable=1` và `loglevel=7` để debug.
Kiểm tra cấu hình boot và kernel
Boot vào hệ thống mới cài đặt và kiểm tra xem kernel có hỗ trợ BPF không.
uname -r
cat /boot/vmlinuz-$(uname -r) | strings | grep -i bpf
Kết quả mong đợi: Kernel version >= 6.1 và xuất hiện các chuỗi liên quan đến `bpf` trong binary kernel.
Verify kết quả môi trường
Chạy lệnh kiểm tra xem hệ thống đã sẵn sàng cho eBPF chưa.
ls /sys/kernel/bpf/
grep bpf /boot/config-$(uname -r)
Kết quả mong đợi: Thư mục `/sys/kernel/bpf/` tồn tại và file config kernel có dòng `CONFIG_BPF=y`.
Điều hướng series:
Mục lục: Series: Tối ưu hóa Linux Kernel cho Raspberry Pi CM5 với BPF và eBPF
Phần 2: Cấu hình Kernel và cài đặt công cụ eBPF cần thiết »