ubuntu下zephyr开发环境搭建以及移植到iMX.7S的M4内核的过程

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。

猜你喜欢

转载自blog.csdn.net/cui939662143/article/details/84240173
今日推荐