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

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.lryc.cn/news/209622.html

相关文章:

  • Babylonjs学习笔记(五)——创建PBR材质
  • C++ -- 深入理解多态
  • 【Java】泛型通配符
  • NNDL:作业五
  • OpenAI大模型项目计划表(InsCode AI 创作助手)
  • MyBatis入门的第一个程序
  • React项目中使用zustand状态管理详细教程
  • Linux 扩展 root 文件系统
  • 19c-rac环境安装AHF
  • ESP32网络开发实例-Web控制按钮与硬件状态同步
  • 分享一下怎么做陪诊小程序
  • 【Linux】Linux+Nginx部署项目
  • 【git命令】删除分支
  • LabVIEW开发TDS1000 和TDS2000 系列泰克示波器
  • 1. 两数之和、Leetcode的Python实现
  • TSINGSEE青犀基于AI视频识别技术的平安校园安防视频监控方案
  • 基于LSTM encoder-decoder模型实现英文转中文的翻译机器
  • 世界前沿技术发展报告2023《世界航空技术发展报告》(四)无人机技术
  • 【JAVA学习笔记】48 - 八大常用Wrapper类(包装类)
  • 学习笔记:Splay
  • JAVA中的垃圾回收器(1)
  • Windows 10/11如何恢复永久删除的文件?
  • 【Shell 系列教程】shell介绍(一)
  • 考研数学中放缩法和无穷项求和
  • 计算机网络常识
  • React之Jsx如何转换成真实DOM
  • OpenCV学习(六)——图像算术运算(加法、融合与按位运算)
  • 如何做好一次代码审查,什么样是一次优秀的代码审查,静态代码分析工具有哪些
  • 【Android】一个contentResolver引起的内存泄漏问题分析
  • 2023年正版win10/win11系统安装教学(纯净版)