《嵌入式系统 – Zephyr开发笔记》 第4章 Zephyr应用开发

2024-08-30 12:48

本文主要是介绍《嵌入式系统 – Zephyr开发笔记》 第4章 Zephyr应用开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


原文链接


在开发应用之前,先添加一个工具,tree,从名字就可以看出,这个是用于查看工程的结构,非常方便。使用以下命令安装:
$ sudo apt-get update
$ sudo apt-get install tree

4.1工程简介

Zephyr是基于Cmake开发的,编译系统是一个以应用程序为中心的系统,它需要一个应用程序来初始化需要编译的内核源码树。应用程序的编译会驱使应用程序和内核的配置、编译过程的发生,并将它们最终编译成一个单一的二进制文件。

Zephyr 内核的基本目录包括内核源代码、配置选项以及内核的一些预定义编译选项。
位于应用程序目录中的文件包括应用程序的预定义(例如应用程序相关的配置选项)和应用程序的源代码,最简单形式的应用程序具有以下内容:
/app
├── CMakeLists.txt
├── prj.conf
└── src
└── main.c

  • CMakeLists.txt:此文件告诉构建系统在哪里可以找到其他应用程序文件,并将应用程序目录与Zephyr的CMake构建系统链接。该链接提供了Zephyr的构建系统支持的功能,例如特定于电路板的内核配置文件,在真实或仿真硬件上运行和调试已编译二进制文件的功能,以及更多功能。

  • 内核配置文件:应用程序通常提供一个Kconfig配置文件(通常称为prj.conf),用于指定一个或多个内核配置后选项相关的值。这些应用程序设置与特定于主板的设置合并以生成内核配置。如果被忽略,则将会使用应用程序已存在的内核配置选项值;如果应用程序没有该选项值,则将会使用内核的默认配置值。

  • 应用程序源代码文件:应用程序通常会提供一个或多个由 C 或者汇编语言编写的应用程序相关的文件。这些文件通常位于一个叫做 src 的子目录中。

定义应用程序后,可以使用CMake创建项目文件,以便从要托管这些文件的目录中构建该文件。这称为构建目录。应用程序构建工件始终在构建目录中生成; Zephyr不支持“树内”构建。

以下各节介绍了如何创建、构建和运行Zephyr应用程序,然后提供了更详细的参考资料。


4.2源码结构

了解Zephyr源代码树有助于查找与特定Zephyr功能关联的代码。
在这里插入图片描述

在雨源码根目录,有几个重要的文件:
CMakeLists.txt:The top-level file for the CMake build system, containing a lot of the logic required to build Zephyr.

Kconfig:The top-level Kconfig file, which refers to the file Kconfig.zephyr also found at the top-level directory.

west.yml:The West (Zephyr’s meta-tool) manifest, listing the external repositories managed by the west command-line tool.

arch:Architecture-specific kernel and system-on-chip (SoC) code. Each supported architecture (for example, x86 and ARM) has its own subdirectory, which contains additional subdirectories for the following areas:

 architecture-specific kernel source files
 architecture-specific kernel include files for private APIs

soc:SoC related code and configuration files.

Boards:Board related code and configuration files.

Doc:Zephyr technical documentation source files and tools used to generate the https://docs.zephyrproject.org web content.

Drivers:Device driver code.

dts:devicetree source files used to describe non-discoverable board-specific hardware details.

include:Include files for all public APIs, except those defined under lib.

kernel:Architecture-independent kernel code.

lib:Library code, including the minimal standard C library.

misc:Miscellaneous code that doesn’t belong to any of the other top-level directories.

samples:Sample applications that demonstrate the use of Zephyr features.

scripts:Various programs and other files used to build and test Zephyr applications.

cmake:Additional build scripts needed to build Zephyr.

subsys:Subsystems of Zephyr, including:

 USB device stack code.
 Networking code, including the Bluetooth stack and networking stacks.
 File system code.
 Bluetooth host and controller

tests:Test code and benchmarks for Zephyr features.

share:Additional architecture independent data. Currently containing Zephyr CMake package.

4.3添加用户应用程序

开发一个新的应用程序时,您需要为应用程序创建一个目录,为应用程序源代码创建一个子目录;这种方式更容易以内核所期望的结构来组织目录和文件。

请按照以下步骤创建一个新的应用程序目录。

1.在内核的安装目录树外面创建一个新的目录。通常,这是你的工作空间目录。在控制台终端,进入一个你希望存放应用程序的目录。创建应用程序目录,输入:
$mkdir app
【警告】不支持在路径上任何位置都有空格的目录中构建Zephyr或创建应用程序。

