官方网站: www.zephyrproject.org
开发环境:
主机: Ubuntu v18.04
Zephyr:V2.3.99
SDK:0.11.4
Date:2020-08-20
Zephyr 可以在 Windows/MAC/Linux 上开发,本文只介绍 Linux(Ubuntu) 上的环境搭建 。
2.1基于 Linux 的编译环境搭建
2.1.1安装必要工具
1.更新软件源
sudo apt-get update
sudo apt upgrade
2.安装依赖软件包
下面是整个一条命令
sudo apt install --no-install-recommends git cmake ninja-build gperf ccache dfu-util device-tree-compiler wget python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev
3.安装 3.13.1版本及以上 CMake 工具
Zephyr 的开发需要 cmake 3.13.1或以上版本。首先查看cmake版本:
cmake --version
通过 ubuntu 软件仓库安装的 cmake 版本较低并不符合要求,通过以下步骤安装cmake。
a.添加Kitware签名密钥:
wget -O – https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add –
b.添加Kitware apt存储库:
sudo apt-add-repository ‘deb https://apt.kitware.com/ubuntu/ bionic main’
c.然后使用apt安装更新的cmake:
sudo apt update
sudo apt install cmake
再次查看cmake版本:
cmake --version
4.安装west工具
pip3 install --user -U west
echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
source ~/.bashrc
2.1.2下载Zephyr源码
1.下载zephyrproject源码
west init ~/zephyrproject
cd ~/zephyrproject
west update
2.导出cmake包
west zephyr-export
3.使用pip3安装其他依赖的工具包
pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
2.1.3安装 Zephyr SDK与配置环境变量
1.下载安装Zephyr SDK
Zephyr 的 SDK 包含所有必须的工具和交叉编译器,用于支持 build 内核在不同的系统架构上。除此之外,它包括主机工具,如自定义 QEMU 二进制文件和主机编译器,如果需要的话,可以构建宿主工具。
SDK支持以下架构:
X86
X86 IAMCU ABI
ARM
ARC
Nios II
Xtensa
RISC-V
本文使用的 SDK 版本是0.11.4 ,安装过程中控制台将出现 Zephyr SDK 安装路径的提示, Zephyr SDK默认安装到~/zephyr-sdk/目录下。
下载 SDK,如果下载过程中速度过慢,可以在浏览器中下载后拷贝到对应文件夹中
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.11.4/zephyr-sdk-0.11.4-setup.run
安装 SDK
chmod +x zephyr-sdk-0.11.4-setup.run
./zephyr-sdk-0.11.4-setup.run (默认方式,笔者直接在安装时指定路径)
./zephyr-sdk-0.11.4-setup.run -- -d ~/zephyr-sdk-0.11.4
安装udev规则,该规则允许您以常规用户身份刷新大多数Zephyr板:
sudo cp ~/zephyr-sdk-0.11.4/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload
Udev规则:https://www.cnblogs.com/fah936861121/p/6496608.html
2.1.4在 QEMU 中运行 hello world 示例程序
完成上述安装过程后,可以通过 hello world 示例验证 Zephyr 开发环境是否一切正常。此处使用 qemu_x86 仿真平台进行验证。此处编译生成的 hello world 可执行文件将运行于 QEMU 仿真平台。
在~/zephyrproject/zephyr/samples/hello_world文件夹下主要文件介绍:
CMakeLists.txt:构建文件,用于生成makefile;
prj.conf:配置文件 ;
src/main.c:主函数文件。
通过 CMake 生成 Makefile 文件时,需要通过 BOARD 参数指定目标平台,此处指定为 qemu_x86 平台。
以 Zephyr 系统中 hello world 例程为例:
cd ~/zephyrproject/zephyr/samples/hello_world
新建一个 build 目录,用于存放临时目录
mkdir -p build && cd build
通过 cmake 指令生成 qemu_x86 平台 makefile 文件
cmake -GNinja -DBOARD=qemu_x86 ..
编译执行程序
ninja
ninja run
可以看到界面打印 hello world 日志
退出 qemu 模拟器方式:ctrl-a,然后按 x
或者直接ctrl-x,强制退出。
【注】如果没有Ninaja工具,先安装 Ninaja 工具
git clone git://github.com/ninja-build/ninja.git && cd ninja
生成可执行文件
./configure.py --bootstrap
将生成的可执行文件 ninja 拷贝到系统目录(/user/bin)下
sudo cp ninja /user/bin/
安装完成 Ninaja 工具之后可以直接使用 Ninaja 工具生成工程了。
2.1.5在nucleo上运行示例程序
在QEMU中运行只是测试环境配置是否正常,我们最终都要在板子上运行,接下来笔者将带领大家在nucleo板子上运行例程。
2.1.5.1 Cmake编译程序
我们还是进入工程文件。还是以 Zephyr 系统中 hello world 例程为例:
cd ~/zephyrproject/zephyr/samples/hello_world
新建一个 build 目录,用于存放临时目录
mkdir -p build && cd build
通过 cmake 指令生成 nucleo_f746zg平台 makefile 文件
cmake -DBOARD=nucleo_f746zg ..
zephyr也支持menuconfig配置,只要执行 make BOARD=nucleo_f746zg menuconfig 命令, 就会出现类似的配置界:
make BOARD=nucleo_f746zg menuconfig
编译执行程序
make
以下表示编译成功:
在build/zephyr/ 目录下就会生成可执行文件:
可以将zephyr.hex拷贝到windows下,通过STM32 ST-LINK Utility软件烧写。如何在Ubuntu中烧写,后文会有介绍。烧写到板子后连接串口,可以看到以下信息:
2.1.5.2 west编译程序
1.编译源码
注意:命令执行需要在 zephyrproject/zephyr/ 目录下,而不是zephyrproject或其他*
cd ~/zephyrproject/zephyr
west build -p auto -b nucleo_f746zg samples/basic/blinky
2.编译完成功,显示如下内容
-- west build: building application
[1/130] Preparing syscall dependency handling
[125/130] Linking C executable zephyr/zephyr_prebuilt.elf
Memory region Used Size Region Size %age Used
FLASH: 13776 B 1 MB 1.31%
DTCM: 0 GB 64 KB 0.00%
SRAM: 4400 B 256 KB 1.68%
IDT_LIST: 200 B 2 KB 9.77%
[130/130] Linking C executable zephyr/zephyr.elf
3.编译后生成的文件包含在 ~/zephyrproject/zephyr/build/zephyr/ 目录下:
4.烧写程序到开发板
方式一:
可以将zephyr.hex拷贝到windows下,通过STM32 ST-LINK Utility软件烧写。
方式二:
通过ubuntu下的wset工具命令烧写
west flash
注意:使用这个命令需要在ubuntu下安装STM32CubeProgrammer和st-link驱动,否则报错。可在插入ST-LINK后查看设备其是否加载在Ubuntu中。
关于west如何使用menuconfig将在下一篇文章详细介绍。
2.1.6 STM32CubeProgrammer烧写工具安装
STM32CubeProgrammer 简称 STM32CubeProg,是一个适用于 STM32 系列产品的跨平台、多合一的程序烧写工具。
“跨平台” 体现在支持 Windows、macOS 和 Linux 操作系统,因此软件运行时需要 Java 环境。
“多合一” 体现在支持通过 USB、ST-LINK、UART、OTA 多种方式来烧写固件。
1.Ubuntu 18.04安装 Oracle Java 8
方法一、自动安装
sudo add-apt-repository ppa:webupd8team/java
sudo apt update
sudo apt install oracle-java8-installer
设置为默认 JDK
sudo update-java-alternatives -s java-8-oracle
方法二、手动安装
oracle Java官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
(以jdk-8u261-linux-x64.tar.gz为例)
a.创建目录:
sudo mkdir /usr/lib/jvm
b.解压缩到该目录:
sudo tar -zxvf jdk-8u261-linux-x64.tar.gz -C /usr/lib/jvm
c.修改环境变量:
sudo vi ~/.bashrc
在文件末尾追加下面内容:
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_261 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量马上生效:
source ~/.bashrc
d.将此 JDK 注册到系统中
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_261/bin/java 300
e.查看java版本,看看是否安装成功:
java -version
如果你安装了多个版本的jdk,你可以通过以下命令在这些版本之间切换:
sudo update-alternatives --config java
2. STM32CubeProgrammer安装
下载 en.stm32cubeprog.zip 并解压缩,里面有三个安装文件,分别对应三个操作系统平台。
├── SetupSTM32CubeProgrammer-2.5.0.app # MacOS 安装
├── SetupSTM32CubeProgrammer-2.5.0.exe # Windows 安装
└── SetupSTM32CubeProgrammer-2.5.0.linux # Linux 安装
在 Ubuntu 中,执行如下命令即可安装
sudo ./SetupSTM32CubeProgrammer-2.5.0.linux
【注1】安装时需要将所有文件en.stm32cubeprog_v2-5-0.zip压缩的所有文件放在同一目录。
【注2】安装完成后运行不起来,出现 “错误:找不到或无法加载主类 com.st.app.Main” 的错误提示。原因是 ST 的 工具是使用 Oracle 的 JDK 进行开发的,而不是 Ubuntu 默认安装的 Open-JDK。
安装后默认在/usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin目录下,运行STM32CubeProgrammer即可:
./STM32CubeProgrammer
创建快捷方式:
sudo cp /usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer.desktop /usr/share/applications
接下来,再浏览文件夹/usr/share/applications,有STM32CubeProgrammer.desktop文件,现在可以在快捷方式中打开软件。
3.连接st-link到ubuntu
1.虚拟机->可移动设备->STMicroelectronics STM32 STLink ->连接
2.执行lsusb命令如果出现STMicroelectronics STM32 STLink字样设备,代表sj-link已经连接到ubuntu。