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")

 

轉載請註明出處

[email protected]   //  http://blog.csdn.net/CStyle_0x007

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章