This is the documentation for the latest (main) development branch of Zephyr. If you are looking for the documentation of previous releases, use the drop-down menu on the left and select the desired version.

AutoPTS on Linux


This tutorial shows how to setup AutoPTS client on Linux with AutoPTS server running on Windows 10 virtual machine. Tested with Ubuntu 20.4 and Linux Mint 20.4.

Supported methods to test zephyr bluetooth host:

  • Testing Zephyr Host Stack on QEMU

  • Testing Zephyr Host Stack on native posix

  • Testing Zephyr combined (controller + host) build on Real hardware (such as nRF52)

For running with QEMU or native posix, please visit:

Setup Linux

Setup Zephyr project

Do the setup from Zephyr site, especially:

Update OS

This guide covers Ubuntu version 18.04 LTS and later.

sudo apt update
sudo apt upgrade

Install dependencies

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-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev

Get Zephyr and install Python dependencies

Install west, and make sure ~/.local/bin is on your PATH environment variable:

pip3 install --user -U west
echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
source ~/.bashrc

Get the Zephyr source code:

west init ~/zephyrproject
cd ~/zephyrproject
west update

Export a Zephyr CMake package. This allows CMake to automatically load boilerplate code required for building Zephyr applications:

west zephyr-export

Zephyr’s scripts/requirements.txt file declares additional Python dependencies. Install them with pip3:

pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt

Install a Toolchain

A toolchain provides a compiler, assembler, linker, and other programs required to build Zephyr applications.

Download the latest SDK installer from and run the installer, installing the SDK in ~/zephyr-sdk-<your_version>, e.g.:

chmod +x zephyr-sdk-<your_version>
./zephyr-sdk-<your_version> -- -d ~/zephyr-sdk-<your_version>

Install udev rules, which allow you to flash most Zephyr boards as a regular user:

sudo cp ~/zephyr-sdk-<your_version>/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload

Install nrftools (only required in the actual hardware test mode)

Download latest nrftools (version >= 10.12.1) from site


After you extract archive, you will see 2 .deb files, e.g.:

  • JLink_Linux_V688a_x86_64.deb

  • nRF-Command-Line-Tools_10_12_1_Linux-amd64.deb

and To install the tools, double click on each .deb file or fallow instructions from

Setup Windows 10 virtual machine

Choose and install your hypervisor like VMWare Workstation(preferred) or VirtualBox. On VirtualBox could be some issues, if your host has fewer than 6 CPU.

Create Windows virtual machine instance. Make sure it has at least 2 cores and installed guest extensions.

Setup tested with VirtualBox 6.1.18 and VMWare Workstation 16.1.1 Pro.

Update Windows

Update Windows in:

Start -> Settings -> Update & Security -> Windows Update

Setup static IP

WMWare Works

On Linux, open Virtual Network Editor app and create network:


Open virtual machine network settings. Add custom adapter:


If you type ‘ifconfig’ in terminal, you should be able to find your host IP:



Go to:

File -> Host Network Manager

and create network:


Open virtual machine network settings. On adapter 1 you will have created by default NAT. Add adapter 2:



Setup static IP on Windows virtual machine. Go to

Settings -> Network & Internet -> Ethernet -> Unidentified network -> Edit

and set:


Install Python 3

Download and install latest Python 3 on Windows. Let the installer add the Python installation directory to the PATH and disable the path length limitation.

../../../_images/install_python1.png ../../../_images/install_python2.png

Install Git

Download and install Git. During installation enable option: Enable experimental support for pseudo consoles. We will use Git Bash as Windows terminal.


Install PTS 8

On Windows virtual machine, install latest PTS from Remember to install drivers from installation directory “C:/Program Files (x86)/Bluetooth SIG/Bluetooth PTS/PTS Driver/win64/CSRBlueCoreUSB.inf”



Starting with PTS 8.0.1 the Bluetooth Protocol Viewer is no longer included. So to capture Bluetooth events, you have to download it separately.

Connect PTS dongle

With VirtualBox there should be no problem. Just find dongle in Devices -> USB and connect.

With VMWare you might need to use some trick, if you cannot find dongle in VM -> Removable Devices. Type in Linux terminal:


and find in output your PTS Bluetooth USB dongle


Note Vendor and ProdID number. Close VMWare Workstation and open .vmx of your virtual machine (path similar to /home/codecoup/vmware/Windows 10/Windows 10.vmx) in text editor. Write anywhere in the file following line:

usb.autoConnect.device0 = "0x0a12:0x0001"

just replace 0x0a12 with Vendor number and 0x0001 with ProdID number you found earlier.

Connect devices (only required in the actual hardware test mode)

../../../_images/devices_1.png ../../../_images/devices_2.png

Flash board (only required in the actual hardware test mode)

On Linux, go to ~/zephyrproject. There should be already ~/zephyrproject/build directory. Flash board:

west flash

Setup auto-pts project

AutoPTS client on Linux

Clone auto-pts project:

git clone

Install socat, that is used to transfer BTP data stream from UART’s tty file:

sudo apt-get install python-setuptools socat

Install required python modules:

cd auto-pts
pip3 install --user wheel
pip3 install --user -r autoptsclient_requirements.txt

Autopts server on Windows virtual machine

In Git Bash, clone auto-pts project repo:

git clone

Install required python modules:

cd auto-pts
pip3 install --user wheel
pip3 install --user -r autoptsserver_requirements.txt

Restart virtual machine.

Running AutoPTS

Server and client by default will run on localhost address. Run server:

python ./

Testing Zephyr Host Stack on QEMU:

# A Bluetooth controller needs to be mounted.
# For running with HCI UART, please visit:

python ./ "C:\Users\USER_NAME\Documents\Profile Tuning Suite\PTS_PROJECT\PTS_PROJECT.pqw6" \
    ~/zephyrproject/build/zephyr/zephyr.elf -i SERVER_IP -l LOCAL_IP

Testing Zephyr Host Stack on native posix:

# A Bluetooth controller needs to be mounted.
# For running with HCI UART, please visit:

west build -b native_posix zephyr/tests/bluetooth/tester/ -DOVERLAY_CONFIG=overlay-native.conf

sudo python ./ "C:\Users\USER_NAME\Documents\Profile Tuning Suite\PTS_PROJECT\PTS_PROJECT.pqw6" \
    ~/zephyrproject/build/zephyr/zephyr.exe -i SERVER_IP -l LOCAL_IP --hci 0

Testing Zephyr combined (controller + host) build on nRF52:


If the error “ImportError: No module named pywintypes” appeared after the fresh setup, uninstall and install the pywin32 module:

pip install --upgrade --force-reinstall pywin32

Run client:

python ./ zephyr-master ~/zephyrproject/build/zephyr/zephyr.elf -t /dev/ACM0 \
    -b nrf52 -l -i

At the first run, when Windows asks, enable connection through firewall:



  • “After running one test, I need to restart my Windows virtual machine to run another, because of fail verdict from APICOM in PTS logs.”

It means your virtual machine has not enough processor cores or memory. Try to add more in settings. Note that a host with 4 CPUs could be not enough with VirtualBox as hypervisor. In this case, choose rather VMWare Workstation.

  • “I cannot start I always got error:”


One or more of the fallowing steps should help:

  • Close all PTS Windows.

  • Replug PTS bluetooth dongle.

  • Delete temporary workspace. You will find it in auto-pts-code/workspaces/zephyr/zephyr-master/ as temp_zephyr-master. Be careful, do not remove the original one zephyr-master.pqw6.

  • Restart Windows virtual machine.