[编译] 9、在Linux下搭建 nordic 最新基于 zephyr 的开发烧写环境
前言
nRF Connect SDK 包括 libs 和 app demo,该 SDK + DEMO 是基于 ZephyrOS 实现的(因此,环境搭建会稍微麻烦亿点点)!
该 SDK 支持 nRF52, nRF53, and nRF91 系列芯片。
接下来会一步步介绍如何在 Arch Linux 上搭建该 SDK 的开发环境:
- Zephyr requirements and GNU ARM Embedded Toolchain
- nRF Connect SDK
- SEGGER Embedded Studio
1、概述
首先下载 nRF Connect for Desktop,linux上是个绿色版本,直接启动即可:

然后根据 Getting Started Assistant 指导进行安装。
更详细的指导在(推荐用更详细的指导,因为上面的指导受GUI限制,不能放很详细的说明,新手手动安装,容易出现问题):
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/gs_installing.html#build-environment-cli
2、安装工具
安装:git、wget、cmake、make、dtc、tk
注: 输入 cmake --version 校验 cmake 的版本,nRF Connect SDK 需要 cmake 的版本 ≥ 3.13.1。
安装 ninja-build:
sudo pacman -S ninja
安装 GPerf:
sudo pacman -S gperf
安装 ccache:
sudo pacman -S ccache
安装 dfu-util:
dfu-util is a host side implementation of the DFU 1.0 and DFU 1.1 specifications of the USB forum.
sudo pacman -S dfu-util
安装 python-pip (3):
sudo pacman -S python-pip
安装 python-setuptools(3):
sudo pacman -S python-setuptools
安装 python 轮子工具 python-wheel (3):
sudo pacman -S python-wheel
安装压缩工具 xz-utils:
sudo pacman -S xz
安装 file (linux 的 file 命令):
sudo pacman -S file
安装 west:
west 是 ZephyrOS 用来做 CI 的工具。
west 不能pip直接安装,因为安装的版本太老了,0.8.0的,而我们这里需要用最新的版本(0.11.1),因此要拉取源码,自己安装:
git clone git@github.com:zephyrproject-rtos/west.git
cd west
git checkout v0.11.1
sudo pip install . #一定要sudo
3、获取 nRF Connect SDK 源码
nRF Connect SDK 包含 4 个 GitHub 仓库,设置 nRF Connect SDK,需要将这些仓库都拉取下来,并且安装必要的 python modules。
mkdir ncs
cd ncs
west init -m https://github.com/nrfconnect/sdk-nrf --mr master
west update #clone the project repositories, long time
west zephyr-export
操作完之后,NCS 的目录结构如下:
ncs
|___ .west
|___ bootloader
|___ modules
|___ nrf
|___ nrfxlib
|___ zephyr
|___ ...
4、安装 Python modules
cd <sourcecode_root>/ncs
pip3 install --user -r zephyr/scripts/requirements.txt
pip3 install --user -r nrf/scripts/requirements.txt
pip3 install --user -r bootloader/mcuboot/scripts/requirements.txt
5、安装 toolchain
为了实现交叉编译应用程序,我们需要下载安装 GNU Arm Embedded Toolchain。
注意:一定要注意选择的 Toolchain 的版本一定要 ≥ 9-2019-q4-major 版本要求。
设置 toolchain 一般需要如下步骤:
- 下载
- 解压到 ~/gnuarmemb 下(推荐)
- 加入环境变量
#Install the GNU Arm Embedded Toolchain
#https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.07/gcc-arm-none-eabi-10.3-2021.07-x86_64-linux.tar.bz2
tar xvf gcc-arm-none-eabi-10.3-2021.07-x86_64-linux.tar.bz2
mv gcc-arm-none-eabi-10.3-2021.07 gnuarmemb
mv gnuarmemb ~/
export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
export GNUARMEMB_TOOLCHAIN_PATH="~/gnuarmemb"
6、下载 nRF Command Line Tools
The nRF Command Line Tools is used for development, programming and debugging of Nordic Semiconductor's nRF51, nRF52, nRF53 and nRF91 Series devices.
主要功能:
- nrfjprog executable - tool for programming through SEGGER J-LINK programmers and debuggers
- mergehex executable - enables you to combine up to three .HEX files into one single file
- nrfjprog DLL - a DLL that exports functions for programming and controlling nRF51, nRF52, nRF53 and nRF91 Series devices and lets developers create their own development tools using the DLLs API
- SEGGER J-Link software and documentation pack
我们主要用其 nrfjprog 烧写固件。
https://www.nordicsemi.com/Products/Development-tools/nRF-Command-Line-Tools/Download#infotabs
nordic 将其工具弄个俄罗斯套娃,大家直接看命令:
#Install nRF-command-Line-Tools
wget https://www.nordicsemi.com/-/media/Software-and-other-downloads/Desktop-software/nRF-command-line-tools/sw/Versions-10-x-x/10-13-0/nRF-Command-Line-Tools_10_13_0_Linux64.zip
unzip nRF-Command-Line-Tools_10_13_0_Linux64.zip
cd nRF-Command-Line-Tools_10_13_0_Linux64
tar -xzf nRF-Command-Line-Tools_10_13_0_Linux-amd64.tar.gz
tar xvf nRF-Command-Line-Tools_10_13_0.tar
mv nrfjprog ~/
export PATH=${HOME}/nrfjprog:"$PATH"
注:可能会报下面的错误:
-- west flash: using runner nrfjprog
ERROR: JLinkARM DLL is invalid. Please reinstall latest JLinkARM DLL.
FATAL ERROR: command exited with status 31: nrfjprog --ids
make[3]: *** [zephyr/cmake/flash/CMakeFiles/flash.dir/build.make:72: zephyr/cmake/flash/CMakeFiles/flash] Error 31
make[2]: *** [CMakeFiles/Makefile2:4072: zephyr/cmake/flash/CMakeFiles/flash.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:4079: zephyr/cmake/flash/CMakeFiles/flash.dir/rule] Error 2
make: *** [Makefile:878: flash] Error 2
需要安装 Jlink:yaourt -S jlink (网速要好!!!)
make flash 时报错
-- runners.nrfjprog: Flashing file: /home/btfz/Desktop/apple/ncs/nrf/samples/bluetooth/peripheral_bms/build/zephyr/zephyr.hex
ERROR: JLinkARM DLL reported an error. Try again. If error condition
ERROR: persists, run the same command again with argument --log, contact Nordic
ERROR: Semiconductor and provide the generated log.log file to them.
FATAL ERROR: command exited with status 33: nrfjprog --program /home/btfz/Desktop/apple/ncs/nrf/samples/bluetooth/peripheral_bms/build/zephyr/zephyr.hex --sectoranduicrerase -f NRF52 --snr 682428062
make[3]: *** [zephyr/cmake/flash/CMakeFiles/flash.dir/build.make:72: zephyr/cmake/flash/CMakeFiles/flash] Error 33
make[2]: *** [CMakeFiles/Makefile2:4072: zephyr/cmake/flash/CMakeFiles/flash.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:4079: zephyr/cmake/flash/CMakeFiles/flash.dir/rule] Error 2
make: *** [Makefile:878: flash] Error 2
需要用 sudo 权限运行 nrfjprog --program /home/btfz/Desktop/apple/ncs/nrf/samples/bluetooth/peripheral_bms/build/zephyr/zephyr.hex --sectoranduicrerase -f NRF52 --snr 682428062
7、编译运行
➜ ncs cd nrf/samples/bluetooth/peripheral_bms/
➜ peripheral_bms git:(master) source ../../../../zephyr/zephyr-env.sh
➜ peripheral_bms git:(master) rm -rf build && mkdir build && cd build && cmake -DBOARD=nrf52dk_nrf52832 .. && make
...
[ 94%] Building C object modules/segger/CMakeFiles/modules__segger.dir/home/btfz/Desktop/apple/ncs/modules/debug/segger/SEGGER/SEGGER_RTT.c.obj
[ 94%] Building C object modules/segger/CMakeFiles/modules__segger.dir/SEGGER_RTT_zephyr.c.obj
[ 95%] Linking C static library libmodules__segger.a
[ 95%] Built target modules__segger
[ 95%] Building C object zephyr/CMakeFiles/zephyr_prebuilt.dir/misc/empty_file.c.obj
[ 96%] Linking C executable zephyr_prebuilt.elf
Logical command for additional byproducts on target: zephyr_prebuilt
[ 96%] Built target zephyr_prebuilt
Scanning dependencies of target linker_zephyr_final_script_target
[ 96%] Generating linker.cmd
[ 96%] Built target linker_zephyr_final_script_target
[ 96%] Generating isr_tables.c, isrList.bin
[ 97%] Generating dev_handles.c
[ 97%] Building C object zephyr/CMakeFiles/zephyr_final.dir/misc/empty_file.c.obj
[ 98%] Building C object zephyr/CMakeFiles/zephyr_final.dir/isr_tables.c.obj
[ 98%] Building C object zephyr/CMakeFiles/zephyr_final.dir/dev_handles.c.obj
[100%] Linking C executable zephyr.elf
Memory region Used Size Region Size %age Used
FLASH: 168248 B 512 KB 32.09%
SRAM: 29325 B 64 KB 44.75%
IDT_LIST: 0 GB 2 KB 0.00%
Generating files from zephyr.elf for board: nrf52dk_nrf52832
[100%] Built target zephyr_final
8、烧写
烧写直接用 sudo make flash,注意一定要用 sudo,此外,在安装 west 的时候也一定要用 sudo,否则会报如下错误:
/usr/bin/python3.9: No module named west
make[3]: *** [zephyr/cmake/flash/CMakeFiles/flash.dir/build.make:72: zephyr/cmake/flash/CMakeFiles/flash] Error 1
make[2]: *** [CMakeFiles/Makefile2:4072: zephyr/cmake/flash/CMakeFiles/flash.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:4079: zephyr/cmake/flash/CMakeFiles/flash.dir/rule] Error 2
make: *** [Makefile:878: flash] Error 2
9、全自动环境构建脚本
以我的风格,必须要写一个自动化构建环境脚本:(运行该脚本时,务必保证网速到位!!!)
#!/bin/bash
#https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/gs_installing.html#id10
CUR_PATH=$(cd `dirname $0`; pwd)
TOOLS_PATH=$CUR_PATH/tools
NCS_PATH=$CUR_PATH/ncs
mkdir $TOOLS_PATH
#Install the required tools
sudo pacman -S git cmake ninja gperf ccache dfu-util dtc wget \
python-pip python-setuptools python-wheel tk xz file make cmake
cmake --version
dtc --version
python3 --version
#To install the GN tool, complete the following steps:
mkdir $TOOLS_PATH/gn && cd $TOOLS_PATH/gn
wget -O gn.zip https://chrome-infra-packages.appspot.com/dl/gn/gn/linux-amd64/+/latest
unzip gn.zip
rm gn.zip
export PATH=$TOOLS_PATH/gn:"$PATH"
#Install west
mkdir $TOOLS_PATH/west && cd $TOOLS_PATH/west
git clone git@github.com:zephyrproject-rtos/west.git
cd west
git checkout v0.11.1
sudo pip install . ###mast sudo
#Install the GNU Arm Embedded Toolchain
#https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
cd $TOOLS_PATH
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.07/gcc-arm-none-eabi-10.3-2021.07-x86_64-linux.tar.bz2
tar xvf gcc-arm-none-eabi-10.3-2021.07-x86_64-linux.tar.bz2
mv gcc-arm-none-eabi-10.3-2021.07 gnuarmemb
export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
export GNUARMEMB_TOOLCHAIN_PATH=$TOOLS_PATH/gnuarmemb
#Install nRF-command-Line-Tools
cd $TOOLS_PATH
wget https://www.nordicsemi.com/-/media/Software-and-other-downloads/Desktop-software/nRF-command-line-tools/sw/Versions-10-x-x/10-13-0/nRF-Command-Line-Tools_10_13_0_Linux64.zip
unzip nRF-Command-Line-Tools_10_13_0_Linux64.zip
cd nRF-Command-Line-Tools_10_13_0_Linux64
tar -xzf nRF-Command-Line-Tools_10_13_0_Linux-amd64.tar.gz
tar xvf nRF-Command-Line-Tools_10_13_0.tar
mv nrfjprog ../
export PATH=$TOOLS_PATH/nrfjprog:"$PATH"
#Install JLink
tar zxvf JLink_Linux_V750a_x86_64.tgz
mv JLink_Linux_V750a_x86_64 ../JLink
export PATH=$TOOLS_PATH/JLink:"$PATH"
cd ..
rm -rf nRF-Command-Line-Tools_10_13_0_Linux64
#Get the nRF Connect SDK code
mkdir $NCS_PATH && cd $NCS_PATH
west init -m https://github.com/nrfconnect/sdk-nrf --mr master
west update
west zephyr-export
tree -L 1
#Install additional Python dependencies
pip3 install --user -r zephyr/scripts/requirements.txt
pip3 install --user -r nrf/scripts/requirements.txt
pip3 install --user -r bootloader/mcuboot/scripts/requirements.txt
链接
- [1]. NORDIC 手动安装指导
- [2]. nRF Command Line Tools
- [3]. 在linux上安装Zephyr-OS并跑DEMO
- [4]. 参考 nrf_linux_tool/tool/run.sh
- [5]. ninj 介绍
- [6]. ccache 介绍
- [7]. dfu-util 介绍
: ** 我做了一系列全自动构建编译环境的工程,目前可以覆盖:51单片机、stm8、esp8266、esp32、nrf51822、nrf52832、android,欢迎到我的 nbtool github 下交流:https://github.com/nbtool **

