如何使用VScode DebugKernel

如何使用VScode Debug Kernel

作者:jiangrenbin329@gmail.com

1. 首先安装Linux-lab

安装地址及方法:Linux-lab

2. VMware Ubuntu 环境准备
  • 安装VScode插件:Native Debug, C/C++等相关插件,其他插件根据自己需要再添加
  • VMware中的host(Ubuntu 18.04)相关环境配置:
$ sudo mkdir -p /labs/linux-lab
$ sudo ln -s /home/book/workspace/project/docker/cloud-lab/labs/linux-lab/linux-stable/labs/linux-lab/linux-stable # 注意要用绝对路径

这一步做软链接是因为在linux-lab中我们的根目录是/labs/linux-lab,vmlinux的符号也是使用的这个路径,否则会提示找不到该文件

3. Linux-lab 环境准备
  • 设置交叉编译工具:
$ vim boards/aarch64/virt/Makefile
$ # 将 CCORI   ?= internal 这一行修改为你本地已有的编译工具
$ # 查看本地已有的工具链
$ make toolchain-list

Listing prebuilt toolchain ...

[ internal gcc-4.9.3 ]:

Remote.:
Local..: /usr/local/bin/
Tool...: aarch64-linux-gnu-gcc
Version: aarch64-linux-gnu-gcc (Linaro GCC 4.9-2015.05) 4.9.3 20150413 (prerelease)
More...: /usr/bin/aarch64-linux-gnu-gcc-4.8 /usr/bin/aarch64-linux-gnu-gcc-4.9.3

[ bootlin 2018.11-1 ]:

Remote.: https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2018.11-1.tar.bz2
Local..: /labs/linux-lab/prebuilt/toolchains/aarch64/aarch64--uclibc--stable-2018.11-1/bin
Tool...: aarch64-linux-gcc
Version: Not downloaded, please download it: make toolchain CCORI=bootlin

[ linaro 7.4.1-2019.02 ]:

Remote.: https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
Local..: /labs/linux-lab/prebuilt/toolchains/aarch64/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin
Tool...: aarch64-linux-gnu-gcc
Version: Not downloaded, please download it: make toolchain CCORI=linaro

[ arm 8.3-2019.03 ]:

Remote.: https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
Local..: /labs/linux-lab/prebuilt/toolchains/aarch64/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
Tool...: aarch64-linux-gnu-gcc
Version: aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0

[ buildroot ]:

Remote.:
Local..: /labs/linux-lab/output/aarch64/buildroot-2019.11-virt/host/usr/bin
Tool...: aarch64-linux-gcc
Version: aarch64-linux-gcc.br_real (Buildroot 2019.11-dirty) 8.3.0

可以看到local有哪些可使用的工具链,如果没有请访问Remote下载到该目录即可,因此我将internal可以改为arm

  • 编译arm64/virt:
$ make BOARD=aarch64/virt
$ make feature f=debug
$ make kernel-olddefconfig
$ make kernel
$ make debug
# LOG: Please run this in another terminal:
# 
#     env PATH=/usr/local/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin aarch64-linux-gnu-gdb /labs/linux-lab/output/aarch64/linux-v5.5-virt/vmlinux

此时打开VScode,文件->将文件夹添加到工作区->linux-lab将整个文件夹都添加到VScode中。

  • 配置Native Debug插件中的luanch.json,我的配置如下:
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        {
            "name": "Debug",
            "type": "gdb",
            "request": "launch",
            "env": null,
            "gdbpath": "/home/book/workspace/project/docker/cloud-lab/labs/linux-lab/prebuilt/toolchains/aarch64/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",
            "target": "${workspaceRoot}/prebuilt/toolchains/aarch64/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",
            "cwd": "${workspaceRoot}",
            "valuesFormatting": "parseText"
        }
    ]
}

其中VScode中的launch.json位置如下:
在这里插入图片描述

gdbpath设置为上面local的路径,保证编译和debug工具版本一致

  • 启动调试:点击VScode上方的运行(R)->启动调试(S),然后会出现如下调试图标
    在这里插入图片描述

接下来会弹出调试窗口,我们需要输入如下命令:

$ # Linux-lab 的IP地址
$ target remote 172.17.0.3:1234
$ # 加载vmlinux
$ file /home/book/workspace/project/docker/cloud-lab/labs/linux-lab/output/aarch64/linux-v5.5-virt/vmlinux

  • 调试控制台的启动日志如下:
target remote 172.17.0.3:1234
Remote debugging using 172.17.0.3:1234
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.

0x0000000040000000 in ?? ()
Not implemented stop reason (assuming exception): undefined
file /home/book/workspace/project/docker/cloud-lab/labs/linux-lab/output/aarch64/linux-v5.5-virt/vmlinux
A program is being debugged already.
Are you sure you want to change the file? 
(y or n) [answered Y; input not from terminal]
Load new symbol table from "/home/book/workspace/project/docker/cloud-lab/labs/linux-lab/output/aarch64/linux-v5.5-virt/vmlinux"? (y or n) [answered Y; input not from terminal]
Reading symbols from /home/book/workspace/project/docker/cloud-lab/labs/linux-lab/output/aarch64/linux-v5.5-virt/vmlinux...
done.

在这里插入图片描述

4.开始调试
  • 调试控制台设置断点:
$ b start_kernel
b start_kernel
Breakpoint 5 at 0xffffffc010a20c04: file /labs/linux-lab/linux-stable/init/main.c, line 577.
$ c
c
Continuing.

Thread 1 hit Breakpoint 5, start_kernel () at /labs/linux-lab/linux-stable/init/main.c:577
577	{

  • 运行:
5.关于编译器优化

运行过程中可能会存在乱序运行问题,这是因为编译器优化的原因:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值