当前位置: 首页 > news >正文

Zephyr kernel Build System (CMake)介绍

目录

概述

1. 结构介绍

2  构建和配置阶段

2.1 配置阶段

2.2 Cmake编译

3 Zephy项目目录结构

3.1 文件架构

3.2 文件content


概述

本文主要介绍Zephyr kernel Build System CMake的功能,以及使用该工具构建项目,并详细介绍了每个目录以及目录下文件的作用。

1. 结构介绍

CMake 用于与 Zephyr 内核一起构建您的应用程序。一个 CMake 构建分两个阶段完成。第一阶段称为 configuration。在配置过程中,CMakeLists.txt构建脚本是 执行。配置完成后,CMake 有一个 Zephyr 构建,并且可以生成主机原生的构建脚本平台。

CMake 支持为多个构建系统生成脚本,但仅支持 Ninja 和 Make 由 Zephyr 测试和支持。配置后,您可以通过执行生成的构建脚本来开始构建阶段。这些生成脚本 可以重新编译应用程序,而无需涉及 CMake following 大多数代码更改。但是,在某些更改之后,配置步骤必须 在构建之前再次执行。构建脚本可以检测到其中的一些 情况并自动重新配置,但在某些情况下,这必须 手动完成。

Zephyr 使用 CMake 的“目标”概念来组织构建。一个 target 可以是可执行文件、库或生成的文件。为 应用程序开发人员,库目标是最重要的 理解。Zephyr 构建中的所有源代码都是通过以下方式实现的 包含在库目标中,甚至是应用程序代码。

库目标具有源代码,这些源代码是通过 CMakeLists.txt 构建如下脚本:

target_sources(app PRIVATE src/main.c)

解释:

app:    配置源文件的地址  src/main.c

PRIVATE: keyword 表示我们正在修改库的内部的程序库

 

2  构建和配置阶段

Zephyr 构建过程可以分为两个主要阶段:配置 阶段(由 CMake 驱动)和构建阶段(由 Make 或 Ninja 驱动)。 

2.1 配置阶段

当用户调用 CMake 生成 build system,指定源应用程序目录和 Board 目标。

CMake 首先在应用程序中处理文件 CMakeLists.txt目录中,该目录引用 Zephyr 中的 CMakeLists.txt顶级目录,该目录又引用文件 CMakeLists.txt在整个 build 树中(直接和间接)。它的主要输出是一个 一组 Makefile 或 Ninja 文件来驱动构建过程,但 CMake 脚本也会执行一些自己的处理,这将在此处进行说明。

2.2 Cmake编译

运行Cmake后,会创建build/目录

Cmake 编译的log信息:

-- west build: building domain(s): observer
[0/1] Re-running CMake...
Loading Zephyr default modules (Zephyr base (cached)).
-- Application: D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer
-- CMake version: 3.21.0
-- Cache files will be written to: D:/ncs/v2.9.0/zephyr/.cache
-- Zephyr version: 3.7.99 (D:/ncs/v2.9.0/zephyr)
-- Found west (found suitable version "1.2.0", minimum required is "0.14.0")
-- Board: nrf52840dk, qualifiers: nrf52840
-- Found host-tools: zephyr 0.17.0 (C:/ncs/toolchains/b620d30767/opt/zephyr-sdk)
-- Found toolchain: zephyr 0.17.0 (C:/ncs/toolchains/b620d30767/opt/zephyr-sdk)
-- Found BOARD.dts: D:/ncs/v2.9.0/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840.dts
-- Generated zephyr.dts: D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer/zephyr/zephyr.dts
-- Generated devicetree_generated.h: D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer/zephyr/include/generated/zephyr/devicetree_generated.h
-- Including generated dts.cmake file: D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer/zephyr/dts.cmake
Parsing D:/ncs/v2.9.0/zephyr/Kconfig
Loaded configuration 'D:/ncs/v2.9.0/zephyr/boards/nordic/nrf52840dk/nrf52840dk_nrf52840_defconfig'
Merged configuration 'D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/prj.conf'
Merged configuration 'D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer/zephyr/.config.sysbuild'
No change to configuration in 'D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer/zephyr/.config'
No change to Kconfig header in 'D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer/zephyr/include/generated/zephyr/autoconf.h'
-- Configuring done
-- Generating done
-- Build files have been written to: D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer
[4/18] Generating include/generated/zephyr/version.h
-- Zephyr version: 3.7.99 (D:/ncs/v2.9.0/zephyr), build: v3.7.99-ncs2
[18/18] Linking C executable zephyr\zephyr.elf
Memory region         Used Size  Region Size  %age UsedFLASH:       81792 B         1 MB      7.80%RAM:       23056 B       256 KB      8.80%IDT_LIST:          0 GB        32 KB      0.00%
Generating files from D:/ncs/v2.9.0/zephyr/samples/bluetooth/observer/build/observer/zephyr/zephyr.elf for board: nrf52840dk*  Terminal will be reused by tasks, press any key to close it. 

3 Zephy项目目录结构

使用vscode打开Zephy提供的demo,笔者以adc_dt项目为例,介绍Zephy架构下的项目文件结构,具体项目位置:C:\ncs\v2.9.1\zephyr\samples\drivers\adc\adc_dt。

3.1 文件架构

工程目录下包含两个文件夹和4个文件,其具体作用如下:

1) boards 目录:


.overlay文件:   包括和板块相关的配置,主要是根据板块的特性,重写设备树文件,该文件的后缀名为.overlay

