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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/345413.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG

原理 LlamaIndex的文档链接:Using LLMs - LlamaIndex 🦙 0.9.33 LlamaIndex 的一般使用模式如下: 加载文档(手动或通过数据加载器)将文档解析为节点构建索引(来自节点或文档)(可选,高级&…

Java内存模型

主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量包括实例变量、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为局部变…

GreptimeAI + Xinference 联合方案:高效部署并监控你的 LLM 应用

随着人工智能技术的迅速进步,OpenAI 已经崭露头角,成为该领域的领军者之一。它在多种语言处理任务上表现卓越,包括机器翻译、文本分类和文本生成等方面。随着 OpenAI 的兴起,同时涌现的还有许多其他优质的开源大语言模型&#xff…

函数递归(Recursion)一篇便懂

递归的概念 在 C 语言中,递归(Recursion)是一种函数调用自身的编程技术。当一个函数在其定义中调用自身时,就称为递归函数。 了解递归思想 把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解…

OpenAI Altman曝光GPT-5后,你对未来大模型有什么期待?

最近OpenAI首席执行官 Sam Altman 在达沃斯论坛接受媒体采访时表示,他现在的首要任务就是推出下一代大模型,这款模型可能被称为GPT-5,与现有模型相比,GPT-5 “能做更多、更多的事情”。 Altman认为GPT-5仍处于早期阶段&#xff0…

运维神器Ansible的常用模块

引言:话不多说,今天分享一下Ansible的常用模块,建议收藏哦 1、ping模块 ping模块可以进行主机连通性测试 命令格式 ansible 主机或主机组 -m ping 例,成功显示如下: 2、command 模块 command模块可以直接在远程主机…

java并发面试题

目录 一.线程基础 1.线程和进程的区别 2.并行和并发的区别 3.创建线程的方式 4.线程包括哪些状态,状态之间如何变化 5.如何保证线程间按顺序执行 6.notify()和notifyAll()的区别 7.java中wait和sleep方法的区别 8.如何停止正在运行的线程 二.线程安全 1.synchronized…

springboot121编程训练系统设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的编程训练系统设计与实现 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四…

liunx服务异常分析

systemd-journald 服务分析系统日志 实验环境:本地 Centos 7 请勿在 vps 服务器上操作!!! 1 systemd-journald 介绍 systemd-journald 是一个收集并存储各类日志数据的系统服务。 它创建并维护一个带有索引的、 结构化的日志数据…

浅谈WPF之UI布局

一个成功的软件,离不开人性化的UI设计,如何抓住用户第一视觉,让用户产生依赖感,合适优雅的布局必不可少。本文以一些简单的小例子,简述WPF中布局 面板 控件的使用,仅供学习分享使用,如有不足之处…

学习笔记-李沐动手学深度学习(二)(08-09、线性回归、优化算法、Softmax回归、损失函数、图片分类)

总结 以_结尾的方法,好像是原位替换(即 原地修改,就地修改变量)如 fill_() 感恩的心:(沐神的直播环境) 08-线性回归基础优化算法 引言(如何在美国买房) 根据现在行…

51单片机ESP8266

一、MQTT透传AT固件 安信可提供的烧录WiFi固件工具: 链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72 安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB 经过测试,选择这个不可以…

LeetCode刷题---删除排序链表中的重复元素 II

解题思路: 1.首先定义虚拟节点dummy,dummy的下一个节点指向head节点。 2.定义辅助节点cur指向dummy节点 3.开始遍历链表,如果当前节点cur的下一个节点和下下一个节点都不为空的情况下,对cur的下一个节点和下下一个节点的值进行判断。 4.如果当前节点cur的…

Python基础第九篇(Python可视化的开发)

文章目录 一、json数据格式(1).转换案例代码(2).读出结果 二、pyecharts模块介绍三、pyecharts模块入门(1).pyecharts模块安装(2).pyecharts模块操作(1).代码…

洛谷刷题-【入门2】分支结构

目录 1.苹果和虫子 题目描述 输入格式 输出格式 输入输出样例 2.数的性质 题目描述 输入格式 输出格式 输入输出样例 3.闰年判断 题目描述 输入格式 输出格式 输入输出样例 4.apples 题目描述 输入格式 输出格式 输入输出样例 5.洛谷团队系统 题目描述 …

什么是信号抖动

对于抖动,有一个简单而直观的定义: “Jitter is defined as the short-term variations of a digital signal’s significant instants from their ideal positions in time.” 翻译过来,就是: “抖动被定义为一个数字信号的重要时…

Duplicate keys detected: ‘41172‘. This may cause an update error.

在写项目的过程中,遇到了 Duplicate keys detected: 41172. This may cause an update error. 这个错误具体错误信息如下: 原因:v-for 循环时,用了重复的key值 解决方案: 1、单个v-for循环,选择id或其他唯一…

【C++杂货铺】快速学会命名空间

目录 🌈前言 📁 命名空间的定义 📁 命名空间的使用 ● 加命名空间名称及作用域限定符 ● 使用using将命名空间中某个成员引入 ● 使用using namespace 命名空间名称 引入 📁 C输入 和 输出 📁 总结 &#x1f3…

微信小程序首页、界面布局、功能简洁(示例三)

微信小程序首页界面布局、页面简洁,功能简单 直接上具体代码: 1、js代码 Page({/*** 页面的初始数据*/data: {imgList: [../../images/demo.jpg, ../../images/demo.jpg, ../../images/demo.jpg],navList: [{src: ../../images/nav1.png,title: 菜单一}…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机

文章目录 第 2章感知机2.1 感知机模型2.2 感知机学习策略2.2.1 数据集的线性可分性2.2.2 感知机学习策略 2.3 感知机学习算法2.3.1 感知机学习算法的原始形式2.3.2 算法的收敛性2.3.3 感知机学习算法的对偶形式 实践:二分类模型(iris数据集)数…