Zephyr内核详解,第0.1篇 构建

                                             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.csdn.net/CStyle_0x007

图片

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值