当前位置: 首页 > news >正文

使用qemu运行与GDB调试内核

目录

一、前期准备

二、内核编译

三、QEMU与GDB

1、QEMU调试参数

2、gdb vmlinux


一、前期准备
  • 内核镜像:bzimage

  • gdb:x86_64

  • QEMU:qemu-system-x86_64

  • 前置知识:

    (1)内核编译

    (2)通过busybox制作initramfs

    (3)qemu运行内核

二、内核编译

1、设置调试选项:make menuconfig

make menuconfig  --->Kernel hacking  --->Compile-time checks and compiler options  --->DWARF version (Rely on the toolchain's implicit default DWARF version)  --->(X) Rely on the toolchain's implicit default DWARF version

2、内核编译:make -j$(nproc))

编译结果:

-rw-r--r--   1 root root   5371114  8月  9 14:03 System.map            // ELF文件 
-rwxr-xr-x   1 root root 307967696  8月  9 14:03 vmlinux			   // 符号映射表root@zh-vm:/home/WorkSpace/linux-5.14# file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, 
BuildID[sha1]=9a3f41d57e80433fed09832f9986319e48b13571, with debug_info, not strippedroot@zh-vm:/home/WorkSpace/linux-5.14# vim System.map 
... ...
ffffffff82b491e4 T __early_make_pgtable
ffffffff82b49410 T do_early_exception
ffffffff82b49452 T x86_64_start_reservations
ffffffff82b49472 T x86_64_start_kernel
ffffffff82b494f4 T reserve_bios_regions
ffffffff82b49547 T x86_early_init_platform_quirks
ffffffff82b495ca T x86_pnpbios_disabled
ffffffff82b495d5 t set_reset_devices
ffffffff82b495e5 t debug_kernel
ffffffff82b495f2 t quiet_kernel
ffffffff82b495ff t init_setup
... ...
三、QEMU与GDB
1、QEMU调试参数
  • cmdlink:nokaslr (禁用内核地址空间随机布局)
  • -S:开启时阻塞CPU执行
  • -s:开启GDB服务器,端口1234
  • -gdb tcp::1234 开启GDM服务器,端口可以自己指定
2、gdb vmlinux
  • target remote: 1234
  • break start_kernel
  • continue
  • step

运行的时候需要稍微改一下Makefile

root@zh-vm:/home/WorkSpace/build# cat Makefile 
initramfs:cd /home/WorkSpace/initramfs && find . -print0 | cpio -ov --null --format=newc | gzip -9 > /home/WorkSpace/build/initramfs.imgcpimage:cp /home/WorkSpace/linux-5.14/arch/x86_64/boot/bzImage ./bzImagerun:qemu-system-x86_64 \-kernel bzImage \-initrd initramfs.img \-m 512 \-nographic \-append "earlyprintk=serial,ttyS0 console=ttyS0 nokaslr" \-S \-s

运行测试:


http://www.dtcms.com/a/323040.html

相关文章:

  • 解决python错误:playwright._impl._errors.TimeoutError: Timeout 30000ms exceeded.
  • STM32——时钟系统
  • BMS三大领域:电池、楼宇与业务管理系统解析
  • STranslate(翻译OCR工具) v1.5.4.801绿色版,屏幕文字秒译,OCR识别零门槛
  • C++ unordered_map 和 unordered_set 的使用
  • 神经网络-local minima and saddle point
  • 【linux基础】Linux目录和Windows目录的区别
  • ACF插件编辑器无法插入相册的原因及解决方案
  • 黑马点评07 - 附近商户/用户签到/UV统计
  • 【Python 高频 API 速学 ⑦ · 完结篇】
  • CrystalDiskInfo 9.0.1 安装教程 - 硬盘检测工具下载安装步骤详解
  • 【智能穿戴设备】2025智能穿戴隐私危机:数据安全保障技术深度剖析
  • RecyclerView 中 ViewHolder
  • C# OnnxRuntime yolov8 纸箱检测
  • 动态规划(相同地方不同状态)
  • 如何控制需求交付节奏
  • 【数据分析】03 - pandas
  • 深入解析QUIC协议:下一代音视频传输技术的突破与实践
  • 前端如何安全存储 API 密钥 —— 两种实用方案
  • 动手学深度学习(pytorch版):第二章节——预备知识(1)——数据操作
  • pytorch llm 计算flops和参数量
  • 【C++】继承机制全解析
  • Spring-rabbit使用实战七
  • 48伏电气系统—— 铺就电动出行之路的关键技术
  • 大语言模型中的幻觉
  • 24SpringCloud黑马商城微服务整合Seata重启服务报错的解决办法
  • 使用SymPy lambdify处理齐次矩阵的高效向量化计算
  • Poetry与UV——现代Python依赖管理的革新者
  • GitHub 趋势日报 (2025年08月08日)
  • java10学习笔记