How to build OpenSK


This section demonstrates how to set up your development environment, build the OpenSK and prepare a working OpenSK firmware.

For a more detailed guide, please refer to Google's installation guide.

Clone OpenSK repository

Clone the OpenSK repository with the nRF52840 MDK USB Dongle supported:

git clone

Install Rust

OpenSK needs Rust installed on your system. For the moment the official way to install Rust is using Rustup.

Run the following in your terminal, then follow the onscreen instructions.

curl --proto '=https' --tlsv1.2 -sSf | sh

Setup OpenSK

Run the following script in the OpenSK repository for initial setup :


Build the Tock OS

Run the following script to compile the Tock OS:

board=nrf52840_mdk_usb_dongle ./ os

The Tock OS firmware is located in third_party/tock/boards/nordic/nrf52840_mdk_usb_dongle/target/thumbv7em-none-eabi/release/ with the .hex-format.

Build OpenSK application

Run the following script to compile the OpenSK application:

board=nrf52840_mdk_usb_dongle ./ app

The app firmware contains padding.bin and cortex-m4.tbf which is located in target/tab/.

Prepare OpenSK firmware

A working OpenSK firmware contains three parts: tock-os.hex, padding.bin and cortex-m4.tbf. IntelHex can be used to convert and merge the firmware.

To convert .bin to .hex file:

python --offset=0x30000 padding.bin padding.hex

python --offset=0x40000 cortex-m4.tbf cortex-m4.hex

To merge the .hex files:

python -o opensk_all_in_one.hex tock-os.hex padding.hex cortex-m4.hex

To create a UF2 image for UF2 Bootloader from a .hex file:

python -c -f 0xada52840 -o opensk_all_in_one.uf2 opensk_all_in_one.hex


The conversion script is located in nrf52840-mdk-usb-dongle/tools.

Flash OpenSK via UF2 Bootloader

Enter DFU mode by holding the dongle's RESET/USR button and connecting to your PC. A flash drive with the name MDK-DONGLE will appear.

Copy opensk_all_in_one.uf2 image to MDK-DONGLE.

When programming is completed, the OpenSK will run automatically. The device named OpenSK will detected by the computer.



Content on this page is licensed under the Creative Commons Attribution 3.0 License.

Create an Issue

Interested in contributing to this project? Want to report a bug? Feel free to click here: