zephyr开发环境搭建
首先介绍如何在ubuntu16.04 Desktop环境下搭建Zephyr开发环境。构建Zephyr开发环境除了需要正确获取Zephyr源码和Zephyr SDK,还需要正确安装python3、cmake和git等工具。
更新软件源
sudo apt-get update
sudo apt-get upgrade
安装依赖包
sudo apt-get install --no-install-recommends git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget \
python3-pip python3-setuptools python3-wheel xz-utils file make gcc \
gcc-multilib
Zephyr开发需要的cmake版本是3.8.2或者更高,通过ubuntu软件仓库安装的cmake版本比较低,不能满足要求。 可通过下面的步骤来安装3.8.2版本的cmake。
# 安装cmake到$HOME/cmake
mkdir $HOME/cmake && cd $HOME/cmake
wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.sh
yes | sh cmake-3.8.2-Linux-x86_64.sh | cat
#将CMake安装目录增加到用户环境变量中,添加到用户目录中的.zephyrrc文件中,也可以添加到用户目录.bashrc文件中
echo "export PATH=$PWD/cmake-3.8.2-Linux-x86_64/bin:\$PATH" >> $HOME/.zephyrrc
#新建一个控制台,验证cmake工具是否安装成功
cmake --version
克隆zephyr代码仓库
把Zephyr源码克隆到用户目录中,例如克隆至Downloads/zephyr文件夹中。
git clone https://github.com/zephyrproject-rtos/zephyr
安装Python依赖工具
下面,安装Zephyr需要的Python包
# 进入zephyr文件夹
cd Downloads/zephyr
# 通过pip3工具安装其他依赖项
pip3 install --user -r scripts/requirements.txt
安装zephyr SDK
Zephyr SDK会自动安装被支持硬件平台所依赖的编译、下载、调试等工具。
# 下载最新的SDK,安装过程中控制台会出现Zephyr SDK的安装路径的提示,建议把Zephyr SDK安装到home目录下
wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.5/zephyr-sdk-0.9.5-setup.run
cd <sdk download directory>
sh zephyr-sdk-0.9.5-setup.run
# 设置环境变量,在用户目录.zephyrrc文件(或.bashr文件)末尾添加下面几行代码
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=<sdk installation directory>
至此,Zephyr的开发环境已搭建完毕,下面在iMX7s平台上执行hello world例程
iMX 7S平台上执行Hello World
Zephyr支持多种ARM平台,其中包括iMX 7D平台,7S与7D只是少了一个A7的内核,M4内核并没有变化,imx7d_m4的设备树文件依然适合imx7s,因此不需要自定义soc和board文件。
编译应用程序
# 进入zephyr文件夹
cd Downloads/zephyr
# 设置编译环境
source zephyr-env.sh
#编译Hello World例程
cd samples/hello_world
mkdir imx7s_build && cd imx7s_build
cmake -DBOARD=colibri_imx7d_m4 ..
make
这时在imx7s_build/zephyr里会包含最终的应用程序二进制文件(bin格式和elf格式)——zephyr.bin和zephyr.elf(默认的名字)。
使用uboot加载并运行程序
对于M4,Colibri iMX7D没有QSPI flash。因此,M4需要通过A7内核来启动。A7内核负责加载M4二进制应用程序到RAM里、put M4 in reset、set M4 Program Counter 和 Stack Pointer 以及 get M4 out of reset。这些步骤都由A7在bootloader阶段或者linux系统启动后完成。
M4能够使用5块不同的RAMs。
在编译的时候用户可以选择使用哪块RAM。这个配置选项在boards/arm/colibri_imx7d_m4/colibri_imx7d_m4.dts设备树文件里,配置参数有“zephyr,flash"(当 CONFIG_XIP=y)和"zephyr,sram"。可以选择的配置如下:(默认是tcml)
"zephyr,flash"
- &ddr_code
- &tcml_code
- &ocram_code
- &ocram_s_code
- &ocram_pxp_code
- &ocram_epdc_code
"zephyr,sram"
- &ddr_sys
- &tcmu_sys
- &ocram_sys
- &ocram_s_sys
- &ocram_pxp_sys
- &ocram_epdc_sys
下面,通过使用uboot从A7加载zephyr,并M4上运行。
复制zephyr.bin文件到SD卡的第一分区上(可以是FAT文件系统),并插入imx7s的板子上。上电并停止u-boot执行,设置u-boot环境变量,并从合适的内存运行zephyr.bin。
setenv bootm4 'fatload mmc 0:1 $m4addr $m4fw && dcache flush && bootaux $m4addr'
# TCML
setenv m4tcml 'setenv m4fw zephyr.bin; setenv m4addr 0x007F8000'
setenv bootm4tcml 'run m4tcml && run bootm4'
run bootm4tcml
# TCMU
setenv m4tcmu 'setenv m4fw zephyr.bin; setenv m4addr 0x00800000'
setenv bootm4tcmu 'run m4tcmu && run bootm4'
run bootm4tcmu
# OCRAM
setenv m4ocram 'setenv m4fw zephyr.bin; setenv m4addr 0x00900000'
setenv bootm4ocram 'run m4ocram && run bootm4'
run bootm4ocram
# OCRAM_S
setenv m4ocrams 'setenv m4fw zephyr.bin; setenv m4addr 0x00180000'
setenv bootm4ocrams 'run m4ocrams && run bootm4'
run bootm4ocrams
# DDR
setenv m4ddr 'setenv m4fw zephyr.bin; setenv m4addr 0x80000000'
setenv bootm4ddr 'run m4ddr && run bootm4'
run bootm4ddr
程序默认使用串口B打印输出hello world,通过串口设备接入电脑中,运行minicom,可以看到输出的hello world。