Getting Started Guide

设置Python虚拟环境

python3 -m venv ~/zephyrproject/.venv

source ~/zephyrproject/.venv/bin/activate

deactive 退出虚拟环境。

Remember to activate the virtual environment every time you start working.

Build the Blinky sample

cd ~/zephyrproject/zephyr
west build -p always -b <your_board_name> sample/basic/blinky

-p always表示a pristine build,也可以使用-p auto来自动判断是否需要pristine build.

Environment Variables

创建zephyr专属的环境变量,touch ~/.zephyrrc, 加入export MY_VARIABLE=foo
接着进入zephyr repository,执行source zephyr-env.sh

source zephyr-env.sh:

  • set ZEPHYR_BASE 为zephyr repository(内核目录).
  • 增加一些环境变量到系统PATH.
  • load .zephyrrc 中的配置.

Application Development

app目录的结构通常为:

<app>
├── CMakeLists.txt
├── app.overlay
├── prj.conf
├── VERSION
└── src
    └── main.c

CMakeLists.txt: 编译APP的入口。
app.overlay: 设备树overlay。
prj.conf: Kconfig overlay。
VERSION: Version信息。
src: 源码目录。

Application types

根据app位置,分为三种类型: Zephyr repository application

zephyrproject/
├─── .west/
    └─── config
└─── zephyr/
     ├── arch/
     ├── boards/
     ├── cmake/
     ├── samples/
         ├── hello_world/
         └── ...
     ├── tests/
     └── ...

Zephyr workspace application

zephyrproject/
├─── .west/
    └─── config
├─── zephyr/
├─── bootloader/
├─── modules/
├─── tools/
├─── <vendor/private-repositories>/
└─── applications/
     └── app/

Zephyr freestanding application

<home>/
├─── zephyrproject/
     ├─── .west/
         └─── config
     ├── zephyr/
     ├── bootloader/
     ├── modules/
     └── ...

└─── app/
     ├── CMakeLists.txt
     ├── prj.conf
     └── src/
         └── main.c

参考:example-application

Important Build System Variables

变量BOARD CONF_FILE DTC_OVERLAY_FILE,有三种传入方法:

  • west buildcmake 传入 -D,有多个overlay文件可以用分号隔开file1.overlay;file2_overlay
  • 环境变量.zephyrrc .bashrc
  • set (<VARIABLE> <VALUE>) in CMakeLists.txt

ZEPHYR_BASE: find_package(Zephyr) 会自动设置为一个Cmake variable。或者通过环境变量设置。
BOARD: 选择开发板。
CONF_FILE: Kconfig配置文件。没配置的话默认使用prj.conf
EXTRA_CONF_FILE: 覆盖的Kconfig配置文件。
DTC_OVERLAY_FILE:dts设备树文件,没配置的话默认使用app.overlay
EXTRA_DTC_OVERLAY_FILE
SHIELD:
ZEPHYR_MODULES:
EXTRA_ZEPHYR_MODULES:

Building an Application

west build -b <board> samples/hello_world: 编译。
west build -b <board>@<revision>: 指定版本。
west build -t clean:build clean, .config不会删除。
west build -t pristine: build目录下全部清空。
west flash: 将可执行文件烧进主板。每次执行west flash,app都会rebuild and flash again。
west build -t run: 当选择的board是qemu_x86/qemu_cortex_m3,可以直接在qemu中run。每次执行west run,app都会rebuild and run again。

Linux下run target will use the SDK’s QEMU binary by default.通过修改`QEMU_BIN_PATH`可以替换为自己下载的QEMU版本

Custom Board, Devicetree and SOC Definitions

有几种方法可以将board/, soc/ dts/放在application目录下:

1.Build的时候指定: west build -b <board name> -- -DSOC_ROOT=<path to soc> -DBOARD_ROOT=<path to boards> -DDTS_ROOT=<path to dts>

2.在app下的module.yml中指定:

build:
  settings:
    board_root: .
    dts_root: .
    soc_root: .
    arch_root: .
    module_ext_root: .

3.在app下CMakeList.txt中指定:

list(APPEND SOC_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/<extra-soc-root>)

注意需要在find_package(Zephyr ...)前。

Optimization

检查ram,rom使用空间:

west build -b reel_board samples/hello_world
west build -t ram_report
west build -t rom_report