2.建议将所有应用程序源代码放在一个名为src的子目录中。 这样可以更轻松地区分工程文件和源文件。在 app 下面创建一个源码目录:
$ cd app
$ mkdir src

3.将应用程序源代码放在src子目录中。 在此示例中,我们假设创建了一个名为src / main.c的文件。

4.在应用目录中创建一个名为CMakeLists.txt的文件,其内容如下:

#Find Zephyr. This also loads Zephyr's build system.
cmake_minimum_required(VERSION 3.13.1)
find_package(Zephyr)
project(my_zephyr_app)# Add your source file to the "app" target. This must come after
# find_package(Zephyr) which defines the target.
target_sources(app PRIVATE src/main.c)

find_package(Zephyr)设置编译所需的最低CMake版本,用于构建Zephyr系统,该系统会创建一个名为app的CMake目标(请参阅Zephyr CMake软件包)。

【注意】Zephyr软件包还调用cmake_minimum_required()。 这两个版本中的最新版本将由CMake强制执行。

5.设置Kconfig配置选项。 请参阅Kconfig配置。

6.配置应用程序所需的任何设备树文件。 请参阅设置设备树文件。

创建之后,该应用程序的目录结构是:
在这里插入图片描述

4.4应用程序的预定义

你可以使用许多变量来控制Zephyr构建系统。 本节描述了每个Zephyr开发人员都应该了解的最重要的知识。

【注意】
变量BOARD,CONF_FILE和DTC_OVERLAY_FILE可以通过3种方式(按优先顺序)提供给Zephyr系统:

1.As a parameter to the west build or cmake invocation via the -D command-line switch. If you have multiple overlay files, you should use quotations, “file1.overlay;file2.overlay”
2.As Environment Variables.
3.As a set(<VARIABLE> <VALUE>) statement in your CMakeLists.txt

下列预定义变量用于配置工程:

 ZEPHYR_BASE: 构建系统使用的Zephyr基本变量。 find_package(Zephyr)将自动将此设置为缓存的CMake变量。 但是,也可以将ZEPHYR_BASE设置为环境变量,以强制CMake使用特定的Zephyr安装。
 BOARD: 选择应用程序将要运行到的开发板的默认配置。
 CONF_FILE: 配置文件的文件名,它包含用于覆盖默认配置值的 kconfig 配置值。
 DTC_OVERLAY_FILE: One or more devicetree overlay files to use. Multiple files can be separated with semicolons. See Set devicetree overlays for examples and Introduction to devicetree for information about devicetree and Zephyr.
 ZEPHYR_MODULES: A CMake list containing absolute paths of additional directories with source code, Kconfig, etc. that should be used in the application build.

4.5编译

Zephyr 的编译系统能够将应用程序的所有组件编译成一个单一的既可以运行在仿真硬件,又可以运行在真实硬件之上的应用程序镜像。

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

尽管Zephyr中的默认构建工具为west,而Zephyr的meta工具可在后台调用cmake和底层构建工具(忍者或make),但您也可以根据需要选择直接调用cmake。在Linux和macOS上,您可以在make和ninja生成器(即构建工具)之间进行选择,而在Windows上则需要使用ninja,因为该平台不支持make。为简单起见,我们将在本指南中始终使用ninja,如果您选择使用west build来构建应用程序,则应知道它默认为ninja。

举例来说,让我们为nucleo_f746zg构建app示例:

为了简单起见,我们将以samples/hello_world/例子作为用户的应用程序。首先创建~/zephyrproject/zephyr/app目录,再将hello_world的内容拷贝到 app下面。将src/main.c修改如下:
在这里插入图片描述

 使用west:
$west build -p auto -b nucleo_f746zg app

 使用CMake和ninja:
#Use cmake to configure a Ninja-based buildsystem:
$cmake -B build -GNinja -DBOARD=nucleo_f746zg app

#Now run ninja on the generated build system:
$ninja -C build

 使用CMake和make:
在Linux和MAC中,也可使用cmake和make来编译。
#Use cmake to configure a Make-based buildsystem:
$cmake -B build -DBOARD=nucleo_f746zg app

#Now run ninja on the generated build system:
$make -C build





欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎


欢迎订阅我的微信公众号

在这里插入图片描述

这篇关于《嵌入式系统 – Zephyr开发笔记》 第4章 Zephyr应用开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120870

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof