Zephyr实战篇之west工具软件

1.简介

首先,让我们来看看West是什么?

West是Zephyr项目提供的一款命令行工具,也被Zephyr官网称作”瑞士军刀“,可扩展的命令行工具,负责Zephyr工作区管理,管理不同的仓库,下载所有Zephyr源码以及其他依赖包配置工作区,通过调用其他工具,来实现工程的构建,烧写以及调试,支持添加自定义扩展指令。

2.边学边做

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

pip3 install --user -U west  

初始化完成之后,我们的工作区就会出现两个新的文件夹,一个是.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,可以将这些模块全部下载到本地。这样一来,工作区中就会增加一些新的文件夹,看起来就像:

total 32  
drwxrwxr-x  8 jobs jobs 4096 Aug  8 09:12 ./  
drwxr-xr-x 11 jobs jobs 4096 Aug  7 09:44 ../  
drwxrwxr-x  3 jobs jobs 4096 Aug  8 09:12 bootloader/  
drwxrwxr-x  9 jobs jobs 4096 Aug  8 09:15 modules/  
drwxrwxr-x  4 jobs jobs 4096 Aug  8 09:12 tools/  
drwxrwxr-x  6 jobs jobs 4096 Aug  7 09:21 .venv/  
drwxrwxr-x  2 jobs jobs 4096 Aug  7 10:45 .west/  
drwxrwxr-x 23 jobs jobs 4096 Aug  7 10:45 zephyr/  

至此,全部代码才算是完整的被下载下来。通过执行west list还可以显示当前所有的外部代码仓库信息:

manifest     zephyr                       HEAD                                     N/A  
acpica       modules/lib/acpica           f16a0b4d0f0edd7b78a332fcf507be2187fac21e https://github.com/zephyrproject-rtos/acpica  
canopennode  modules/lib/canopennode      dec12fa3f0d790cafa8414a4c2930ea71ab72ffd https://github.com/zephyrproject-rtos/canopennode  
chre         modules/lib/chre             b7955c27e50485b7dafdc3888d7d6afdc2ac6d96 https://github.com/zephyrproject-rtos/chre  
cmsis        modules/hal/cmsis            74981bf893e8b10931464b9945e2143d99a3f0a3 https://github.com/zephyrproject-rtos/cmsis  
edtt         tools/edtt                   64e5105ad82390164fb73fc654be3f73a608209a https://github.com/zephyrproject-rtos/edtt  
fatfs        modules/fs/fatfs             427159bf95ea49b7680facffaa29ad506b42709b https://github.com/zephyrproject-rtos/fatfs  
hal_altera   modules/hal/altera           0d225ddd314379b32355a00fb669eacf911e750d https://github.com/zephyrproject-rtos/hal_altera  
hal_ambiq    modules/hal/ambiq            c8203b6fc752e51fb3cb1e98441f392cc4493623 https://github.com/zephyrproject-rtos/hal_ambiq  
hal_atmel    modules/hal/atmel            5ab43007eda3f380c125f957f03638d2e8d1144d https://github.com/zephyrproject-rtos/hal_atmel  
hal_espressif modules/hal/espressif        ae1bd648a1ac701672c46b6ff4eadfa716937ce3 https://github.com/zephyrproject-rtos/hal_espressif  
hal_ethos_u  modules/hal/ethos_u          90ada2ea5681b2a2722a10d2898eac34c2510791 https://github.com/zephyrproject-rtos/hal_ethos_u  
hal_gigadevice modules/hal/gigadevice       2994b7dde8b0b0fa9b9c0ccb13474b6a486cddc3 https://github.com/zephyrproject-rtos/hal_gigadevice  
hal_infineon modules/hal/infineon         0bebc14d8bd1a249ee7fbc70b37db6f01f72544f https://github.com/zephyrproject-rtos/hal_infineon  
hal_intel    modules/hal/intel            b04f13d58bd7b5b9349d6fc2e248679ce1b5579d https://github.com/zephyrproject-rtos/hal_intel  
hal_microchip modules/hal/microchip        5d079f1683a00b801373bbbbf5d181d4e33b30d5 https://github.com/zephyrproject-rtos/hal_microchip  
(还有不少呢!篇幅限制,贴了少量)  

其他一些版本管理相关的指令还有:

West diff类似于git diff

West status类似于git status

要注意的是,这几个指令的作用范围是所有代码仓库,包括zephyr自己以及其所依赖的外部代码。

那么zephyr或者说west是怎么知道需要下载哪些外部代码呢?这全都要感谢一个叫做west.yaml的文件,他藏在zephyr源码根目录下,长这个样子:

manifest:  
  defaults:  
    remote: upstream  
  
  remotes:  
    - name: upstream  
      url-base: https://github.com/zephyrproject-rtos  
    - name: babblesim  
      url-base: https://github.com/BabbleSim  
  
  group-filter: [-babblesim]  
  
  #  
  # Please add items below based on alphabetical order  
  projects:  
    - name: acpica  
      revision: f16a0b4d0f0edd7b78a332fcf507be2187fac21e  
      path: modules/lib/acpica  
    - name: bsim  
      repo-path: babblesim-manifest  
      revision: 384a091445c57b44ac8cbd18ebd245b47c71db94  
      path: tools/bsim  
      groups:  
        - babblesim  

