Tôi mới phát triển hạt nhân và tôi muốn biết cách chạy/gỡ lỗi hạt nhân Linux bằng QEMU và gdb. Tôi thực sự đọc cuốn sách của Robert Love nhưng tiếc là nó không giúp người đọc làm thế nào để cài đặt các công cụ thích hợp để chạy hoặc gỡ lỗi hạt nhân ... Vì vậy, những gì tôi đã làm là làm theo hướng dẫn này http://opensourceforu.efytimes.com/2011/02/kernel-development-debugging-using-eclipse/. Tôi đang sử dụng nhật thực như là một IDE để phát triển trên hạt nhân nhưng tôi muốn đầu tiên để có được nó làm việc theo QEMU/gdb. Vì vậy, những gì tôi đã làm cho đến nay là:Làm thế nào để gỡ lỗi hạt nhân Linux với GDB và QEMU?
1) Để biên dịch hạt nhân với:
make defconfig (then setting the CONFIG_DEBUG_INFO=y in the .config)
make -j4
2) Khi biên soạn kết thúc tôi chạy Qemu sử dụng:
qemu-system-x86_64 -s -S /dev/zero -kernel /arch/x86/boot/bzImage
mà khởi động hạt nhân trong trạng thái "đã dừng"
3) Vì vậy, tôi phải sử dụng gdb, tôi thử lệnh sau:
gdb ./vmlinux
chạy chính xác nhưng ... Bây giờ tôi không biết phải làm gì ... Tôi biết rằng tôi phải sử dụng gỡ lỗi từ xa trên cổng 1234 (cổng mặc định được Qemu sử dụng), sử dụng vmlinux làm tệp bảng biểu tượng để gỡ lỗi. Vì vậy, câu hỏi của tôi là: Tôi nên làm gì để chạy hạt nhân trên Qemu, đính kèm trình gỡ lỗi của tôi vào nó và do đó, làm cho chúng hoạt động cùng nhau để làm cho cuộc sống của tôi dễ dàng hơn với sự phát triển hạt nhân.
Cảm ơn rất nhiều nó hoạt động :). Tôi vừa kết thúc để đọc cuốn sách xử lý DDD, nhật thực và gdb được xuất bản bởi báo chí không tinh bột nhưng không có gỡ lỗi từ xa trong cuốn sách này. Hạt nhân của tôi hiện đang khởi chạy nhưng có vẻ như cần thời gian để tải (vì Qemu dường như chỉ sử dụng 1 luồng trên máy của tôi) và hiện bị chặn tại:? kernel_thread_helper + 0x0/0x10. Đó có phải là cách mà hạt nhân sử dụng được tải không? Tôi có nghĩa là, chúng ta không nên có một dấu nhắc lệnh khi nó được nạp? Cảm ơn bạn –
nó hoạt động cho tôi. Tuy nhiên, tôi không biết làm thế nào để buộc hạt nhân dừng lại trên breakpoint sau khi gọi đầu tiên tiếp tục. Ví dụ, tôi đặt một điểm ngắt trong hàm start_kernel nhưng nó sẽ không bao giờ dừng ở đó. Bất kỳ ý tưởng ? – ARH