Zephyr 源码调试

背景

调试环境对于学习源码非常重要,但嵌入式系统的调试环境搭建稍微有点复杂,需要的条件略多。本文章介绍如何在 Zephyr 提供的 qemu 上调试 Zephyr 源码,为后续分析 Zephyr OS 相关原理做铺垫。

环境

我的开发环境为 wsl ubuntu,对于 windows 也是同样的原理。基于 vscode 图形化界面有利于阅读源码,其基本原理是 vscode 通过 gdb 连接(tcp 通信) qemu 运行起来的 gdb server。

编译并运行 qemu

通过以下命令编译 qemu_cortex_m3 bsp

west build -b qemu_cortex_m3 samples/hello_world/ -d samples/hello_world/build

-b 指定目标 bsp
-d 指定编译文件生成的目录(cmake 生成的相关文件)

进入到 build 目录后,通过以下命令启动 qemu

ninja debugserver

vscode 环境搭建

创建 debug 配置文件 launch.json,如下图:

请添加图片描述

编辑 launch.json 文件,并修改部分配置:

{
   
    "version": "0.2.0",
    "configurations": [
        {
   
            "name": "zephyr",
            "type": "cppdbg", // 需要安装 C/C++ 插件
            "request": "launch",
            "program": "/home/null/zephyrproject/zephyr/samples/hello_world/build/zephyr/zephyr.elf",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceRoot}",
            "externalConsole": true,
            "miDebuggerServerAddress": "localhost:1234", // 指定 gdb server 端口,默认端口为 1234
            "serverLaunchTimeout": 2000,
            "targetArchitecture": "ARM",
            "launchCompleteCommand": "exec-run",
            "MIMode": "gdb",
            "miDebuggerPath": "/home/null/zephyr-sdk-0.16.4/arm-zephyr-eabi/bin/arm-zephyr-eabi-gdb",
            "setupCommands": [
                {
   
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
    ]
}

点击左侧小虫子,如下图:

请添加图片描述

最终调试窗口如下图:

请添加图片描述
这样就能调试整个 Zephyr 源码了,并且不需要真实的嵌入式环境,建议把优化等级调为 O0,Zephyr 默认优化等级为 Os

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 01:52:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 01:52:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 01:52:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 01:52:02       18 阅读

热门阅读

  1. WEB字符串包装以及BOM编程

    2024-01-26 01:52:02       27 阅读
  2. 2024-01-25 精神分析-内在自我-单一支持体系-分析

    2024-01-26 01:52:02       29 阅读
  3. Git学习笔记:3 git tag命令

    2024-01-26 01:52:02       41 阅读
  4. python如何使用jieba分词

    2024-01-26 01:52:02       34 阅读
  5. PHP AES加解密系列

    2024-01-26 01:52:02       37 阅读
  6. VR建筑学仿真教学

    2024-01-26 01:52:02       41 阅读
  7. 关于数据库被勒索如何解决?

    2024-01-26 01:52:02       33 阅读
  8. oracle ADG数据库开启审计

    2024-01-26 01:52:02       33 阅读
  9. How to Convert an Enum to a Number in TypeScript

    2024-01-26 01:52:02       32 阅读
  10. LeetCode 2865. 美丽塔 I,前后缀分离+单调栈

    2024-01-26 01:52:02       36 阅读