zephyr个人理解

以下纯属个人理解,如有错误请帮忙指正出来,联系邮箱:18501916597@163.com
zephyr是linux社区诞生的一套支持32位芯片的RTOS操作系统,它的强大之处在于它几乎继承了linux所有的开发特点:应用和驱动分离、驱动配置、第三方的软件移植方便、网络、内存、文件系统等配套都很齐全。先来上一张图介绍下目前支持的芯片,当然不是很全,有兴趣可以直接去官网(需要墙。。。)
00.搭建开发环境 - 图1
00.搭建开发环境 - 图2
00.搭建开发环境 - 图3
00.搭建开发环境 - 图4
00.搭建开发环境 - 图5
00.搭建开发环境 - 图6
00.搭建开发环境 - 图7
00.搭建开发环境 - 图8
00.搭建开发环境 - 图9
00.搭建开发环境 - 图10
难道目前只能支持这么多板子吗?当然不是,其实我们还可以将自己的板子信息也添加进去。
他对开发有什么好处呢?一套应用无视所有的板子的都可以运行算不算最大的亮点呢?O(∩_∩)O
以前对于32位没有MMU的芯片我都是采用UCOS或者FREERTOS来进行开发的,用过的都知道:
RTOS系统移植—->驱动编写——>内存管理——>抽象应用—->产品,这一套下来基本最快也要2个月,如果我们中间再换一个硬件,呵呵。。。那就只能从头来过,但zephyr可以解决的一个问题是驱动和应用分离,且驱动复用,什么意思呢?就是说当你完成了STM32F7芯片的开发的应用程序,你可以在只需要改一些配置就可以将这一套应用用于EFM32芯片上。。。。就这一个特性我就觉得很逆天了。虽然RT-THREAD也在朝着这个方向努力,但到目前为止RT-THREAD只支持ST芯片是什么鬼,如果单独只支持ST芯片,直接用STM32CUBE图形化开发不香吗?

windows下软件的安装

  • 安装linux子系统
  • 安装openocd
  • 安装vscode

    安装linux子系统

    以管理员身份运行PowerShell:

    1. dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

    更新至 WSL 2(windows 2004版本以前是不能安装wsl2的)
    以管理员身份运行PowerShell并执行:

    1. dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    將 WSL 2 设定为预设值版本
    先将安装新的linux子系统内核,下载,然后执行

    1. 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
  • Python

    开发环境的搭建

    硬件环境

  • 原子的stm32f767阿波罗开发板

  • stlink烧录器

    软件环境

  • zephyr版本v2.4.0-rc1

  • zephyr的工具链v0.11.4
  • cmake版本3.18.2
  • west版本v0.7.3
  • python版本3.6.9

    搭建zephyr的编译环境

    先将linux子系统的换安装源

  • 备份

    1. sudo mv /etc/apt/sources.list /etc/apt/sourses.list.backup
  • 新建一个sources.list文件

    1. sudo vim /etc/apt/sources.list
  • 文件内容

    1. # 阿里源
    2. deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    3. deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    4. deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    5. deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    6. deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    7. deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    8. deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    9. deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    10. deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    11. deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    12. #清华源
    13. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    14. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    15. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    16. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    17. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    18. deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
    19. deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    20. deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    21. deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    22. deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    23. #中科大源
    24. deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
    25. deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    26. deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    27. deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    28. deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
    29. deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
    30. deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
    31. deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
    32. deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
    33. deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

    选择并更新系统

    1. sudo apt update
    2. sudo apt upgrade

    安装依赖项

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

    检查cmake版本cmake --version,如果下于3.13.1,那就需要升级。
    请按照以下步骤添加Kitware第三方apt信息库 以获取cmake的更新版本。

  • 添加Kitware签名密钥

    1. 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

    1. sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'
  • 然后使用以下命令安装更新的cmake apt

    1. sudo apt update
    2. sudo apt remove cmake
    3. sudo apt install cmake

    为python换安装源

  • 在用户目录下新建.pip文件

    1. mkdir -p ~/.pip
    2. vim ~/.pip/pip.conf
  • 国内可用的源

    1. # 清华
    2. https://pypi.tuna.tsinghua.edu.cn/simple/
    3. # 豆瓣
    4. http://pypi.doubanio.com/simple/
    5. # 阿里
    6. http://mirrors.aliyun.com/pypi/simple/
    7. # 中国科学技术大学
    8. https://pypi.mirrors.ustc.edu.cn/simple/
    9. # 网易
    10. http://mirrors.163.com/pypi/simple/
  • pip.conf的内容

    1. [global]
    2. timeout = 6000
    3. index-url = https://pypi.tuna.tsinghua.edu.cn/simple

    获取Zephyr并安装Python依赖项

  • 利用python3安装west,并确保~/.local/bin在您的 PATH 环境变量:

    1. pip3 install --user -U west
    2. echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
    3. source ~/.bashrc
  • 初始化项目,并下载zephyr源码
    这里下载zephyr源码我们不会去github,否则下载速度会让我们崩溃

    1. west init ~/zephyrproject -m https://gitee.com/zephyr-rots/zephyr --mr v2.3.0
  • 下载zephyr的外部模块
    先改变模块仓库的路径,否则你可以试试一天是否下载的下来。
    进入zephyr源码目录,打开顶层的west.yaml,修改:
    00.搭建开发环境 - 图11
    改为:
    00.搭建开发环境 - 图12
    至于[仓库](https://gitee.com/zephyr-rots/),是我在gitee上创建的一个zephyr源码的转存仓库,每周都会从官方同步一次更新,方便大家构建环境。
    修改完成后就可以在项目目录下zephyrproject,执行

    1. west update
  • 安装zephyr的python3依赖
    这里最好给pip或pip3换源,否则也会泪奔。。。

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

    安装工具链

  • 下载

    1. cd ~
    2. 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

    1. chmod a+x zephyr-sdk-0.11.4-setup.run
    2. ./zephyr-sdk-0.11.4-setup.run -- -d ~/zephyr-sdk-0.11.4
  • 安装udev规则,该规则允许您以常规用户身份刷新大多数Zephyr指令

    1. sudo cp ~/zephyr-sdk-0.11.4/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
    2. sudo udevadm control --reload

    在之后的开发中,我们要完全遵守应用和内核分离的原则来写我们的应用

添加板子信息

这块只是做一个板子目录的大体介绍,之后会单开章节进行讲解如何添加新板子
在项目目录下搭建创建一个app目录,然后在该app目录下创建一个boards/<arch>/<boardname>,这里我们已正点原子的stm32f767开发板为之后一系列教程的硬件基础,所以创建目录如下:
00.搭建开发环境 - 图13

  • 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下再通过工具去下载,个人感觉这种方式确实很烦人~~~~。