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

VScode 调试 linux内核

VScode 调试 linux内核

这里调试的 linux 内核是通过 Linux+SD卡(rootfs)运行的内核

gdb 命令行调试

编辑 /home/tyustli/.gdbinit 文件,参考 【GDB】 .gdbinit 文件

set auto-load safe-path /home/tyustli/code/open_source/kernel/linux-6.5.7/.gdbinit

在 linux 源码项目的根目录新建 .gdbinit 文件

target remote localhost:1234
b start_kernel
layout src
c

先启动 linux 内核,让其等待 GDB 连接

# 启动之后等待 GDB 连接
sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtb -nographic \
-append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd /home/tyustli/code/open_source/busybox/rootfs.ext3 -s -S

# -dtb  指定设备树,否则会失败

在编译 linux 的当前路径输入

arm-none-linux-gnueabihf-gdb vmlinux -se vmlinux

如果没有设置 /home/tyustli/.gdbinit 文件,那么对应的命令为

arm-none-linux-gnueabihf-gdb vmlinux -se vmlinux -x .gdbinit

即指定 .gdbinit 的文件为当前路径。需要注意的是,如果指定了 /home/tyustli/.gdbinit 文件,就不能加 -x .gdbinit

调试界面信息
在这里插入图片描述

VScode 调试

参考 qemu基础篇——VSCode 配置 GDB 调试

要想调试 kernel 只需要再添加一个 kernel 的配置即可

{
    "version": "0.2.0",
    "configurations": [
        {
            // qemu 裸机调试配置
            "name": "qemu_bare",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/qemu_code/bare/example/0020_mmu/bsp.elf",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}/qemu_code/bare",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/home/tyustli/cross_tool/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gdb",
            "miDebuggerServerAddress": "localhost:1234",
        },
        {   // u-boot 调试配置
            "name": "u-boot",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/open_source/u-boot/u-boot",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}/open_source/u-boot",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/home/tyustli/cross_tool/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gdb",
            "miDebuggerServerAddress": "localhost:1234",
        },
        {   // linux kernel 调试配置
        "name": "linux_kernel",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/open_source/kernel/linux-6.5.7/vmlinux",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}/open_source/kernel/linux-6.5.7",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "miDebuggerPath": "/home/tyustli/cross_tool/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gdb",
        "miDebuggerServerAddress": "localhost:1234",
        }
    ]
}

有一点需要注意,如果使用 vscode 调试,就不能指定 /home/tyustli/.gdbinit 文件,或者将 /home/tyustli/code/open_source/kernel/linux-6.5.7/.gdbinit 文件的内容清空

先在 start_kernel打好断点
在这里插入图片描述
先启动 linux 内核,让其等待 GDB 连接

# 启动之后等待 GDB 连接
sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtb -nographic \
-append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd /home/tyustli/code/open_source/busybox/rootfs.ext3 -s -S

启动调试
在这里插入图片描述


http://www.kler.cn/a/108008.html

相关文章:

  • 2024.11.12_大数据的诞生以及解决的问题
  • docker基础:搭建centos7(详见B站泷羽sec)
  • 【算法速刷(9/100)】LeetCode —— 42.接雨水
  • sqlite更新
  • 为什么数学常数在 powershell 中以不同的方式截断?
  • 【AI技术】PaddleSpeech部署方案
  • 【错误解决方案】ModuleNotFoundError: No module named ‘cPickle‘
  • SQL Server Management Studio (SSMS)的安装教程
  • MongoDB的安装
  • 【黑马程序员】mysql进阶再进阶篇笔记
  • 2M大小的PDF文档上传到LangChain-ChatGLM知识图谱中,大致需要的时间
  • 网络协议--TCP的成块数据流
  • C++单调向量算法应用:所有子数组中不平衡数字之和
  • 【ARM Coresight 系列文章19.2 -- Cortex-A720 AMU 详细介绍】
  • Babylonjs学习笔记(五)——创建PBR材质
  • Proteus仿真--闪烁的LED灯
  • 应用案例|基于三维机器视觉的曲轴自动化上下料应用方案
  • 配置两个网关之间通过IPSec VPN互联并通过总部IPSec网关进行NAT后上网
  • Django之登录注册
  • Redis快速上手篇七(集群-一台虚拟机六个节点)
  • 3.6 纹理压缩——包体瘦身术
  • 【经验总结】ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文
  • day36(http协议 服务器软件的使用 PHP的简单了解 前后端交互 ajax 同步和异步)
  • Hadoop 请求数据长度 Requested Data length 超过配置的最大值
  • Macos文件图像比较工具:Kaleidoscope for Mac
  • Tomcat最大并发数及在线用户数