[编译] 9、在Linux下搭建 nordic 最新基于 zephyr 的开发烧写环境的更多相关文章
- [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)
星期二, 10. 七月 2018 01:01上午 - beautifulzzzz 一.SDCC(Small Device C Compiler)编译环境搭建 SDCC是一个小型设备的C语言编译器,该编 ...
- [编译] 7、在Linux下搭建安卓APP的开发烧写环境(makefile版-gradle版)—— 在Linux上用命令行+VIM开发安卓APP
April 18, 2020 6:54 AM - BEAUTIFULZZZZ 目录 0 前言 1 gradle 安装配置 1.1 卸载系统默认装的gradle 1.2 下载对应版本的二进制文件 1.3 ...
- [编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)
目录 一.SDCC(Small Device C Compiler)编译环境搭建 1.1.下载 1.2.编译 1.3.测试 二.Hex2Bin+命令行烧写工具配置使用 2.1.下载工具安装配置 2.2 ...
- [编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)
星期日, 09. 九月 2018 07:51下午 - beautifulzzzz 1.安装步骤 1) 从GNU Arm Embedded Toolchain官网下载最新的gcc-arm工具链,写文章时 ...
- 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...
- [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP
星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不讨论用IDE和文本编辑器开发的优劣,是基于以下两点考虑去尝试用命令行编译安卓APP的: 了解安卓APP ...
- 在Linux下搭建nRF51822的开发烧写环境(makefile版)
http://www.qingpingshan.com/m/view.php?aid=394836
- Linux下搭建 Cocos2d-x-2.1.4 编译环境
[tonyfield 2013.09.04 ] 参考 Linux下搭建 Cocos2d-x-2.1.4 编译环境 导入 HelloCpp 例程 1. Java 入口 HelloCpp.java Hel ...
- Linux下搭建tomcat集群全记录(转)
本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...
随机推荐
- 【转载】Nginx多服务绑定80端口及映射域名
多服务绑定80端口及映射域名 说明:业务需要配置的样例模板,如需深入了解,请查看官方文档 1.Nginx配置文件nginx.conf(可拆分多台机器部署) worker_processes 1; e ...
- Python 脚本退出
return:在定义函数时从函数中返回一个函数的返回值,终止函数的执行. os._exit(),sys.exit(),exit(),quit()都能够退出当前执行脚本,差别在于os._exit()直接 ...
- asp.net mvc中的安全性
1.重复提交攻击:通过Bind特性指定要绑定和不绑定的值. 2.Cookie盗窃:阻止脚本对站点中Cookie的访问,webconfig文件中添加<HttpCookies domain=&quo ...
- java集合(5)-List集合
序章 List集合是一个元素有序且可以重复的集合,每个元素对应一个索引,类似于数组的方式,默认是按照添加顺序,所以第一次添加元素索引为0,第二次为1.... 一 Java8改进的List接口和List ...
- dart pub上传失败如何解决
问题: Flutter Exception: Pub will wait for a while before trying to connect again. 解决 1.设置终端代理 export ...
- 在Springboot + Mybaitis-plus 项目中利用Jackson实现json对java多态的(反)序列化
Jackson允许配置多态类型处理,当JSON面对的转换对象是一个接口.抽象类或者一个基类的时候,可以通过一定配置实现JSON的转换.在实际项目中,Controller层接收入参以及在Dao层将对象以 ...
- 【深度学习】在linux和windows下anaconda+pycharm+tensorflow+cuda的配置
在linux和windows下anaconda+pycharm+tensorflow+cuda的配置 在linux和windows下anaconda+pycharm+tensorflow+cuda的配 ...
- Selnium + POM + Pytest:学习记录
简介 selenium POM Pytest 结合,通过Pytest fixture 来传递Driver 保证一个测试用例[1] :driver[1] 学习记录 插件包 selenium: 操作浏览器 ...
- webpack 命令行报错“webpack” 不是内部或外部命令的解决方法
1. NodeJS安装,笔者安装在D盘.安装目录中有两个文件夹node_cache,node_global如下: 2. 配置 npm安装路径,输入如下命令: npm config set prefix ...
- K8S系列第三篇(Docker网络)
目录 docker 网络 Docker 的四种网络模 一.网络基础 1.网络名称空间介绍 2.创建一个命名空间 1)Veth设备对 2)Veth设备操作 1> 创建Veth设备对 2> 绑 ...