GDB+QEMU调试Linux内核

本文介绍了如何使用qemu创建ARM64架构虚拟机,并通过gdb-multiarch进行远程调试。首先,安装gdb工具包,然后运行带有调试参数的qemu虚拟机。接着,在另一终端启动gdb并连接到虚拟机的1234端口。设置断点后,可以开始内核调试,当执行到start_kernel函数时会暂停,从而实现内核级别的调试。
摘要由CSDN通过智能技术生成

1. 使用qemu创建虚拟机

使用qemu创建ARM64架构虚拟机可以参考我的另一篇博客:Ubuntu18.04使用qemu搭建ARM64架构虚拟机(二)

2. 安装gdb-multiarch工具包

sudo apt install gdb-multiarch

3. 运行qemu虚拟机

进入linux-5.0.2目录,运行如下命令:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -smp 1  -m 2048 -kernel ./arch/arm64/boot/Image -append "console=ttyAMA0 sched_debug" $1 $2 -S -s

和直接启动qemu虚拟机的区别主要是:

  • 向内核传递的参数中添加了sched_debug
  • -S 表示QEMU虚拟机会冻结CPU,直到远程的GDB输入相应的控制命令。
  • -s 表示在1234端口接收GDB调试连接。

在这里插入图片描述

运行命令后,光标会停在下一行闪烁,等待我们启动GDB调试。

4. 启动GDB

接下来,也是在linux-5.0.2目录下打开另一个终端,运行如下命令:

gdb-multiarch --tui vmlinux

在这里插入图片描述
r,回车。
在这里插入图片描述
然后输入:

(gdb) set architecture aarch64
(gdb) target remote localhost:1234

设置AArch64架构,通过远程端口连接到QEMU虚拟机。

在这里插入图片描述
然后就可以使用 GDB 命令调试内核了。

5. 开始调试内核

我们先在start_kernel处设置一个断点,然后使用c命令开始运行。

在这里插入图片描述
此时就会在start_kernel函数处停止,等待我们继续输入调试命令

在这里插入图片描述
按c继续执行,内核就会接着运行。我们发现在qemu虚拟机终端,虚拟机成功启动,显示登录命令。

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值