• Zephyr物联网操作系统之运行环境搭建(一)【转】


    转自:https://blog.csdn.net/qq_40088639/article/details/106374413

    对于zephyr这个实时嵌入式操作系统,可以先在x86架构上搭建运行环境,学习相关知识。之后,根据实际需求,再将操作系统移植到不同架构的MCU上。

    一、环境搭建

    准备工作:安装ubuntu操作系统

    虚拟机软件版本:VMware Workstation 12

    Ubuntu版本:ubuntu 16.04 LTS 桌面版 64位(ubuntu-16.04.6-desktop-amd64.iso)

    zephyr版本:v1.14.0

    如何在虚拟机软件中安装64位的ubuntu操作系统,这里不再做过多的介绍,请自行安装,其他文章中也有介绍,可供参考。

    推荐两个学习Zephyr的连接:

    中文资料地址链接(仅供参考):

    https://zephyr-doc.readthedocs.io/zh_CN/latest/

    官方英文地址链接:

    https://docs.zephyrproject.org/1.14.0/

    具体环境搭建过程,官方英文文档都有详细说明。下面简单介绍如何根据官网说明,一步步地在Linux中搭建运行环境,主要是记录一些自己踩过的坑,供大家参考。

    1. 对Linux系统的要求

    官方文档中就有明确的说明,指定是64位的,如果在32位的操作系统中搭建运行环境,那么就会产生一系列的问题(库文件缺少、找不到依赖、编译不通过......)。

    2. CMake版本

    一般来说,ubuntu自带的CMake版本都太低,而Zephyr编译环境最低要求是版本3.13.1,官方文档给出了更新CMake的几种方式。如下图

    如果选择第一种方式进行CMake版本的更新,直接输入命令即可,命令:pip install --user cmake,但是可能会由于网络问题而导致失败。推荐使用第二种方式,在windows下先下载(速度会快很多)文件cmake-3.14.7-Linux-x86_64.sh,再拷贝到ubuntu中,执行对应的命令。

    文件cmake-3.14.7-Linux-x86_64.sh下载,百度网盘链接:

    链接:https://pan.baidu.com/s/1jzlPLIFoZpy1Pg-MluaNxA

     
    提取码:d1hu

    3. 安装SDK

    官方说明如下图

    在ubuntu上使用wget命令去下载SDK安装包,下载速度可能会比较慢,可以在windows上下载成功之后,再拷贝到ubuntu中进行SDK的安装。

    SDK安装包百度网盘下载链接:

    链接:https://pan.baidu.com/s/1yaTP2XP5eyAxXGsQuej9hA 

    提取码:pj4c

    在根目录下新建目录zephyrsdk,把下载好的SDK安装文件放入该目录中。

    更新CMake版本和下载SDK,都属于准备工作。接下来,就安装SDK。

    (1) 执行安装命令

    wgp@wgp:/zephyrsdk$ sudo sh zephyr-sdk-0.10.0-setup.run

    注意:

    A. 要使用sudo进行安装,否则提示“权限不够……”。

    B. 安装时,使用默认的安装目录即可,默认安装在:/opt/zephyr-sdk/  。安装结束,可以看到/opt/zephyr-sdk目录下生成了很多文件,说明SDK安装成功。

    (2)设置系统环境变量,如下

    export ZEPHYR_GCC_VARIANT= zephyr

    export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk

    4. 跳到Getting Started Guide 文档

    安装完SDK,接着跳转到Getting Started Guide 文档,如下图。

    从这里开始继续阅读

    按照官方文档的说明,接下来就需要安装west工具。

    5. 安装west工具并克隆远程代码仓库

    执行命令:pip install --user west

    之后使用west下载Zephyr源码仓库,命令如下。

    west init zephyrproject //先下载到源码

    cd zephyrproject

    west update //然后更新源码

    官方文档说明,如下图

    需要注意的是要在用户目录下执行命令:west init zephyrproject。因为在安装west的时候,加了参数--user。下载到源码仓库。

    源码仓库下载过程中的打印:

    wgp@wgp:~$ west init zephyrproject
    === Initializing in /home/wgp/zephyrproject
    --- Cloning manifest repository from https://github.com/zephyrproject-rtos/zephyr, rev. master
    初始化空的 Git 仓库于 /home/wgp/zephyrproject/.west/manifest-tmp/.git/
    remote: Enumerating objects: 380995, done.
    接收对象中:  10% (41047/380995), 63.69 MiB | 33.00 KiB/s    


    接收对象中:  18% (71765/380995), 109.82 MiB | 60.00 KiB/s

    ....................................................................................................................................................................................

    成功下到源码仓库,如下图。

    更新源码仓库,执行命令:west init

    更新完整个源码仓库,可以发现,里面包含有截至目前官方更新的所有zephyr源码版本。可以使用git命令查看所有的本地代码版本库,命令:git branch -a 

    创建一个本地分支,假设拉取的是版本V1.14.0的,在源码目录下,执行命令:

    // 取远程分支并创建一个本地分支

    //命令格式:git checkout –b 本地分支名 origin/远程分支名

    wgp@wgp:~/zephyrproject/zephyr$ git checkout -b  v1.14.0  remotes/origin/v1.14-branch

    查看刚创建好的本地仓库,命令:git branch

    这样就成功地取到了版本1.14.0的源代码。

    6 . 安装python依赖包

    Zephyr源码里面有个文件requirements.txt,目录:/zephyr/scripts/requirements.txt

    官网描述如下

    所以,在zephyr源码的跟目录下,执行命令即可安装依赖包:

    wgp@wgp:~/zephyrproject$ pip3 install --user -r zephyr/scripts/requirements.txt

    如下图

    7. 设置工具链

    官方说明:

    目前是在X86平台上搭建并运行程序,所以,ZEPHYR_TOOLCHAIN_VARIANT设置为:host

    ZEPHYR_TOOLCHAIN_VARIANT=host

    后续如果要移植到微处理器上,就需要指定自己的工具链。第一部分,运行环境搭建结束,接下来简单介绍如何构建和运行自己的应用程序。

    二、构建和运行自己的应用程序

    以编译和运行hello_world这个demo为例。

    1. 进入源码的根目录

    2. 设置环境变量

    export ZEPHYR_TOOLCHAIN_VARIANT=host

    export ZEPHYR_GCC_VARIANT=zephyr

    export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk

    方式1: 设置系统环境变量仅生效于当前控制台

    方式2:环境变量永久生效

    避免每次打开终端都设置一遍环境变量,可以把这些环境变量的设置放入/ect/profile中。重启虚拟机,使环境变量永久生效,这样就不用每次打开终端都要执行 source /etc/profile。

    重启ubuntu之后,可以再将这几个环境变量的值打印出来,进行核对。

    如果要释放环境变量,则使用unset命令,可以在unset之后,再打印环境变量的值,什么都没有。

    注意:设置环境变量的时候,等号右边不能有空格!否则,环境变量设置失效!这虽然是基础知识,但是难免也有大意的时候。

    例子

    A.在/ect/profile中设置

    export ZEPHYR_GCC_VARIANT= zephyr

    B.然后:source /etc/profile

    C.最后在终端打印环境变量的值:echo $ ZEPHYR_GCC_VARIANT

    打印出来的结果是空格!并不是正确的环境变量值zephyr

    3. 配置Zephyr构建环境

    每次打开新的终端,编译新的应用程序的时候,都要source一下zephyr-env.sh

    命令:source zephyr-env.sh

    4. 在Demo里面新建一个build

    hello_world这个Demo在源码根目录下的samples目录中,在Demo目录下新建一个build目录,并进入build目录,如下图。

    5 . 执行命令

    首先指定目标板型并编译,这里是运行在X86平台上,所以指定的板型为:qemu_x86

    命令:

    wgp@wgp:~/zephyrproject/zephyr/samples/hello_world/build$ cmake -GNinja -DBOARD=qemu_x86 ..

    然后再执行命令

    wgp@wgp:~/zephyrproject/zephyr/samples/hello_world/build$ ninja

    最后运行目标程序

    wgp@wgp:~/zephyrproject/zephyr/samples/hello_world/build$ ninja run

    过程记录,如下图:

    运行结果如下图:

    打印出了hello world!  qemu_x86

    三、源码目录结构简介

    Arch目录:存放特定处理器架构的芯片平台源码。

    Boards目录:存放与开发板相关的源代码和配置文件。

    Doc目录:存放相关的文件和工具。

    Driver目录:存放设备驱动源码。

    Include目录:存放除了在lib文件夹定义的其他公共APIs包含的文件。

    Kernel目录:存放zephyr微内核源码。

    Lib目录:存放库源码,包括最小的C标准库。

    Misc目录:存放各种源码文件

    Net目录:存放网络通信源码,包括蓝牙协议栈和网络通信协议栈。

    Samples目录:存放zephyr内核、蓝牙协议栈、网络通信协议栈示例应用程序。

    Tests目录:存放内核功能的测试代码和参考基准。

    Script目录:存放编译和测试应用程序的各种各种程序和其他文件。

    Subsys目录:子系统目录。

    四、应用程序开发

    一个简单的App目录结构如下:

    wgp@wgp:~/zephyrproject/zephyr/samples/hello_world$ tree

    .

    ├── CMakeLists.txt

    ├── prj.conf

    ├── README.rst

    ├── sample.yaml

    └── src

        └── main.c

    1 directory, 5 files

    wgp@wgp:~/zephyrproject/zephyr/samples/hello_world$

    说明:

      1. CMakeLists.txt:文件列表。该文件告诉zephyr系统,在哪里可以找到其他的支持和依赖文件,并将App目录和zephyr的CMake开发系统链接起来。
      2. prj.conf:内核配置文件。一个应用程序通常要提供一个配置文件(prj.conf),它为一个或者多个内核配置选项指定配置参数,这些应用程序设置和开发板的设置合并,产生内核配置文件。
      3. main.c:是应用程序的源代码文件。一个应用程序通常需要一个或者多个源文件,这些源文件通常位于子目录src中。
    【作者】张昺华
    【大饼教你学系列】https://edu.csdn.net/course/detail/10393
    【新浪微博】 张昺华--sky
    【twitter】 @sky2030_
    【微信公众号】 张昺华
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    第01组 Alpha冲刺(5/6)
    第01组 Alpha冲刺(4/6)
    第01组 Alpha冲刺(3/6)
    第01组 Alpha冲刺(2/6)
    第01组 Alpha冲刺(1/6)
    第01组(17)需求分析报告
    第01组(17)团队展示
    结对编程作业
    Leetcode 每日一题:1014. 最佳观光组合
    Leetcode13. 罗马数字转整数
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13914310.html
Copyright © 2020-2023  润新知