Zephyr内核详解,第0.1篇 构建

本文详细介绍了Zephyr内核的构建流程,包括环境变量初始化、构建目录创建、CMake脚本解析及Ninja构建。重点讲解了CMakeLists.txt的作用、cmake命令的MSYS判断以及ZEPHYR_LIBS等目标的定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                             Zephyr内核详解,第0.1篇 构建

梳理下构建过程,整个构建过程只需要执行下面四个命令,分别来说明。

1.zephyr根目录执行:source zephyr.sh

2.执行:mdkir ./sample/helloword/build && cd ./sample/helloword/build

3.执行:cmake -GNinja -DBOARD=nucleo_l476rg ..

4.执行:ninja

划重点:

.使用source命令用来初始化ZEPHYR_BASE环境变量,调用用户根目录下的.zephyrrc来初始化一些环境变量(ZEPHYR_TOOLCHAIN_VARIANT/GNUARMEMB_TOOLCHAIN_PATH/OPENOCD_DEFAULT_PATH)。

.创建build目录,并跳转到build目录

.调用cmake解析整个工程的cmake脚本并生成ninja脚本。具体会依次调用:\samples\hello_world\CMakeLists.txt,\cmake\app\boilerplate.cmake,\CMakeLists.txt同时会把整个项目需要添加到工程的CMakeList.txt根据kconfig的配置来添加到构建过程当中。

一.创建app,所有的app需以下面的步骤来完成。

cmake_minimum_required(VERSION 3.8.2) //申明cmake必须满足的最小版本

include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE) project(NONE)//所有的app必须包含boilerplate.cmake模板来初始化各种编译环境和环境变量

target_sources(app PRIVATE src/main.c) //用户app都是cmake library通过target_resource命令来把.c源文件添加到libary里面,最终和core连接到一起。链接脚本会根据board不同选择不同的link.ld文件以stm32L4为例,链接脚本是\include\arch\arm\cortex_m\scripts\link.ld

二.cmake使用下面的命令来确定当前的构建host主机是否是MSYS.

execute_process( //cmake命令用来执行特定的命令

COMMAND //表示用来执行命令

uname //执行linux下的uname命令获取系统信息(linux,msys,macos)

OUTPUT_VARIABLE uname_output //存储信息到变量

)

if(uname_output MATCHES "MSYS") //比较字符串是否是“MSYS”

set(MSYS 1) //如果为真就设置Flag,供后面使用

endif()

三.定义ZEPHYR_LIBS/ZEPHYR_INTERFACE_LIBS/GENERATED_KERNEL_OBJECT_FILES/GENERATED_KERNEL_SOURCE_FILES这些目标,在次级目录里面使用这些来链接目标文件,默认都是空,当某个模块需要被链接到最终的二进制可执行文件的时候,就可以把自己挂在这几个目标下面,在构建的过程中就会被自动链接进来。

define_property(GLOBAL PROPERTY ZEPHYR_LIBS

BRIEF_DOCS "Global list of all Zephyr CMake libs that should be linked in"

FULL_DOCS "Global list of all Zephyr CMake libs that should be linked in.zephyr_library() appends libs to this list.")

set_property(GLOBAL PROPERTY ZEPHYR_LIBS "")

define_property(GLOBAL PROPERTY ZEPHYR_INTERFACE_LIBS

BRIEF_DOCS "Global list of all Zephyr interface libs that should be linked in."

FULL_DOCS "Global list of all Zephyr interface libs that should be linked in.zephyr_interface_library_named() appends libs to this list.")

set_property(GLOBAL PROPERTY ZEPHYR_INTERFACE_LIBS "")

define_property(GLOBAL PROPERTY GENERATED_KERNEL_OBJECT_FILES

BRIEF_DOCS "Object files that are generated after Zephyr has been linked once."

FULL_DOCS "\Object files that are generated after Zephyr has been linked once.\May include mmu tables, etc."

)

set_property(GLOBAL PROPERTY GENERATED_KERNEL_OBJECT_FILES "")

define_property(GLOBAL PROPERTY GENERATED_KERNEL_SOURCE_FILES

BRIEF_DOCS "Source files that are generated after Zephyr has been linked once.

"FULL_DOCS "\Object files that are generated after Zephyr has been linked once.\May include isr_tables.c etc."

)

set_property(GLOBAL PROPERTY GENERATED_KERNEL_SOURCE_FILES "")

set(APPLICATION_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH "Application Source Directory")

set(APPLICATION_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Application Binary Directory")

转载请注明出处

Cstyle.z.zhou@outlook.com   //  http://blog.youkuaiyun.com/CStyle_0x007

图片

 

<think>好的,我现在需要帮助用户解决关于Zephyr SDK版本升级的问题。用户当前使用的是0.16.5-1版本,想要下载或升级到0.17.0版本。我需要先回顾提供的引用内容,看看是否有直接相关的信息。 引用[1]和[2]提到了0.16.10.16.8版本的安装步骤,其中引用的下载链接是v0.16.8的版本。而引用[3]是关于ROS Foxy的,可能与Zephyr SDK无关。因此,现有引用中没有直接提到0.17.0版本的信息,但用户需要的是0.17.0的升级方法。 接下来,我需要思考Zephyr SDK的一般升级流程。通常,这类SDK的升级步骤可能包括下载新版本、卸载旧版本、安装新版本,并重新配置环境。但需要确认是否有官方推荐的步骤。 由于用户当前使用的是0.16.5-1,想升级到0.17.0,可能需要先访问Zephyr项目的官方网站或GitHub仓库,查找0.17.0的发布信息和下载链接。例如,在GitHub的Releases页面是否有对应的版本。 根据引用[2]的示例,下载链接结构是固定的,可能只需替换版本号为0.17.0。例如,尝试访问https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.0/zephyr-sdk-0.17.0_linux-x86_64.tar.xz,看是否存在该文件。 此外,安装步骤可能类似:下载压缩包、解压、运行setup.sh脚本。但需要注意是否需要卸载旧版本或处理环境变量的问题。例如,是否需要删除旧版SDK目录,或者是否需要更新工具链路径。 还需要提醒用户备份当前项目,避免升级过程中出现兼容性问题。同时,检查Zephyr文档是否有关于版本兼容性的说明,确保0.17.0与用户的项目兼容。 可能的问题点:如果用户直接从0.16.5升级到0.17.0,是否需要中间步骤?是否有已知的破坏性变更?需要建议用户查阅官方更新日志。 最后,生成相关问题,帮助用户进一步了解升级后的配置或常见问题。</think>### Zephyr SDK版本升级指南 根据您提到的Zephyr SDK版本升级需求(0.16.5-10.17.0),以下是详细步骤: 1. **下载新版SDK** ```bash cd ~ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.0/zephyr-sdk-0.17.0_linux-x86_64.tar.xz ``` 此链接遵循Zephyr SDK的官方命名规范[^2],将版本号替换为0.17.0后有效。 2. **卸载旧版本(可选)** ```bash rm -rf ~/zephyr-sdk-0.16.5 ``` 旧版本SDK默认安装在用户根目录下,路径为`~/zephyr-sdk-<版本号>`[^1] 3. **安装新版本** ```bash tar xvf zephyr-sdk-0.17.0_linux-x86_64.tar.xz cd zephyr-sdk-0.17.0 ./setup.sh ``` 安装脚本会自动设置工具链路径和环境变量 4. **验证安装** ```bash arm-zephyr-eabi-gcc --version ``` 应显示与0.17.0版本对应的工具链信息 **注意:** - 升级前建议备份当前项目 - 需要同步更新Zephyr RTOS源码仓库,确保版本兼容 - 如果遇到权限问题,可在`setup.sh`前添加`chmod +x setup.sh`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值