Set up Nordic nRF Connect SDK (NCS)
Nordic Semiconductor devices require the nRF Connect SDK (NCS). This is a fork of the Zephyr project that Nordic Semiconductor maintains and includes some distinct features and IP. For instance, NCS includes the firmware for the cellular modem on the nRF9160, which is unavailable in the upstream Zephyr project.
This section will guide you through installing NCS and the Zephyr tree
(including the Golioth SDK) in a directory called golioth-ncs-workspace
.
Install Dependencies and West
Install Dependencies
- Linux
- MacOS
- Windows
-
Install dependencies with
apt
:sudo apt update
sudo apt install --no-install-recommends git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget python3-dev python3-pip \
python3-setuptools python3-tk python3-venv python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev -
West requires CMake version 3.20.0 or higher. Check the version that your package manager installed:
$ cmake --version
cmake version 3.16.3If you have an older version, Ubuntu 20.04 systems can add the Kitware repository which maintains the newest release:
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main'
sudo apt update
sudo apt install cmake
cmake --versionIf the Kitware repository doesn't work for you (ie: your system is not running Ubuntu 20.04), you can build the stable version of CMake from source.
Install West
We recommend creating a python3
virtual environment to avoid running into
tooling incompatibilities.
- Install within a virtualenv
- Install globally
-
Create your workspace directory:
mkdir ~/golioth-ncs-workspace
-
Create a new virtual environment:
Even though we haven't pulled down Zephyr yet, we can create the virtual environment in the place where we will pull down Zephyr.
python3 -m venv ~/golioth-ncs-workspace/.venv
-
Activate the virtual environment:
source ~/golioth-ncs-workspace/.venv/bin/activate
Whenever the virtual environment is active, your shell's prompt will be prefixed with
(.venv)
.Deactivate the virtual environment when you're done by running
deactivate
.noteAnytime you need to use west or Zephyr, remember to re-activate the virtual environment.
-
Now, use
pip
to installwest
(beginning with thewheel
dependency):Because we're in a
python3
virtualenv
, we don't need to specifypip3
and can just usepip
(because virtual env knows the best version to use)pip install wheel
pip install west
-
Create your workspace directory:
mkdir ~/golioth-ncs-workspace
-
Use
pip3
to installwest
(beginning with thewheel
dependency):pip3 install wheel
pip3 install west
-
Start by installing dependencies with
brew
:brew install cmake ninja gperf python3 ccache qemu dtc
Install West
We recommend creating a python3
virtual environment to avoid running into
tooling incompatibilities.
- Install within a virtualenv
- Install globally
-
Create your workspace directory:
mkdir ~/golioth-ncs-workspace
-
Create a new virtual environment:
Even though we haven't pulled down Zephyr yet, we can create the virtual environment in the place where we will pull down Zephyr.
python3 -m venv ~/golioth-ncs-workspace/.venv
-
Activate the virtual environment:
source ~/golioth-ncs-workspace/.venv/bin/activate
Whenever the virtual environment is active, your shell's prompt will be prefixed with
(.venv)
.Deactivate the virtual environment when you're done by running
deactivate
.noteAnytime you need to use west or Zephyr, remember to re-activate the virtual environment.
-
Now, use
pip
to installwest
(beginning with thewheel
dependency):Because we're in a
python3
virtualenv
, we don't need to specifypip3
and can just usepip
(because virtual env knows the best version to use)pip install wheel
pip install west
-
Create your workspace directory:
mkdir ~/golioth-ncs-workspace
-
Use
pip3
to installwest
(beginning with thewheel
dependency):pip3 install wheel
pip3 install west
Package Manager: Chocolatey
The chocolatey package manager needs to be installed
to fetch software packages required by Zephyr. These instructions must be run in
a cmd.exe
command prompt. The required commands differ on PowerShell.
-
Open an Administrator
cmd.exe
window:- press the Windows key
- type
cmd.exe
- right-click the result, and choose
Run as Administrator
-
Disable global confirmation to avoid having to confirm the installation of individual programs:
choco feature enable -n allowGlobalConfirmation
-
Use
choco
to install the required dependencies:choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install ninja gperf python git dtc-msys2 wget 7zip -
Close the window and open a new
cmd.exe
window as a regular user to continue
Install West
west
is the Zephyr "meta tool" that will allow you to build firmware, install
packages, and flash firmware. There are various dependencies required, depending
upon your operating system (OS), because west
is Python based.
- Install within a virtualenv
- Install globally
-
Create your workspace directory:
cd %HOMEPATH%
mkdir golioth-ncs-workspace -
Create a new virtual environment:
cd %HOMEPATH%
python -m venv golioth-ncs-workspace\.venv -
Activate the virtual environment:
## cmd.exe
golioth-ncs-workspace\.venv\Scripts\activate.bat
## PowerShell
golioth-ncs-workspace\.venv\Scripts\Activate.ps1Once activated your shell will be prefixed with
(.venv)
. The virtual environment can be deactivated at any time by runningdeactivate
.noteRemember to activate the virtual environment whenever you need to use the
west
command. -
Install west:
Now, use
pip
to installwest
.pip install west
-
Create your workspace directory:
cd %HOMEPATH%
mkdir golioth-ncs-workspace -
Use
pip3
to installwest
:pip install -U west
Installing the Golioth Firmware SDK for NCS
- Linux
- MacOS
- Windows
-
With
west
installed, grab the Golioth NCS SDK:cd ~
west init -m https://github.com/golioth/golioth-firmware-sdk.git --mr v0.16.0 --mf west-ncs.yml ~/golioth-ncs-workspace
cd golioth-ncs-workspace/modules/lib/golioth-firmware-sdk
git submodule update --init --recursive
west update -
Tell
west
to automatically configure CMake:west zephyr-export
-
Lastly, install the remaining dependencies:
- Install within a virtualenv
- Install globally
pip install -r ~/golioth-ncs-workspace/zephyr/scripts/requirements.txt
pip3 install -r ~/golioth-ncs-workspace/zephyr/scripts/requirements.txt
-
With
west
installed, grab the Golioth NCS SDK:cd ~
west init -m https://github.com/golioth/golioth-firmware-sdk.git --mr v0.16.0 --mf west-ncs.yml ~/golioth-ncs-workspace
cd golioth-ncs-workspace/modules/lib/golioth-firmware-sdk
git submodule update --init --recursive
west update -
Tell
west
to automatically configure CMake:west zephyr-export
-
Lastly, install the remaining dependencies:
- Install within a virtualenv
- Install globally
pip install -r ~/golioth-ncs-workspace/zephyr/scripts/requirements.txt
pip3 install -r ~/golioth-ncs-workspace/zephyr/scripts/requirements.txt
-
With
west
installed, grab the Golioth NCS SDK:cd %HOMEPATH%
west init -m https://github.com/golioth/golioth-firmware-sdk.git --mr v0.16.0 --mf west-ncs.yml %HOMEPATH%/golioth-ncs-workspace
cd golioth-ncs-workspace/modules/lib/golioth-firmware-sdk
git submodule update --init --recursive
west update -
Tell
west
to automatically configure CMake:west zephyr-export
-
Lastly, install the remaining dependencies:
- Install within a virtualenv
- Install globally
pip install -r %HOMEPATH%/golioth-ncs-workspace/zephyr/scripts/requirements.txt
pip3 install -r %HOMEPATH%/golioth-ncs-workspace/zephyr/scripts/requirements.txt
Installing the Zephyr SDK Toolchain
Nordic chips are ARM-based device, so we will use the ARM toolchains (gcc, gdb, etc) included in the Zephyr SDK
Download the latest SDK installer:
- Linux
- MacOS
- Windows
cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.4/zephyr-sdk-0.16.4_linux-x86_64.tar.xz
Unpack the archive and run the installer. The SDK will be placed in the ~/zephyr-sdk-0.16.4
directory:
tar -xvf zephyr-sdk-0.16.4_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.4
./setup.sh
Answer y
to both of the questions asked during the setup process.
Install udev rules, which allow you to flash most Zephyr boards as a regular user:
sudo cp ~/zephyr-sdk-0.16.4/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload
cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.4/zephyr-sdk-0.16.4_macos-x86_64.tar.xz
Unpack the archive and run the installer. The SDK will be placed in the ~/zephyr-sdk-0.16.4
directory:
tar xvf zephyr-sdk-0.16.4_macos-x86_64.tar.xz
cd zephyr-sdk-0.16.4
./setup.sh
Unpack the archive and run the installer. The SDK will be placed in the %HOMEPATH%\zephyr-sdk-0.16.4
directory:
cd %HOMEPATH%
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.4/zephyr-sdk-0.16.4_windows-x86_64.7z
7z x zephyr-sdk-0.16.4_windows-x86_64.7z
cd zephyr-sdk-0.16.4
setup.cmd
Answer y
to both of the questions asked during the setup process.
Installing the Segger J-Link and nRF Command Line Tools
Zephyr uses nrfjprog
to flash Nordic targets using a hardware programmer like
the Segger J-Link, or the debugger that is built into the development kit (DK)
boards. This tool is part of the nRF Command Line Tools which we will install
along with the Segger tool.
-
Go to Segger and download the latest J-Link Software and Documentation Pack
-
Run the J-Link installer
sudo dpkg -i JLink_Linux_V760f_x86_64.deb
-
Go to the nRF Command Line Tools page. Scroll down, select your operating system, and download the installer package.
-
Run the nRF Command Line Tools installer
sudo dpkg -i nrf-command-line-tools_10.15.2_amd64.deb
Build Sample Firmware
Build firmware
Your system is all set up and ready to start building & flashing with Zephyr. Verify by building a minimal sample from the Zephyr tree. Here we are using the nRF9160 DK as an example:
- Linux
- MacOS
- Windows
cd ~/golioth-ncs-workspace/zephyr
west build -p auto -b nrf9160dk/nrf9160/ns samples/basic/minimal
cd ~/golioth-ncs-workspace/zephyr
west build -p auto -b nrf9160dk/nrf9160/ns samples/basic/minimal
cd %HOMEPATH%\golioth-ncs-workspace\zephyr
west build -p auto -b nrf9160dk/nrf9160/ns samples\basic\minimal
Flash firmware to the device
Most boards supported by Zephyr can by flashed using a simple command:
west flash