Zephry_安装与移植到Stm32F746g_disoc

Posted 17岁boy想当攻城狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zephry_安装与移植到Stm32F746g_disoc相关的知识,希望对你有一定的参考价值。

目录

前言

1. 更新apt仓库

2. 安装依赖

2.1 依赖作用

3. 构建体系

4. 主要依赖最低版本

5. 下载完所有依赖之后可以看下是否满足最小依赖

6. 使用pip3安装west

7. 配置环境

8. 生效配置

9. 检查环境是否生效

10. 创建工作目录

11. 安装zephyr

12. 进入到安装目录并更新

13. 导出cmake依赖

14. 下载python3依赖

15. 进入工作目录

16. 下载sdk包

17. 执行权限

18. 安装sdk

19. 将dev规则copy到udev目录下

20. 进入build目录

23. 编译示例

脚本安装方法

1. 下载脚本

2.安装前配置

3.安装说明

4. log文件

5.说明


前言

我的电脑环境:

系统型号
Ubnutu20.04 LTS
Zephry2.6.99
stm32f746g-dico

在开始之前建议大家电脑是开启VPN可以访问外网的,因为Zephyr脚本下载依赖时都是从外网上下载,如果没有VPN可能导致Time Out超时无法安装好依赖.

在开始之前需要确保当前ubnutu系统环境高于18.04 LTS

1. 更新apt仓库

这一步是将当前系统仓库包进行一次迭代更新,可以跳过.


sudo apt update
sudo apt upgrade

2. 安装依赖


sudo apt install --no-install-recommends -y git cmake ninja-build
sudo apt install --no-install-recommends -y gperf ccache dfu-util
sudo apt install --no-install-recommends -y device-tree-compiler wget python3-dev
sudo apt install --no-install-recommends -y python3-pip python3-setuptools python3-tk
sudo apt install --no-install-recommends -y python3-wheel xz-utils 
sudo apt install --no-install-recommends -y file make gcc 
sudo apt install --no-install-recommends -y gcc-multilib g++-multilib libsdl2-dev

2.1 依赖作用

包名作用
git从github上拉取zephyr源
cmake负责构建源文件编译规则
ninja-build

谷歌的构建工具,负责管理cmake

ccache存储编译器缓存,类似vs的编译缓存,用于提升编译速度
dfu-utilusb dfu(串口总线以及固件升级协议)实现程序, west flash一键下载就是用这个模块实现的
device-tree-compilerlinux下的设备树编译器,主要负责编译boards下的设备文件,让编译系统了解开发板信息
wget仅在安装时会用到,用于下载sdk包
python3-dev编译系统上的所有命令都是基于python脚本编写而成,如烧写到flash等,由python调用ninja在到cmake在到make
python3-pip用于下载python3的依赖
python3-setuptools用于管理依赖包
python3-tkpython3的gui包
python3-wheel用于打包生成wheel格式的安装包文件
xz-utils压缩sdk包,用于生成xz包
file获取文件属性
makemake编译脚本,用于构建项目体系
gccc语言编译器
gcc-multilib用于生成不同平台的c代码
g++-multilib用于生成不同平台的c++代码
libsdl2-dev跨平台的gui工具包

3. 构建体系

zephyrpoject的构建环境是由make,cmake、ninja、west组成

west是zephy自己开发的一个构建工具,统一管理构建环境,它会根据输入参数去调用不同的功能,是由python3实现的。

当我们调用west时会发生如下过程:

1.west解析参数并修改对用的cmake文件

2.获取用户app项目路径

3.创建build目录并在此目录下生成ninja规则文件

4.调用ninja构建工程

5.ninja调用cmake文件

6.cmake生成makefile规则文件后在调用make编译链接

west的命令功能都在sscripths/west_commands目录下,由python实现

4. 主要依赖最低版本

其实低1到2个版本到没事,给出的最低版本要求是作者在编译Zephyr时所用的环境,建议大家与作者同步

依赖名最低版本
CMake3.13.1
Python3.6
device-tree-compiler1.4.6

