实验4-1:通过QEMU调试ARM64 Linux内核
1.实验目的
熟悉如何使用 QEMU 调试 Linux 内核。
本实验调试 ARM64 的处理器。
2.实验步骤
(一)在Linux主机上确保安装了aarch64-linux-gnu-gcc 和 QEMU 工具包
查看aarch64-linux-gnu-gcc版本
aarch64-linux-gnu-gcc -v
安装qemu:
sudo dnf install qemu
(二)调试阶段
下载linux内核(本实验使用编译的内核是Linux2.6 30)
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.tar.bz2
tar –jxvf linux2.6.30.tar.bz2
cdlinux-2.6.30
下面我们需要编译自己的内核,产生image文件bzImage和内核ELF文件vmlinux
make menuconfig
make
编译后会在./arch/x86/boot/ 下生成bzImage文件:
注:编译时间很长,由于我没有对内核进行裁剪,以后编译时可以参考:
http://lamp.linux.gov.cn/Linux/kernel_options.html来对配置文件进行裁剪,对不需要的模块要进行裁剪,可以采用先剪裁几个模块后进行编译,没有错误后再进行裁剪编译,最大程度上上保持内核配置的正确性,在这方面必须要加强,不能拿来个内核全都编译,这样时间和空间都是种浪费。
运行qemu,启动调试模式
qemu –S–kernel arch/x86/boot/bzImage –had ubuntu9.10_32.img –append “root=dev/had”
系统跳出一个黑显示界面,无任何内容,此时通过ctrl+alt+1与ctrl+alt+2可以切换,ctrl+alt+2是qemu控制台,ctrl+alt+1是屏幕输出。
现在我切换到qemu控制台(ctrl+alt+2)
(qemu)gdbserver 1234
此时需要另打开一个终端,进入linux2.6.30源码目录下:
gdbvmlinux
(gdb)target remote localhost:1234
(三)调试编译
这时就可以正常使用gdb编译内核了
设置断点break start_kernel,停在linux内核的第一个c程序之上:
实验 4-2:通过 Eclipse+QEMU 单步调试内核
1.实验目的