天天看點

[編譯] 9、在Linux下搭建 nordic 最新基于 zephyr 的開發燒寫環境

目錄

  • 前言
  • 1、概述
  • 2、安裝工具
  • 3、擷取 nRF Connect SDK 源碼
  • 4、安裝 Python modules
  • 5、安裝 toolchain
  • 6、下載下傳 nRF Command Line Tools
  • 7、編譯運作
  • 8、燒寫
  • 9、全自動環境建構腳本
  • 連結

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

首先下載下傳 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

安裝:git、wget、cmake、make、dtc、tk

注: 輸入 cmake --version 校驗 cmake 的版本,nRF Connect SDK 需要 cmake 的版本 ≥ 3.13.1。

安裝 ninja-build:

Ninja is a small build system with a focus on speed. It differs from other build systems in two major respects: it is designed to have its input files generated by a higher-level build system, and it is designed to run builds as fast as possible.

sudo pacman -S ninja
           

安裝 GPerf:

GNU gperf is a perfect hash function generator. For a given list of strings, it produces a hash function and hash table, in form of C or C++ code, for looking up a value depending on the input string. The hash function is perfect, which means that the hash table has no collisions, and the hash table lookup needs a single string comparison only.

sudo pacman -S gperf
           

安裝 ccache:

Ccache (or “ccache”) is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again. Ccache is free software, released under the GNU General Public License version 3 or later. See also the license page.

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 [email protected]:zephyrproject-rtos/west.git
cd west
git checkout v0.11.1
sudo pip install .      #一定要sudo
           

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

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
           

為了實作交叉編譯應用程式,我們需要下載下傳安裝 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"
           

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

需要用 sudo 權限運作 nrfjprog --program /home/btfz/Desktop/apple/ncs/nrf/samples/bluetooth/peripheral_bms/build/zephyr/zephyr.hex --sectoranduicrerase -f NRF52 --snr 682428062

➜  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
           

燒寫直接用

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
           

以我的風格,必須要寫一個自動化建構環境腳本:(運作該腳本時,務必保證網速到位!!!)

#!/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 [email protected]: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 **