5. 下载完所有依赖之后可以看下是否满足最小依赖


➜  ~ cmake --version
cmake version 3.16.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).
➜  ~ python3 --version
Python 3.8.10
➜  ~ dtc --version
Version: DTC 1.5.0

6. 使用pip3安装west

west是Zephyr自己的构建元工具,实际上Zephyr是基于Cmake编写的,west会根据当前环境去调用cmake去编译,这样为我们省去了许多编译步骤.

--user参数是只安装到当前用户环境下,如果切换了用户则这个命令无效了

安装的目录在~/.local/bin目录下

-U参数是若当前已经有这个包了则对其进行升级


pip3 install --user -U west

7. 配置环境

将bin目录写到bashrc中,这样就可以直接调用west以及bin下的所有文件


echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc

8. 生效配置

linux下的配置文件不是实时性的,我们需要手动让linux来重读一次配置


source ~/.bashrc

9. 检查环境是否生效

输入如下命令若输出版本则代表环境配置成功,若失败可以重启一下试试


➜  ~ west --version
West version: v0.11.0

10. 创建工作目录

这一步可以忽略,我创建这个目录的目的是为了将zephyr安装到这个目录下


mkdir ~/my_work

11. 安装zephyr

west会将zephyr安装到刚刚创建的my_work目录下的zephyrproject子目录中


west init ~/my_work/zephyrproject

12. 进入到安装目录并更新


cd ~/my_work/zephyrproject && west update

13. 导出cmake依赖

这样的话就可以使用cmake构建了


west zephyr-export

14. 下载python3依赖

这里-r是指定依赖文件

requirements.txt里列出了所有依赖,pip3会解析并全部下载


pip3 install --user -r ~/my_work/zephyrproject/zephyr/scripts/requirements.txt

15. 进入工作目录

注意这里不是zephyr工程目录


cd ~/my_work

16. 下载sdk包


wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.12.4/zephyr-sdk-0.12.4-x86_64-linux-setup.run

17. 执行权限

这里sdk包是以.run文件实现的,这里给.x权限就可以直接执行


chmod +x zephyr-sdk-0.12.4-x86_64-linux-setup.run

18. 安装sdk

这里若不指定目录则安装到/opt目录下,这里我指定到工作目录下,与zephyr工程同一目录


./zephyr-sdk-0.12.4-x86_64-linux-setup.run -- -d ~/my_work/zephyr-sdk-0.12.4

安装时会提示你确认安装,输入y并回车


Do you want to installing to /home/test/my_work/zephyr-sdk-0.12.4 (y/n)? 
y
Do you want to register Zephyr-sdk CMake module with path /home/test/my_work/zephyr-sdk-0.12.4 (y/n)?
y
Do you want to create/update /home/test/.zephyrrc with environment variables setup for you (y/n)?
y

以下是我的安装过程


➜  my_work ./zephyr-sdk-0.12.4-x86_64-linux-setup.run                                                                                                                                                              Verifying archive integrity...  100%   All good.                                                         
Uncompressing SDK for Zephyr  100%                         
Enter target directory for SDK (default: /home/test/zephyr-sdk/):                                                                                                                                                  
Installing SDK to /home/test/zephyr-sdk                                                                                                                                                                            Creating directory /home/test/zephyr-sdk                                                                 
Success                                                                                                               
 [*] Installing arm tools...                               
 [*] Installing arm64 tools...                                                                                                                                                                                      [*] Installing arc tools...                                                                                                                                                                                       
 [*] Installing nios2 tools...                                                                                        
 [*] Installing riscv64 tools...                                                                                                                                                                                    [*] Installing sparc tools...                                                                           
 [*] Installing mips tools...                                                                                                                                                                                       [*] Installing x86_64 tools...                                                                                                                                                                                    
 [*] Installing xtensa_sample_controller tools...                                                                
 [*] Installing xtensa_intel_apl_adsp tools...                                                                                                                                                                      [*] Installing xtensa_intel_s1000 tools...                                                                                                                                                                        
 [*] Installing xtensa_intel_bdw_adsp tools...                                                                   
 [*] Installing xtensa_intel_byt_adsp tools...                                                                                                                                                                      [*] Installing xtensa_nxp_imx_adsp tools...                                                                                                                                                                       
 [*] Installing xtensa_nxp_imx8m_adsp tools...                                                                        
 [*] Installing CMake files...                                                                              
 [*] Installing additional host tools...                                                                    