.conf文件: 其主要用于使能Zephy提供的一些程序模块,通过对相应的模块配置y或者n,以打开或者关闭该功能


2) src目录


其主要用于包括和项目相关的工程文件,demo中的src目录只包括一个文件main.c,实际开发项目是,可在该目录添加更多的文件


3)CMakeLists.txt


编译项目相关的设置,包括项目名称,添加.c文件,文件路径等内容


4)prj.conf


在进行编译项目代码时,系统默认会选择该文件作为编译配置项,实际开发项目时,可根据需要进行改写


5)README.rst


说明文件,主要用于介绍项目的功能,编译环境,板块信息,使用方法,应用场景等
 


6)sample.yaml


编译选项配置文件

3.2 文件content

1) .overlay文件

/** SPDX-License-Identifier: Apache-2.0** Copyright (c) 2022 Nordic Semiconductor ASA*// {zephyr,user {io-channels = <&adc 0>, <&adc 1>, <&adc 7>;};
};&adc {#address-cells = <1>;#size-cells = <0>;channel@0 {reg = <0>;zephyr,gain = "ADC_GAIN_1_6";zephyr,reference = "ADC_REF_INTERNAL";zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;zephyr,input-positive = <NRF_SAADC_AIN1>; /* P0.03 */zephyr,resolution = <12>;};channel@1 {reg = <1>;zephyr,gain = "ADC_GAIN_1_6";zephyr,reference = "ADC_REF_INTERNAL";zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;zephyr,input-positive = <NRF_SAADC_VDD>;zephyr,resolution = <14>;zephyr,oversampling = <8>;};channel@7 {reg = <7>;zephyr,gain = "ADC_GAIN_1_5";zephyr,reference = "ADC_REF_VDD_1_4";zephyr,vref-mv = <750>;zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;zephyr,input-positive = <NRF_SAADC_AIN6>; /* P0.30 */zephyr,input-negative = <NRF_SAADC_AIN7>; /* P0.31 */zephyr,resolution = <12>;};
};

2) .conf文件结构

3) CMakeLists.txt

# SPDX-License-Identifier: Apache-2.0cmake_minimum_required(VERSION 3.20.0)find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(ADC)target_sources(app PRIVATE src/main.c)

4)  sample.yaml

sample:name: ADC devicetree driver sample
tests:sample.drivers.adc.adc_dt:tags:- adcdepends_on: adcplatform_allow:- nucleo_l073rz- disco_l475_iot1- cc3220sf_launchxl- cc3235sf_launchxl- cy8cproto_063_ble- stm32l496g_disco- stm32h735g_disco- nrf51dk/nrf51822- nrf52840dk/nrf52840- nrf54l15dk/nrf54l15/cpuapp- nrf54h20dk/nrf54h20/cpuapp- mec172xevb_assy6906- gd32f350r_eval- gd32f450i_eval- gd32vf103v_eval- gd32f403z_eval- esp32_devkitc_wroom/esp32/procpu- esp32_devkitc_wrover/esp32/procpu- esp32s2_saola- esp32c3_devkitm- gd32l233r_eval- lpcxpresso55s36- mr_canhubk3- longan_nano- longan_nano/gd32vf103/lite- rd_rw612_bga- frdm_mcxn947/mcxn947/cpu0- ucans32k1sicintegration_platforms:- nucleo_l073rz- nrf52840dk/nrf52840harness: consoletimeout: 10harness_config:type: multi_lineregex:- "ADC reading\\[\\d+\\]:"- "- .+, channel \\d+: -?\\d+"

参考文献:

https://docs.zephyrproject.org/latest/build/cmake/index.html

相关文章:

  • 如何配置Spark
  • 技术视界 | 从自然中获取智慧: 仿生机器人如何学会“像动物一样思考和行动”
  • 基于 Python(selenium) 的今日头条定向爬虫:根据输入的关键词在今日头条上进行搜索,并爬取新闻详情页的内容
  • 使用spring boot vue 上传mp4转码为dash并播放
  • Pycharm(六):可变与不可变类型
  • 3.3 Spring Boot文件上传
  • 2025年深度学习模型发展全景透视(基于前沿技术突破与开源生态演进的交叉分析)
  • 【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明
  • Linux系统下的常用网络命令
  • 如何在SOLIDWORKS中高效管理文件属性?
  • 第十二届蓝桥杯 2021 C/C++组 直线
  • macOS 更新后找不到钥匙串访问工具的解决方案
  • Flutter Dart中的函数参数 默函数的定义 可选参数 箭头函数 匿名函认参数 命名参类数 闭包等
  • 如何通过python连接hive,并对里面的表进行增删改查操作
  • 信奥赛之c++基础(计算机存储+数据类型转换)
  • kafka和Spark-Streaming2
  • Linux常用中间件命令大全
  • Golang | 倒排索引
  • docker的安装和简单使用(ubuntu环境)
  • 示波器测试差分信号
  • “世纪火种”嘉年华启动,69家单位加入阅读“朋友圈”
  • 广西给出最后期限:6月30日之前主动交代问题可从宽处理
  • 商务部:已有超1.2亿人次享受到以旧换新补贴优惠
  • 秦洪看盘|避险情绪升温,短线或延续相对钝化状态
  • 给印度立“人设”:万斯访印祭出美国关税战新招,但效果存疑
  • 嫦娥五号月球样品将借给这些国家机构