《嵌入式系统 – 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

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像