飞腾E2000运行Zephyr操作系统

news2024/12/30 1:46:01

Phytium-Zephyr-SDK

1. 仓库介绍

1.1 本仓库特色

此项目是一个开源软件,专为物联网领域设计,基于Zephyr实时操作系统,针对Phytium系列CPU进行了专门的适配和应用开发。我们的目标是降低开发者的使用门槛,提供了部署文档和使用指南,旨在帮助开发者轻松在Zephyr平台上扩展Phytium系列CPU的功能。本项目适合所有希望在Zephyr实时操作系统上充分利用Phytium系列CPU能力的开发者。

1.2 Zephyr 简介

Zephyr Project Documentation — Zephyr Project Documentation

Zephyr是一个开源的实时操作系统(RTOS),主要面向在资源受限的嵌入式设备上运行。它由Linux Foundation托管,目的是提供一个轻量级、模块化的系统,以支持物联网(IoT)和边缘计算应用。Zephyr项目自2016年开始,迅速发展成为一个活跃的开源社区,汇集了来自全球的开发者和公司贡献代码和知识。下面是根据您提到的几个方面对Zephyr系统的介绍:

内核特点

  1. 轻量级和高度模块化:Zephyr设计为可配置且可扩展,允许开发者根据需要选择包含在最终固件中的组件,这有助于减少资源消耗。
  2. 实时性:作为RTOS,Zephyr提供实时任务调度,确保关键任务能够及时准确地执行。
  3. 多平台支持:支持多种不同架构的CPU芯片,包括ARM、Intel x86、RISC-V等,涵盖从低功耗微控制器到更复杂的系统级芯片(SoC)。
  4. 安全性:提供了包括数据加密和安全启动在内的多种安全特性,以保护设备免受攻击。

应用开发

  1. 灵活的开发环境:Zephyr可以通过其SDK和集成的开发环境(IDE)插件进行开发,支持多种编程语言,包括C和C++。
  2. 设备驱动和中间件支持:提供丰富的设备驱动程序和中间件,支持网络、蓝牙、文件系统等多种通信协议和服务。
  3. 微内核和单片机(MCU)内核选项:开发者可以根据应用需求,选择适合的内核配置,以最佳方式利用硬件资源。

生态特色

  1. 强大的社区支持:作为一个活跃的开源项目,Zephyr拥有广泛的社区支持,提供了大量的文档、教程和案例,帮助开发者快速上手。
  2. 与主流技术兼容:Zephyr可以与多种主流的开源技术栈整合,如MCUboot引导加载器、Mbed TLS安全库等,确保开发者能够构建安全、可靠的应用。
  3. 跨行业应用:适用于多种应用场景,包括但不限于智能家居、可穿戴设备、工业控制和汽车电子。

1.3 适配框架

本开源项目由3个仓库(图1)组成,分别是Phytium-Zephyr-SDK、Zephyr OS、Standalone-For-Zephyr。以下是关于这三个开源仓库的介绍。

Phytium-Zephyr-SDK:此仓库作为整个开源项目的入口,提供了项目说明、部署手册、版本管理、测试例程等开发者在调试过程中会使用到的必要内容。开发者如果在部署开发过程中如果了问题,可以在此仓库下的issue下提交给我们。

Zephyr OS: 此仓库作为Zephyr 官方的镜像站使用,其中会包含Phytium 系列CPU 的设备树以及相应的驱动代码和配置文件。

Standalone-For-Zephyr:此仓库作为Zephyr项目依赖模块(modules)中的硬件抽象层,是由Phytium提供的Phytium-Standalone-SDK与驱动适配层构成,此仓库为Zephyr整个构建过程提供驱动部分的软件底座。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图1 项目整体架构图

2. 仓库使用说明

  • 本例程目前仅应用于Ubuntu开发环境
  • 本模块主要分为3大内容:1. 开发环境搭建 ;2. 软件部署 ;3. 例程使用

2.1 开发环境搭建

  1. 升级ubuntu 环境
sudo apt update
sudo apt upgrade
  1. 如果使用的是早于22.04版本的Ubuntu,为了满足上述主要依赖项的最低版本要求,需要添加额外的软件仓库。在这种情况下,下载、检查并执行Kitware存档脚本,以将Kitware APT仓库添加到你的软件源列表中。关于kitware-archive.sh的详细解释可以在这里找到:kitware第三方apt仓库。
sudo bash ./tools/kitware-archive.sh
  1. 通过apt 安装必备软件
sudo apt install --no-install-recommends git cmake ninja-build gperf \
  ccache dfu-util device-tree-compiler wget \
  python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
  make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1
  1. 检查必备的软件否成功
cmake --version
python3 --version
dtc --version
  1. 安装python3虚拟化环境
sudo apt install python3-venv
  1. 创建一个Python虚拟化环境
python3 -m venv ./.venv
  1. 通过source 激活您的虚拟环境
source ./.venv/bin/activate
  1. 安装必备软件至python 虚拟环境中
pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt

2.2 软件部署

  1. 通过source 激活您的虚拟环境
source ./.venv/bin/activate
  1. 在当前目录下执行以下命令初始化Zephyr OS,后续Zephyr OS 将会保存在zephyrproject 目录下
./tools/pull_zephyr_os.sh 
  1. 更新Zephyr OS中的其他项目
cd zephyrproject
west update

3. 如何部署一个软件

详细的实现方法请参考 Application Development — Zephyr Project Documentation

  • 部署软件最好的方法是从 Phytium-Zephyr-SDK 例子或者Zephyr 官方的例子出发进行部署与构建 。

Zephyr官方的例程路径为:zephyrproject/zephyr/sample
Phytium-Zephyr-SDK 提供的例程路径为 : app/

3.1 应用程序概述

Zephyr 的构建系统基于 CMake。

该构建系统以应用程序为中心,要求基于 Zephyr 的应用程序启动构建 Zephyr 源代码。应用程序构建控制了应用程序本身和 Zephyr 的配置和构建过程,将它们编译成一个单独的二进制文件。

主要的 zephyr 仓库包含了 Zephyr 的源代码、配置文件和构建系统。您可能还安装了各种模块(外部项目)与 zephyr 仓库一起,这些模块提供了第三方源代码集成。

应用程序目录中的文件将 Zephyr 和任何模块与应用程序连接起来。该目录包含所有特定于应用程序的文件,如特定于应用程序的配置文件和源代码。

以下是一个简单的 Zephyr 应用程序中的文件:


<app>
├── CMakeLists.txt
├── app.overlay
├── prj.conf
├── VERSION
└── src
    └── main.c

这些内容包括:

CMakeLists.txt:这个文件告诉构建系统在哪里找到其他应用程序文件,并将应用程序目录与 Zephyr 的 CMake 构建系统链接起来。这种链接提供了 Zephyr 构建系统支持的功能,如特定于板子的配置文件,运行和调试在真实或模拟硬件上编译的二进制文件的能力等等。

app.overlay:这是一个设备树覆盖文件,指定应用于任何构建板的基础设备树的应用程序特定更改。设备树覆盖的目的通常是配置应用程序使用的硬件相关内容。

构建系统默认会查找 app.overlay,但您可以添加更多设备树覆盖,还会搜索其他默认文件。

prj.conf:这是一个 Kconfig 片段,用于指定一个或多个 Kconfig 选项的应用程序特定值。这些应用程序设置与其他设置合并,以产生最终配置。Kconfig 片段的目的通常是配置应用程序使用的软件功能。

构建系统默认会查找 prj.conf,但您可以添加更多 Kconfig 片段,还会搜索其他默认文件。

有关 Kconfig 配置的更多信息,请参阅下文的 Kconfig 配置部分。

VERSION:一个包含几个版本信息字段的文本文件。这些字段让您管理应用程序的生命周期,并在签名应用程序镜像时自动提供应用程序版本。

有关此文件及其使用方式的更多信息,请参阅应用程序版本管理。

main.c:一个源代码文件。应用程序通常包含用 C、C++ 或汇编语言编写的源文件。Zephyr 的惯例是将它们放在 <app> 的一个名为 src 的子目录中。

一旦定义了应用程序,您将使用 CMake 生成一个构建目录,其中包含构建应用程序和 Zephyr 所需的文件,然后将它们链接成一个最终二进制文件,您可以在板子上运行。这样做的最简单方法是使用 west build,但您也可以直接使用 CMake。应用程序构建工件始终生成在一个单独的构建目录中:Zephyr 不支持“树内”构建。

3.2 构建与重建应用程序

Zephyr的构建系统将应用程序的所有组件编译和链接成一个单独的应用程序镜像,可以在模拟硬件或实际硬件上运行。

与任何其他基于CMake的系统一样,构建过程分为两个阶段。首先,使用cmake命令行工具生成构建文件(也称为构建系统),同时指定一个生成器。该生成器确定构建系统将在第二阶段使用的本地构建工具。第二阶段运行本地构建工具,实际构建源文件并生成一个镜像。要了解更多关于这些概念的信息,请参考官方CMake文档中的CMake简介。

尽管Zephyr的默认构建工具是west,Zephyr的元工具,它在后台调用cmake和底层构建工具(ninja或make),但您也可以选择直接调用cmake,如果您更喜欢的话。在Linux和macOS上,您可以在make和ninja生成器(即构建工具)之间进行选择,而在Windows上,您需要使用ninja,因为该平台不支持make。为简单起见,本指南将在整个过程中使用ninja,并且如果您选择使用west build构建应用程序,则需要知道它在幕后默认使用ninja。

  • 在构建过程中,我们常用的构建方法为:
west build -b <board_name> <project_path> -DOVERLAY_CONFIG=<prj.conf>

上面west 命令中 ,board_name 代表开发板的型号,project_path 代表需要编译例程的相对路径 ,prj.conf为Kconfig 片段 。

一个具体示例为: 在app/system/kernel_feature/schedule 路径下,使用 “west build -b e2000q_demo ./ -DOVERLAY_CONFIG=prj.conf” 命令,将会使用e2000q_demo 开发板,编译app/system/kernel_feature/schedule 下的源码例程,并且采用当前路径下的prj.conf 配置。

  • 我们常用的清除指令为:
west build -t clean

clean 指令 ,主要为了清除 <app>/build下的编译缓存信息,以这样的方式实现构建系统的重建 。

4. 硬件支持情况

硬件平台支持的架构备注
E2000D/Q DEMO板aarch64支持SMP模式
E2000D/Q DEMO板aarch32

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

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

相关文章

【算法入门赛】B. 自助店评分(C++、STL、推荐学习)题解与代码

比赛地址&#xff1a;https://www.starrycoding.com/contest/8 题目描述 在上一场的入门教育赛中&#xff0c;牢 e e e找到了所有自助店的位置&#xff0c;但是他想发现一些“高分好店”&#xff0c;于是他利用爬虫技术从“小众点评APP”中爬取了武汉所有自助店的评分。 评分…

Linux应用(四)——系统IO函数

本节学习linux系统中常见的IO函数&#xff0c;讲解及其基本用法&#xff1b; 一、 open/close函数 open函数作用:系统调用open函数&#xff0c;打开指定路径的文件&#xff1b; int open(const char *pathname, int flags&#xff09;&#xff1b;打开一个存在的文件&#xff1…

【大学物理】东北大学-马文蔚听课笔记

4.1刚体的定轴转动_哔哩哔哩_bilibili 此笔记为课堂学习笔记~ 4.1刚体的定轴转动 基本教学要求 什么时刚体呢&#xff1f; 研究刚体运动切口 平动&#xff1a;刚体中所有的点的运动轨迹都完全相同。 转动&#xff1a;分为&#xffe5;定轴转动和非定轴转动 刚体转动的角速度…

人脸采集训练识别

项目概述&#xff1a; 本地摄像头采集人脸数据集&#xff0c;通过训练得到trainingData.yml模型&#xff0c;加载haarcascade_frontalface_default.xml实现人脸识别。haarcascade_frontalface_default.xml 文件并不是一个完整的人脸识别模型&#xff0c;而是一个用于检测正脸&a…

基于Spring Cloud的房产销售平台设计与实现

基于Spring Cloud的房产销售平台设计与实现 开发语言&#xff1a;Java 框架&#xff1a;SpringCloud JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页界面&#xff0c;前台首页包括房源信息、…

RS485空调系统到BACnet江森楼宇系统的高效整合攻略

智慧城市的每一栋建筑都在追求更高的能效与更佳的居住体验&#xff0c;而这一切的实现离不开强大且灵活的楼宇自动化系统。其中&#xff0c;协议转换网关作为连接不同设备的纽带&#xff0c;扮演着至关重要的角色。本文将以一个典型的商业综合体为例&#xff0c;揭秘BACnet协议…

零基础开发新闻小程序带评论点赞收藏功能,可以回复评论,借助小程序云开发云模板开发一款图文小程序,新闻列表新闻详情,登录注册功能

