Thiết Lập Môi Trường Gỡ Lỗi Nhân Linux 5.8.6 Với QEMU 4.2.0 Trên Ubuntu 20.04

1. Chuẩn Bị Môi Trường Và Cài Đặt Công Cụ

Đối với các kỹ sư phát triển hệ thống, khả năng gỡ lỗi nhân Linux là vô cùng thiết yếu. Thay vì can thiệp trực tiếp vào hệ thống vật lý có thể gây ra những hậu quả khó lường và việc khôi phục trạng thái môi trường phức tạp, một phương pháp hiệu quả hơn là sử dụng máy ảo. Hướng dẫn này sẽ trình bày các bước chi tiết để xây dựng một môi trường gỡ lỗi nhân Linux 5.8.6 hoàn chỉnh trên Ubuntu 20.04, tận dụng sức mạnh của QEMU 4.2.0, đồng thời chỉ ra những điểm cần lưu ý trong quá trình cấu hình. Để khởi đầu, chúng ta cần đảm bảo hệ thống Ubuntu 20.04 đã sẵn sàng với các công cụ phát triển cần thiết. Hầu hết các gói này đều có sẵn trong kho lưu trữ mặc định của Ubuntu. Trước tiên, cập nhật danh sách gói và nâng cấp hệ thống để đảm bảo mọi thứ được đồng bộ:
sudo apt update && sudo apt upgrade -y
Tiếp theo, cài đặt bộ công cụ biên dịch cơ bản và các thư viện hỗ trợ cần thiết cho quá trình xây dựng nhân Linux:
sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev -y
QEMU là nền tảng ảo hóa chính mà chúng ta sẽ sử dụng để chạy nhân Linux. Phiên bản 4.2.0 đã có sẵn trong kho của Ubuntu 20.04:
sudo apt install qemu-system-x86 qemu-kvm -y
Để xác nhận phiên bản QEMU đã được cài đặt chính xác, bạn có thể chạy lệnh sau:
qemu-system-x86_64 --version
Kết quả hiển thị dự kiến sẽ là:
QEMU emulator version 4.2.0
Cuối cùng, cài đặt các công cụ hỗ trợ gỡ lỗi và quản lý mã nguồn như GDB (GNU Debugger), Git, cùng với các tiện ích tải xuống tệp:
sudo apt install gdb git curl wget -y

2. Tải Mã Nguồn Và Biên Dịch Nhân Linux

Việc biên dịch nhân Linux là bước cốt lõi để tạo ra môi trường gỡ lỗi. Chúng ta sẽ sử dụng phiên bản nhân 5.8.6, một phiên bản được biết đến với tính ổn định.

2.1 Tải Mã Nguồn Nhân

Lấy mã nguồn nhân từ trang chính thức bằng lệnh `wget`, sau đó giải nén và di chuyển vào thư mục chứa mã nguồn:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.6.tar.xz
tar xvf linux-5.8.6.tar.xz
cd linux-5.8.6

2.2 Cấu Hình Nhân

Cấu hình là giai đoạn cực kỳ quan trọng, đảm bảo nhân có thể khởi động trong QEMU và hỗ trợ tính năng gỡ lỗi. Khởi tạo cấu hình mặc định cho kiến trúc x86_64 làm cơ sở:
make x86_64_defconfig
Sau đó, tùy chỉnh các tùy chọn bằng giao diện `menuconfig` trực quan:
make menuconfig
Trong giao diện cấu hình, điều hướng và kích hoạt các tùy chọn sau để hỗ trợ gỡ lỗi và khởi động trong môi trường ảo hóa:
  • Kernel hacking → Compile-time checks and compiler options:
    • Chọn "Compile the kernel with debug info" (CONFIG_DEBUG_INFO): Đây là tùy chọn cực kỳ quan trọng, cho phép GDB đọc thông tin gỡ lỗi của nhân.
    • Chọn "Provide GDB scripts for kernel debugging" (CONFIG_GDB_SCRIPTS): Cung cấp các script hỗ trợ GDB trong quá trình gỡ lỗi nhân.
  • Device Drivers → Block devices:
    • Chọn "RAM block device support" (CONFIG_BLK_DEV_RAM): Hỗ trợ thiết bị khối RAM, cần thiết để nhân có thể sử dụng initramfs.
    • Đặt "Default RAM disk size (kbytes)" thành 65535: Định nghĩa kích thước mặc định cho RAM disk.
  • General setup:
    • Chọn "Initial RAM filesystem and RAM disk (initramfs/initrd) support" (CONFIG_BLK_DEV_INITRD): Cho phép nhân sử dụng initramfs (initial RAM filesystem) để khởi tạo hệ thống tập tin gốc tạm thời.
Sau khi hoàn tất cấu hình theo các yêu cầu trên, lưu lại và thoát khỏi `menuconfig`.

2.3 Biên Dịch Nhân

Sử dụng lệnh `make` với tùy chọn `-j$(nproc)` để tận dụng tất cả các lõi CPU hiện có, giúp tăng tốc độ biên dịch đáng kể:
make -j$(nproc)
Quá trình biên dịch có thể mất một khoảng thời gian tùy thuộc vào cấu hình hệ thống của bạn. Sau khi hoàn tất, ảnh nhân nén `bzImage` sẽ được tạo ra tại đường dẫn `arch/x86_64/boot/bzImage`. Đây là tệp tin chính mà QEMU sẽ sử dụng để khởi động máy ảo.

3. Xây Dựng Hệ Thống Tệp Gốc Tối Thiểu

Để nhân Linux có thể khởi động và hoạt động, nó cần một hệ thống tệp gốc (root filesystem). Chúng ta sẽ tạo một hệ thống tệp gốc tối thiểu sử dụng BusyBox.

Thẻ: Linux kernel qemu GDB Kernel Debugging Ubuntu 20.04

Đăng vào ngày 29 tháng 10 lúc 01:50