Success installing SDK.                               
SDK is ready to be used.                              
➜  my_work ls                                         
zephyrproject  zephyr-sdk-0.12.4-x86_64-linux-setup.run                                                     
➜  my_work ./zephyr-sdk-0.12.4-x86_64-linux-setup.run -- -d ~/my_work/zephyr-sdk-0.12.4                                                                                                                            Verifying archive integrity...  100%   All good.                                                         
Uncompressing SDK for Zephyr  100%                                                                          
                                                                                                            
It is recommended to install Zephyr SDK at one of the following locations for automatic discoverability in CMake:                                                                                                  
  /home/test/zephyr-sdk-0.12.4                                                                                                                                                                                       /home/test/bin/zephyr-sdk-0.12.4                                                                       
                                                                                                            
Note: The version number '-0.12.4' can be omitted.                                                          

Do you want to installing to /home/test/my_work/zephyr-sdk-0.12.4 (y/n)?                                                                                                                                           
y                                                   
md5sum is /usr/bin/md5sum                                                                                                                                                                                          Do you want to register Zephyr-sdk CMake module with path /home/test/my_work/zephyr-sdk-0.12.4 (y/n)?                                                                                                              
y                                                     
SDK is ready to be used.

19. 将dev规则copy到udev目录下

这一步是修改udev的命名规则

udev是设备管理器,当我们拔插usb或其它外设时由sysfs来注册class目录,然后再由udev去读取class目录下的配置文件注册到/dev目录下,同时注册到/dev时的一些文件规则,比如组,权限等就是到这个文件中去读取的,同时也会有匹配规则,在/dev目录下注册的文件会硬链接到class目录下


sudo cp ~/my_work/zephyr-sdk-0.12.4/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d

配置生效


sudo udevadm control --reload

20. 进入build目录

这里是到zephyr的build目录下


cd ~/my_work/zephyrproject/zephyr

23. 编译示例

samples下有许多示例,这里我编译一个blinky,led闪烁的代码


west build -b <your-board-name> samples/basic/blinky

这里分享一下如何查一下自己的板号

当你拿到一个板时可以在zephyr的boards目录下查看是否支持,根据你板子的核以及型号去查


cd /home/test/my_work/zephyrproject/zephyr/boards

比如我的是stm32f746系列的,这里我通过开发板上的板名去查

我的核是arm的,所以进入到arm目录下去查


cd arm

使用find查一下


➜  arm git:(b1b977dacf) find . -iname "stm32f746*"
./stm32f746g_disco
./stm32f746g_disco/stm32f746g_disco.yaml
./stm32f746g_disco/doc/img/stm32f746g_disco.jpg
./stm32f746g_disco/stm32f746g_disco_defconfig
./stm32f746g_disco/stm32f746g_disco.dts

可以看到有一个stm32f746g_disco的目录,目录下有许多配置文件,这些文件类似Linux嵌入式下的设备树,有Linux嵌入式开发经验的人来一定不陌生,非必要情况我们一般不会去修改里面的文件,里面的文件就是描述GPIO等硬件信息,告诉zephyr这个型号的架构,主要修改dts文件,在这个文件中配置uart,clock等

板名可以在开发板上找到也可以在给的描述纸上找到

然后我们在回到build目录


cd ~/my_work/zephyrproject/zephyr

build一下


west build -b stm32f746g_disco samples/basic/blinky

build之后生成的.bin,hex,elf文件在当前目录的build目录下