其中最重要的就是这个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。

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

west build -b mimxrt1060_evk samples/hello_world  

实现同样的功能如果不使用west呢?就要用以下这组命令:

cd samples/hello_world  
mkdir build  
cd build  
cmake -DBOARD=mimxrt1060_evk ..  
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实战篇之west工具软件-电子产品世界论坛

<think>好的,用户现在想查找关于nRF Connect SDK的文档或教程。我需要先理解用户的需求。他们可能是在开发基于Nordic芯片的蓝牙应用,需要相关的开发资料。 首先,我应该回顾用户提供的引用内容。引用[1]提到了nRF Toolbox,一个开源的移动端应用,里面集成了DFU库。这可能对用户有帮助,尤其是如果他们需要开发移动端应用的话。不过用户主要问的是SDK的文档或教程,所以可能需要更直接的资源。 引用[2]提到了如何编译示例项目,将文件夹复制到SDK目录下,并使用Keil进行构建。这说明用户可能在使用nRF5 SDK,但nRF Connect SDK是较新的版本,基于Zephyr RTOS,所以可能需要区分这两者。用户可能需要明确他们使用的是哪个版本的SDK,但假设他们指的是最新的nRF Connect SDK。 引用[3]提到检查API返回码的重要性,这在开发过程中是良好的实践,但用户现在需要的是文档和教程,所以这可能作为补充信息。 接下来,我需要给出nRF Connect SDK的官方文档链接,这是最权威的来源。同时,Nordic的开发者社区(DevZone)和他们的YouTube频道可能有教程和视频资源。GitHub上的示例代码也很重要,用户可以参考实际项目。 另外,用户提供的引用中有nRF Toolbox的源码,如果用户需要移动端开发的资料,可以建议他们参考这些仓库,但可能不是直接相关于nRF Connect SDK。 用户可能需要基础教程,比如环境搭建、第一个示例项目的构建,以及如何添加外设驱动。我应该分步骤列出这些资源,并附上链接。同时,提醒他们在开发过程中检查API返回码,如引用[3]所述。 还要考虑用户可能的后续问题,比如环境配置问题或示例代码编译错误,所以生成相关问题时要包括这些方面。此外,DFU和低功耗优化也是常见需求,可以作为相关问题提出。 最后,确保回答结构清晰,分点列出,并正确引用提供的参考资料。尤其是引用[1]中的nRF Toolbox可以作为移动端开发的参考,引用[2]的编译步骤可能对使用旧版SDK的用户有用,但需要指出nRF Connect SDK的不同之处。</think>### NRF Connect SDK 资料与教程整理 以下是关于nRF Connect SDK的官方文档、教程和实用资源整理: --- #### 一、**官方核心文档** 1. **入门指南** - 安装工具链(包含SDK、工具链配置、环境变量设置) - 链接:[nRF Connect SDK Getting Started](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/getting_started.html) [^1] - 包含Windows/Linux/macOS系统的详细配置步骤。 2. **API与开发手册** - 蓝牙协议栈、外设驱动、电源管理等模块的API文档: $$ \text{路径:SDK安装目录}/nrfxlib/doc $$ - 示例代码解析:[nRF Connect SDK Examples](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/samples.html) --- #### 二、**教程与实战资源** 1. **Nordic开发者社区(DevZone)** - 常见问题解答、技术文章、项目案例: [Nordic DevZone](https://devzone.nordicsemi.com/) - 推荐搜索关键词:`nRF Connect SDK tutorial`、`BLE peripheral setup`[^2] 2. **YouTube视频教程** - Nordic官方频道提供从环境搭建到BLE应用的完整视频: [Nordic Semiconductor YouTube](https://www.youtube.com/c/NordicSemiconductor) 3. **GitHub示例代码** - 官方示例仓库(需配合SDK使用): [nRF Connect SDK GitHub Examples](https://github.com/nrfconnect/sdk-nrf) --- #### 三、**关键开发步骤** 1. **环境配置** - 使用`nRF Connect for Desktop`工具安装SDK和依赖项。 - 验证安装: ```bash west update west build -b <board_name> samples/hello_world ``` 2. **第一个BLE项目** - 参考示例路径:`samples/bluetooth/peripheral_hr`(心率监测器) - 编译命令: ```bash west build -b nrf52840dk_nrf52840 ``` 3. **添加外设驱动** - 在`prj.conf`中启用驱动(如SPI、I2C): ```conf CONFIG_SPI=y CONFIG_I2C=y ``` --- #### 四、**常见问题与调试** 1. **编译错误处理** - 确保SDK版本与硬件兼容(如nRF52840需SDK v1.8.0+)[^2]。 - 检查工具链路径是否配置正确(如`ZEPHYR_BASE`环境变量)。 2. **日志调试** - 使用`CONFIG_LOG=y`启用日志功能,通过RTT或UART输出。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值