请选择 进入手机版 | 继续访问电脑版
查看: 2836|回复: 0

清风徐来——Zephyr实战篇(2)之西

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31998
    最后登录
    2024-4-9
    发表于 2021-8-19 12:57:00 | 显示全部楼层 |阅读模式
    清风徐来——Zephyr实战篇(2)之西

    上一次,我们已经成功地让Zephyr向世界问好(Hello World),今天主要给大家介绍一下West这个小编一直推荐大家使用的,用于Zephyr开发的瑞士军刀!

    首先,让我们来看看West是什么?
    West是Zephyr项目提供的一款命令行工具,“Meta-tool“也被Zephyr官网称作”瑞士军刀“,可扩展的命令行工具,负责Zephyr工作区管理,管理不同的仓库,下载所有Zephyr源码以及其他依赖包配置工作区,通过调用其他工具,来实现工程的构建,烧写以及调试

    支持添加自定义扩展指令

    安装west也很方便,可以直接通过pip进行安装:

    pip3 install --user -U west
    安装好后,执行west -v可以验证安装是否成功。
    我们运行的第一条west指令通常是west init,用来初始化一个Zephyr工作区,同时,还可以传入参数,指定工作区位置以及名字:

    west init your_path/ your_project_name

    初始化完成之后,我们的工作区就会出现两个新的文件夹,一个是.west,里面是west的配置信息,另一个是zephyr,这里面包含了完整的zephyr代码。

    可能有朋友要问了,既然说west内部集成了git的功能,来实现代码的管理,我怎么没看到你指定代码地址和代码版本号呢?别急,马上给大家解密。

    west init默认使用https://github.com/zephyrproject-rtos/zephy 作为zephyr代码仓库地址,同时也可以通过-m来手动指定,使用--mr来指定所需版本,例如:

    west init -m https://github.com/zephyrproject-rtos/zephyr --mr v2.6.0

    当然,只是下载zephyr的完整代码是不够的,zephyr依赖于很多的其他模块,例如驱动的SDK代码或者说hal层,这个是各大半导体厂商所定义的,这些都是单独管理的。通过执行west update,可以将这些模块全部下载到本地。这样一来,工作区中就会增加一些新的文件夹,看起来就像:
    15.png
    至此,全部代码才算是完整的被下载下来。通过执行west list还可以显示当前所有的外部代码仓库信息:
    16.png
    其他一些版本管理相关的指令还有:
    West diff类似于git diff
    West status类似于git status
    要注意的是,这几个指令的作用范围是所有代码仓库,包括zephyr自己以及其所依赖的外部代码。

    那么zephyr或者说west是怎么知道需要下载哪些外部代码呢?这全都要感谢一个叫做west.yaml的文件,他藏在zephyr源码根目录下,长这个样子:
    17.png
    其中最重要的就是这个manifest,他主要指定要下载的各个代码仓库的名称,路径和版本,由四个sub-section构成,包括default,remotes,projects和self。

    其中remotes和projects是必须的,remotes指定远端地址,projects是各个子仓库的地址和版本。

    举个简单的例子,比如这个canopennode,当我们执行west update时候,west会将remotes中定义的url-base和projects中的name结合为https://github.com/zephyrproject-rtos/canopennode,并下载版本为f167efe85c8c7de886f1bc47f9173cfb8a346bb5的代码到modules/lib/canopennode中。当然,也可以在remotes中指定多个url-base,类似这样:
    1. remotes:
    2.   - name: remote1
    3.     url-base: https://example.com/base1
    4.   - name: remote2
    5.     url-base: https://example.com/base2
    复制代码

    出现这种情况的时候,就要在projects的各个节点中,添加remote属性,来指定需要使用哪个remote来下载代码。
    1. projects:
    2.     - name: proj1
    3.       remote: remote1
    4.       path: extra/project-1
    5.     - name: proj2
    6.       remote: remote2
    7.       revision: 98ab65cded
    复制代码
    因此,当我们需要添加一个额外的模块到我们的zephyr系统中,就可以通过在west.yaml文件中添加对应的版本和地址信息,当执行west update之后即可将其加载到我们的项目中。

    有了代码,就到了我们的代码编译下载调试阶段了。当然,我们强烈建议大家使用west来进行这个工作,如果实在不想用的话,使用原始命令行也是可以的,我们来看个例子,首先是使用west来编译代码:

    west build -b mimxrt1060_evk samples/hello_world
    实现同样的功能如果不使用west呢?就要用以下这组命令:
    1. cd samples/hello_world
    2. mkdir build
    3. cd build
    4. cmake -DBOARD=mimxrt1060_evk ..
    5. make -j
    复制代码
    类似的还有烧写和调试:

    west flash 等同于  make flash
    west debug  等同于  make debug
    west debugserver   等同于 make debugserver

    信息查看, 比如打印一些rom和ram占用情况:

    west build -t rom_report  等同于  make rom_report
    west build -t ram_report  等同于  make ram_report

    查看当前所支持的所有板子:

    west boards

    那么,以上就是被冠以“瑞士军刀“之名的west工具的简单介绍,也是我们在日常开发中,出现频率最高的west指令。

    充分利用好west工具可以让我们的开发达到事半功倍的效果。最直观的方面就是,我们需要敲的指令数好像变少了,,,,

    在下一期,小编会为大家介绍构建Zephyr工程时两个必不可少的东西,DeviceTree和Kconfig文件。

    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-16 14:57 , Processed in 0.119881 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表