在qemu虚拟机环境下,使用kgdb调试kernel

enable kgdb的情况下,使用qemu启动kernel

1,需要先在内核配置中增加kgdb的支持

2,启动qemu虚拟机时,增加参数-s -S,这两个参数会使得kernel在启动之后遇到的第一个指令等待gdb连接

例子:

/qemu-project/qemu/aarch64-softmmu/qemu-system-aarch64 -s -S -machine virt -cpu cortex-a57 -machine type=virt -m 1024 -smp 2 -nographic -kernel arch/arm64/boot/Image -drive format=raw,file=./rootfs_ext4.img -append "noinitrd root=/dev/vda rw console=ttyAMA0 loglevel=8" -fsdev local,id=kmod_dev,path=$PWD/kmodules,security_model=none -device virtio-9p-device,fsdev=kmod_dev,mount_tag=kmod_mount

使用gdb连接kgdb开始调试

1,使用指令aarch64-linux-gnu-gdb vmlinux,开始gdb调试

这里使用的是arm64的gdb版本,而且已经export了其安装路径,如果你们有export则需要指定gdb的绝对路径,同样vmlinux镜像的位置也需要指定。

2,在命令行中,输入target remote:1234 连接到kgdb server开始调试

layout regs

在gdb中输入: layout regs可以把所有的寄存器都显示出来

例如你可以跟踪当在终端上按下ctrl+c发生了什么,增加断点,进而观察系统的运行状态

kernel first instructions

从前面的截图可以看到,此时寄存器PC指向的是0x40000000 这个地址,可以理解为kernel启动的地址为0x40000000

相关推荐

  1. QEMU搭建arm虚拟开发环境

    2024-01-12 10:48:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-12 10:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-12 10:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-12 10:48:02       82 阅读
  4. Python语言-面向对象

    2024-01-12 10:48:02       91 阅读

热门阅读

  1. B_Tree 的数据结构

    2024-01-12 10:48:02       60 阅读
  2. Python 单例模式解析复杂数组返回不同的值

    2024-01-12 10:48:02       55 阅读
  3. 网络指令(ipconfig | netstat | tasklist)

    2024-01-12 10:48:02       56 阅读
  4. C++学习笔记(二十一)

    2024-01-12 10:48:02       40 阅读
  5. 判断一个括号串中的括号是否为匹配。

    2024-01-12 10:48:02       55 阅读