zephyr个人理解
以下纯属个人理解,如有错误请帮忙指正出来,联系邮箱:18501916597@163.com
zephyr是linux社区诞生的一套支持32位芯片的RTOS操作系统,它的强大之处在于它几乎继承了linux所有的开发特点:应用和驱动分离、驱动配置、第三方的软件移植方便、网络、内存、文件系统等配套都很齐全。先来上一张图介绍下目前支持的芯片,当然不是很全,有兴趣可以直接去官网(需要墙。。。)
难道目前只能支持这么多板子吗?当然不是,其实我们还可以将自己的板子信息也添加进去。
他对开发有什么好处呢?一套应用无视所有的板子的都可以运行算不算最大的亮点呢?O(∩_∩)O
以前对于32位没有MMU的芯片我都是采用UCOS
或者FREERTOS
来进行开发的,用过的都知道:RTOS系统移植
—->驱动编写
——>内存管理
——>抽象应用
—->产品
,这一套下来基本最快也要2个月,如果我们中间再换一个硬件,呵呵。。。那就只能从头来过,但zephyr
可以解决的一个问题是驱动和应用分离,且驱动复用,什么意思呢?就是说当你完成了STM32F7
芯片的开发的应用程序,你可以在只需要改一些配置就可以将这一套应用用于EFM32
芯片上。。。。就这一个特性我就觉得很逆天了。虽然RT-THREAD
也在朝着这个方向努力,但到目前为止RT-THREAD
只支持ST芯片是什么鬼,如果单独只支持ST芯片,直接用STM32CUBE
图形化开发不香吗?
windows下软件的安装
- 安装linux子系统
- 安装openocd
-
安装linux子系统
以管理员身份运行PowerShell:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
更新至 WSL 2(windows 2004版本以前是不能安装wsl2的)
以管理员身份运行PowerShell并执行:dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
將 WSL 2 设定为预设值版本
先将安装新的linux子系统内核,下载,然后执行wsl --set-default-version 2
从Microsoft Store下载喜欢的linux子系统,这里我采用ubuntu18.04。
如果向迁移linux子系统到别的磁盘,可以使用LxRunOffline
。关于使用可以直接去github上搜索。安装openocd
下载,完成下载之后直接解压就可以,将解压目录下的bin文件添加到环境变量PATH中。
安装vscode以及插件
这里vscode只是编辑器,如果不习惯可以使用eclipse等别的编辑器。
下载
然后直接安装就可以,安装完成后本地需要安装如下插件: Remote - SSH
- Remote - SSH: Editing Configuration Files
- Remote - WSL
- Chinese (Simplified) Language Pack for Visual Studio Code
- vscode-icons — 推荐安装,至少图标好看一点
linux子系统环境下需要安装的插件:
- C/C++
- C++ Intellisense
- Chinese (Simplified) Language Pack for Visual Studio Code
- CMake
- GitLens — Git supercharged
-
开发环境的搭建
硬件环境
原子的stm32f767阿波罗开发板
-
软件环境
zephyr版本v2.4.0-rc1
- zephyr的工具链v0.11.4
- cmake版本3.18.2
- west版本v0.7.3
-
搭建zephyr的编译环境
先将linux子系统的换安装源
备份
sudo mv /etc/apt/sources.list /etc/apt/sourses.list.backup
新建一个
sources.list
文件sudo vim /etc/apt/sources.list
文件内容
# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
#清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
#中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
选择并更新系统
sudo apt update
sudo apt upgrade
安装依赖项
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
检查cmake版本
cmake --version
,如果下于3.13.1,那就需要升级。
请按照以下步骤添加Kitware第三方apt信息库 以获取cmake的更新版本。添加Kitware签名密钥
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
为您的OS版本添加Kitware apt存储库。对于Ubuntu 18.04 LTS
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'
然后使用以下命令安装更新的cmake apt
sudo apt update
sudo apt remove cmake
sudo apt install cmake
为python换安装源
在用户目录下新建
.pip
文件mkdir -p ~/.pip
vim ~/.pip/pip.conf
国内可用的源
# 清华
https://pypi.tuna.tsinghua.edu.cn/simple/
# 豆瓣
http://pypi.doubanio.com/simple/
# 阿里
http://mirrors.aliyun.com/pypi/simple/
# 中国科学技术大学
https://pypi.mirrors.ustc.edu.cn/simple/
# 网易
http://mirrors.163.com/pypi/simple/
pip.conf
的内容[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
获取Zephyr并安装Python依赖项
利用python3安装west,并确保~/.local/bin在您的 PATH 环境变量:
pip3 install --user -U west
echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
source ~/.bashrc
初始化项目,并下载zephyr源码
这里下载zephyr源码我们不会去github,否则下载速度会让我们崩溃west init ~/zephyrproject -m https://gitee.com/zephyr-rots/zephyr --mr v2.3.0
下载zephyr的外部模块
先改变模块仓库的路径,否则你可以试试一天是否下载的下来。
进入zephyr源码目录,打开顶层的west.yaml
,修改:
改为:至于[仓库](https://gitee.com/zephyr-rots/),是我在gitee上创建的一个zephyr源码的转存仓库,每周都会从官方同步一次更新,方便大家构建环境。
修改完成后就可以在项目目录下zephyrproject
,执行west update
安装zephyr的python3依赖
这里最好给pip或pip3换源,否则也会泪奔。。。
pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
安装工具链
-
cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.11.4/zephyr-sdk-0.11.4-setup.run
运行安装程序,将SDK安装在中
~/zephyr-sdk-0.11.4
chmod a+x 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
在之后的开发中,我们要完全遵守应用和内核分离的原则来写我们的应用
添加板子信息
这块只是做一个板子目录的大体介绍,之后会单开章节进行讲解如何添加新板子
在项目目录下搭建创建一个app目录,然后在该app目录下创建一个boards/<arch>/<boardname>
,这里我们已正点原子的stm32f767开发板为之后一系列教程的硬件基础,所以创建目录如下:
- doc目录:包含一些描述性文档
- support目录:包含openocd需要用到的配置文档
- board.cmake文件:包含板子下载信息,但这里我们采用的是子系统的方式,所以用不到
- CmakeLists.txt文件:包含板子的编译选项
- board.h文件:包含板子的引脚配置等信息
- dts_fixup.h文件:这个文件是之后设备树可以用到的文件
- Kconfig.board文件:包含对板子的Kconfig声明
- Kconfig.defconfig文件:包含要覆盖的默认kconfig变量
- pinmux.c文件:包含引脚复用信息的数组
- stm32f767.dts文件:包含板子的设备树
- stm32f767.yaml文件:包含系统测试的一些描述
- stm32f767_defconfing文件:包含整个板子配置的默认选项
添加应用信息
应用的添加后面也会单独讲解
目前可以直接zephyr/samples/hello_world
然后直接运行west build -p auto -b stm32f767 -- -DBOARD_ROOT=../../../app
就可以完成编译了。编译之后的文件默认存放在zephyr/samples/hello_world/build
下(包含.bin.elf.hex)下载程序
之后会讲解如何定制我们自己的下载指令
这里由于我们采用了Linux子系统的方式搭建的开发方式,所以官方的west flash
指令是没有办法直接使用的,没有办法使用的原因是由于linux子系统根本就不支持windows外设的驱动,因此这里我们会采用windows下的openocd来加载linux下的配置文件,最后通过windows来将文件下载到板子上,这里想法确实有点绕,但这样做了之后你就会发现通过一个指令就可以完成编译和下载,不需要和传统的linux子系开发应用一样,编译在子系统下完成,但下载得需要将生成的文件拷贝到windows下再通过工具去下载,个人感觉这种方式确实很烦人~~~~。