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.mzph.cn/news/645941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 击穿、穿透、雪崩产生原因解决思路

大家都知道,计算机的瓶颈之一就是IO,为了解决内存与磁盘速度不匹配的问题,产生了缓存,将一些热点数据放在内存中,随用随取,降低连接到数据库的请求链接,避免数据库挂掉。需要注意的是,无论是击穿…

Javascript事件循环模型之同步和异步

1、前言 众所周知Javascript是⼀⻔单线程语⾔,这也就决定了在Javascript中默认情况下同一个时间只能做一件事情,这个特性就造成了js的一些局限性,比如我们的页面需要发送HTTP请求从服务器获取数据时,就会出现等待数据返回之前页面…

如何快速上手Python开发以及学习资料推荐

学习Python并快速上手项目开发,需要制定一个系统的学习计划和实践策略。我的个人建议是: 基础知识入门: 安装Python环境:首先确保在电脑上安装了Python(建议从官方网站python.org下载最新稳定版)&#xff0…

逻辑回归中的损失函数梯度下降

一、引言 逻辑回归中的损失函数通常采用的是交叉熵损失函数(cross-entropy loss function)。在逻辑回归中,我们通常使用sigmoid函数将线性模型的输出转换为概率值,然后将这些概率值与实际标签进行比较,从而计算损失。 …

模型选择实战

我们现在可以通过多项式拟合来探索这些概念。 import math import numpy as np import torch from torch import nn from d2l import torch as d2l生成数据集 给定x,我们将使用以下三阶多项式来生成训练和测试数据的标签: max_degree 20 # 多项式的最…

如何系统的自学Python

1、官方文档 Python 的官方文档是最权威和详尽的学习资源。在官方文档中,你可以找到 Python 的语法规则、内置函数和模块、标准库等信息。如果你想深入学习 Python,官方文档是必不可少的参考资料。 Python 的官方文档分为两个版本,分别是 P…

前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展)

前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展) 常见的浏览器内核CSS选择器优先级盒子模型CSS硬件加速CSS扩展 常见的浏览器内核 内核描述Trident(IE内核)主要用在window系统中的IE浏览器中&…

BTC交易模式 - UXTO - 工具整理

UXTO 相关工具分析 https://mempool.space/signet/ 测试网浏览器https://bitcoin.org/zh_CN/choose-your-wallet BTC钱包 正文链接:BTC交易模式 - UXTO

分布式锁实现(mysql,以及redis)以及分布式的概念(续)redsync包使用

道生一,一生二,二生三,三生万物 这张尽量结合上一章进行使用:上一章 这章主要是讲如何通过redis实现分布式锁的 redis实现 这里我用redis去实现: 技术:golang,redis,数据结构 …

使用Python的pygame库实现自动追踪目标的Snake游戏

和上一期不同的目标追踪入门不同的是,这期是自动追踪科学游戏,话不多说,321上链接 一、项目背景 Snake游戏是一款经典的游戏,玩家需要控制一条蛇在屏幕上移动,吃掉食物并避免撞到自己的身体或墙壁。传统的Snake游戏通常…

校园跑腿小程序源码系统+代取快递+食堂超市代买+跑腿 带完整的安装代码包以及搭建教程

随着移动互联网的普及,人们越来越依赖于手机应用来解决日常生活中的各种问题。特别是在校园内,由于快递点距离宿舍较远、食堂排队人数过多等情况,学生对于便捷、高效的服务需求愈发强烈。在此背景下,校园跑腿小程序源码系统应运而…

JAVA 学习 面试(九)Lambda表达式与泛型

Lambda表达式 // 使用 Lambda 表达式计算两个数的和 MathOperation addition (a, b) -> a b; // 调用 Lambda 表达式 int result addition.operation(5, 3); // MathOperation 是一个函数式接口,它包含一个抽象方法 operation,Lambda 表达式 (a, …

this.$copyText;vue-clipboard2作用;vue-clipboard2剪切板

1.安装 npm install --save vue-clipboard2 2.在main.js中引用 import Vue from vue import VueClipBoard from vue-clipboard2 Vue.use(VueClipBoard) 3.代码中使用 <button click"Copy">复制</button> Copy() { this.$copyText(this.value).then…

蓝桥杯备赛 week 3 —— 高精度(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 高精度的概念 &#x1f4c1; 高精度加法和其模板 &#x1f4c1; 高精度减法和其模板 &#x1f4c1; 高精度乘法和其模板 &#x1f4c1; 高精度除法和其模板 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文…

css Media媒体查询常用属性

使用@media规则声明媒体查询,主要用于控制在不同的设备上显示不同的效果 媒体类型: screen 适用于电脑屏幕、平板电脑、智能手机等 print 适用于打印预览 特性 width 可视区域的宽度 orientation 视窗的旋转方向(横屏landscape,默认竖屏模式)。 运算符: and 并且 , 或…

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…

Mysql 文件导入与导出

i/o 一、导出(mysqldump)<一>、导出sql文件<二>、导出csv文件 二、导入(load)三、常见报错The Mysql server is running with the --secure-file-priv option so it cannot execute this statement 一、导出(mysqldump) <一>、导出sql文件 1、整库 mysqld…

【12.PWM输出】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) PWM输出 系列文章目录一、STM32CUBEMX配置二、项目代码1.main.c --> PWMOutputProcess 总结 一、STM32CUBEMX配置 STM32CUBEMX PA6 ->TIM16_CH1; PA7-> TIM17_CH1 预分频设置为79,自动重装载设置999PWM输…

PyQtGraph 之PlotCurveItem 详解

PyQtGraph 之PlotCurveItem 详解 PlotCurveItem 是 PyQtGraph 中用于显示曲线的图形项。以下是 PlotCurveItem 的主要参数和属性&#xff1a; 创建 PlotCurveItem 对象 import pyqtgraph as pg# 创建一个 PlotCurveItem curve pg.PlotCurveItem()常用的参数和属性 setData(…

资源管理核心考点梳理

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 PMP - 资源管理核心考点梳理 资源管理包括人力资源和实物资源管理。学习的重点是人力资源的管理&#xff0c;这一章是考试的重点章节&#xff0c;在新考纲中&#xff0c;“人”这一模块在题目种的比例是42%。 01 …