➜  zephyr git:(b1b977dacf) ls build/zephyr
arch                 isrList.bin                 linker_zephyr_prebuilt.cmd.dep  zephyr.dts
boards               isr_tables.c                misc                            zephyr.elf
cmake                kconfig                     runners.yaml                    zephyr.hex
CMakeFiles           kernel                      soc                             zephyr.lst
cmake_install.cmake  lib                         stm32f746g_disco.dts_compiled   zephyr.map
dev_handles.c        libzephyr.a                 stm32f746g_disco.dts.pre.d      zephyr_prebuilt.elf
drivers              linker.cmd                  stm32f746g_disco.dts.pre.tmp    zephyr_prebuilt.map
edt.pickle           linker.cmd.dep              subsys                          zephyr.stat
include              linker_zephyr_prebuilt.cmd  zephyr.bin

你可以通过其它烧录程序烧录到开发板中

也可以使用west flash命令直接烧录,前提是需要有st-link

当开发板连接到PC后使用lsub查看一下有没有st-link确保下载线已经链接


➜  zephyr git:(b1b977dacf) lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 03f0:0024 HP, Inc KU-0316 Keyboard
Bus 001 Device 006: ID 0483:374b STMicroelectronics ST-LINK/V2.1
Bus 001 Device 004: ID 413c:301a Dell Computer Corp. Dell MS116 USB Optical Mouse
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

然后下载就可以了


west flash

若要重新编译则把build删除重新执行命令就可以了,同时如果想编译完成之后同时烧录到开发板可以使用-t flash即可

先删除build


rm -rf build

编译并下载到flash


west build -b stm32f746g_disco samples/basic/blink -t flash

执行完成之后就可以看到开发板上的LED灯在闪烁了


为了方便安装,我写了一个脚本,可以快速安装与配置

脚本安装方法

1. 下载脚本

将下面链接中的安装脚本下载到你的ubnutu系统上


https://download.csdn.net/download/bjbz_cxy/20722127


 注意事项:此脚本仅支持ubnutu 18.04 LTS版本以上

2.安装前配置

首先为这个文件加上执行权限


chmod +x ./install.sh

2.1 安装脚本依赖项


sudo apt install zsh
sudo apt install expect

使用zsh是因为更加灵活与强大且安全性更高

expect主要是实现脚本中自动交互的功能,实现完全自动化功能,一键执行脱离双手

因为脚本中使用了一些美化输出的shell代码,所以需要确保当前终端宽高大于140*140

可以使用如下命令查看:


stty size

若宽高不符合可以手动修改终端窗口大小,或者按下F11最大化窗口

3.安装说明

脚本参数如下


install [install path]


第二个参数是安装路径,若不指定则安装到脚本运行目录下


./install

指定安装:


./install /home/test/my_work

4. log文件

为了方便追踪错误,我编写了一个日志模块,为了美观我在终端界面中不会输出太多信息,所有的安装详细信息都会输出到脚本运行目录下的.log目录中,在脚本执行的同一时间会在该目录下生成对应时间的.log文件,若脚本执行失败可以在这个log中查找相关错误日志并追踪错误


cd .log

5.说明

脚本写法比较苛刻,在执行过程中会确认每一条指令以及配置的正确性,若有任意一条指令无法正确完成工作都会报错并终止安装,因为系统环境的原因我无法保证一个脚本可以在所有环境下顺利安装,若有问题请与我联系,我对它进行迭代适配,thank🍺

以上是关于Zephry_安装与移植到Stm32F746g_disoc的主要内容,如果未能解决你的问题,请参考以下文章

基于Stm32F746g_disg平台下移植zephry使用TinyML预测模型

RTOS_安装与移植到Stm32F746g_disoc

基于Zephyr在微型MCU上使用Tensor Flow Lite Micro做图像分类

《嵌入式系统 - RT-Thread开发笔记》 第三部分 RT-Thread 移植与设备驱动开发 - 第1章 RT-Thread 开发环境搭建 (Keil+env)

请问有没有ucos 与stm32 移植的教程啊,例子啊,多一点,下载链接也行

把ucos移植到stm32后写的一个简单程序。编译时出错。已经包含了头文件stm32f10x_lib.h