小程序官方有改版了&#xff0c;搞得石头哥不得不紧急的再新出一版&#xff0c;教大家开通最新版的cms网页管理后台 一&#xff0c;技术选型和技术点 1&#xff0c;小程序前端 wxml css JavaScript MINA原生小程序框架 2&#xff0c;数据库 云开发 云数据库 云…

力扣:62. 不同路径

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业 1.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c;getShell&am…

【负载均衡式在线OJ项目day4】编译运行功能整合及打包网络服务

一.前言 前面两天完成了编译和运行两个子模块&#xff0c;今天的任务是完成CompileRun模块&#xff0c;它的任务如下&#xff1a; 解析来自客户端的Json字符串&#xff0c;反序列化提取编译运行需要的数据&#xff0c;即代码&#xff0c;时间限制和空间限制把代码写入临时文件…

太阳能无人机的多元化应用

随着新能源技术的不断发展和成熟&#xff0c;太阳能在无人机的应用技术已经成熟。太阳能无人机得到了量产和广泛的应用。传统无人机相比&#xff0c;太阳能无人机无需燃油&#xff0c;运行费用低廉&#xff0c;搭载多种高科技设备&#xff0c;能够高效、多元化地采集和分析各类…

公司活动想找媒体报道宣传怎样联系媒体?

作为公司宣传负责人,我深知媒体报道对于企业活动宣传的重要性。然而,在过去,每当有重要活动需要媒体曝光时,我总会被繁琐的媒体联系工作所困扰。 那时,我需要一家家地查询媒体联系方式,发送邮件、打电话,甚至亲自前往媒体机构进行沟通。然而,这样的过程不仅费时费力,而且效率低…

成本降低 90%,出海社交平台 Typing 基于 Databend 的大数据探

Typing&#xff08;输入中科技&#xff09;成立于 2022 年&#xff0c;是一家主要面向东南亚、拉美、中东等海外地区提供社交平台的出海企业。其社交平台类似于国内的 Soul、陌陌等&#xff0c;提供视频直播、语音聊天室、短视频、生活分享、文字聊天等社交功能&#xff0c;注册…

英语学习笔记5——Nice to meet you.

Nice to meet you. 很高兴见到你。 词汇 Vocabulary Mr. 先生 用法&#xff1a;自己全名 / 姓 例如&#xff1a;Mr. Zhang Mingdong 或 Mr. Zhang&#xff0c;绝对不能是 Mr. Mingdong&#xff01; Miss 女士&#xff0c;小姐 未婚 用法&#xff1a;自己全名 / 姓 例如&#…

区块链(打新)如何被割韭菜

看上去&#xff0c;像我只要去每个都买一遍新发行的代币&#xff0c;一定可以成功的 但是好像没有想象中这么简单&#xff0c;因为这些山寨币&#xff0c;庄家可以自己控盘的&#xff0c;看上去好像有跌宕起伏的买卖&#xff0c;但是一单掀桌子&#xff0c;庄家他自己都不玩了…

SOCKET编程(3):相关结构体与函数

相关结构体与函数 sockaddr、sockaddr_in结构体 sockaddr和sockaddr_in详解 struct sockaddr共16字节&#xff0c;协议族(family)占2字节&#xff0c;IP地址和端口号在sa_data字符数组中 /* Structure describing a generic socket address. */ struct sockaddr {__SOCKADDR…

推荐3个实用的github开源项目

目录&#xff1a; 1、AI生成高清短视频 2、媒体平台爬虫 3、文本转语音项目

ubuntu server 22.04 安装docker、docker-compose

ubuntu server 22.04安装docker有两种方式&#xff0c;第一种是使用ubuntu镜像源的软件包进行安装&#xff0c;第二种使用官方GPG密钥手动添加Docker存储库方式进行安装&#xff0c;两种方式都可以&#xff0c;但第二种方式略复杂&#xff0c;这里介绍第一种比较简单的安装方式…

图像ISP——AGC参数解析

前言 AWB和AGC是两种常见的自动调整功能。AWB用于自动调整图像的白平衡&#xff0c;以确保颜色在不同光照条件下仍然看起来自然。而AGC则用于自动调整图像的增益&#xff0c;以在不同的亮度条件下保持适当的曝光。 代码例程 static AWB_AGC_TABLE_S g_stAwbAgcTable {/* bvali…

深入解析Java中Set接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…