qemu 模拟器运行 linux,然后通过 gdb 调试 linux 内核源码。 前段时间曾出过两个视频,比较粗糙,最近重新整理了一下环境搭建流程,还加入了网桥搭建流程,可以调试 linux 内核虚拟网卡的驱动部分源码。 文章来源:搭建Linux 内核网络调试环境(vscode + gdb + qemu) 1. 环境 macos + vmware + ubuntu + gdb + qemu...
1. 配置QEMU以支持GDB调试 要启用GDB调试,你需要在启动QEMU时指定一些参数。通常,你需要指定-s(开启TCP gdb服务器,默认端口1234)和-S(在CPU初始化后停止执行,等待GDB连接)参数。例如,如果你正在启动一个基于x86架构的虚拟机,并希望加载一个名为vm.img的镜像,可以使用如下命令: bash qemu-system-x86_64 -s -...
应该指定编译的gdb是arm类型的,不然后面用gdb作为客户端连接qemu调试的时候会报错。其中有一个报错是:Target description specified unknown architecture "arm",这报错什么意思呢?就是当你用gdb客户端连接到了qemu服务端,qemu返回了一段xml格式关于arm的信息,而适配x86的gdb客户端发现对不上,于是开始抛出一大堆的错误,...
一、QEMU调试模式 在Windows的cmd命令行中输入如下一行命令: qemu-system-i386 d:\GrapeOS\VMShare\GrapeOS.img -S -s 上面这行命令比之前多了两个参数,“-S”表示让CPU在将要执行第一条指令前暂停,“-s”表示让QEMU打开自带的GDB服务端功能,且网络端口号是1234。截图如下: 执行上面的命令后,会弹出QEMU的...
需要让qemu启动时停下来等待gdb的连接 run.sh脚本修改成如下内容: qemu-9.1.1/build/qemu-system-riscv64 -M virt -m 4G \ -bios opensbi/build/platform/generic/firmware/fw_jump.bin \ -kernel linux-6.11.4/arch/riscv/boot/Image \ -initrd buildroot-2024.08.1/output/images/rootfs.cpio \ ...
依然是先运行qemu: ./run.sh -S -s 重新开启一个终端,输入如下命令: gdb-multiarch vmlinux 之后在gdb命令行执行: target remote:1234 此时就可以设置断点进行调试了,注意只能设置MMU开启之后的断点: 注意上图中的断点是start_kernel不是MMU开启之前的_start_kernel,不带下划线 ...
QEMU是一款开源的虚拟化软件,可以模拟多种硬件平台,包括x86、ARM等。GDB是一款强大的调试工具,可以用于调试各种程序,包括操作系统内核。 要使用QEMU和GDB调试内核,可以按照以下步骤进行: 编译内核:首先,需要获取内核源代码,并进行编译。可以根据具体的内核版本和架构选择合适的源代码和编译方式。编译时需要开启调试信息的...
当主机使用gdb调试时,gdb和qemu中内置的gdbserver就使用上述模型进行交互,从而对qemu虚拟机进行调试。如gdb调试端发送x/ <n/f/u> <addr>表示读取addr处的内容,命令经RSP协议封装成数据包发送至qemu的gdbserver端,gdbserver收到数据包后对其进行校验,校验成功后进行解析处理并返回至gdb客户端。
4.1QEMU程序的命令行 4.2 启动gdb 参考文档 一直想搭建一个debug kernel的环境,这样的话就可以对kernel启动的各个部分,运行过程中的特定部分进行定位,跟踪,调试,尤其是启动阶段。如果没有debug kernel的环境,那么我们只有使用其他方式来进行调试,例如printk。当然还有kgdb,不过此次不讨论此方式。
qemu-system-x86_64 -s -S -kernel bzImage -hda rootdisk.img -append "root=/dev/hda" QEMU启动后会静默等待gdb连接。 然后在vmlinux可执行文件上启动gdb: > gdb vmlinux 在gdb中,连接到QEMU: (gdb) target remote localhost:1234 之后就可以正常使用gdb了。例如,输入c来启动内核: ...