| Everything You Need in a Docker Container |
| ----------------------------------------- |
| |
| Docker provides a quick and easy way to get up and running with Mynewt. |
| The newt command line tool and the entire build toolchain is available |
| in a single docker container. The container is all that's needed to run |
| your Mynewt based application in the simulator. Enabling USB2 with your |
| docker installation will allow you to load your application on a |
| supported device. |
| |
| Docker is the only supported option if you are working on a Windows |
| machine. If you are using Mac OS X or Linux, you have the choice of |
| installing a Docker container of tools and toolchains or installing them |
| natively. This chapter describes how to set up the Docker image for all |
| three platforms. |
| |
| .. contents:: |
| :local: |
| :depth: 2 |
| |
| Install Docker |
| ~~~~~~~~~~~~~~ |
| |
| Install docker for your platform. `Mac OS |
| X <https://www.docker.com/products/docker-toolbox>`__ / |
| `Windows <https://www.docker.com/products/docker-toolbox>`__ / |
| `Linux <https://docs.docker.com/engine/installation/linux/>`__ |
| |
| Mac and Windows |
| ^^^^^^^^^^^^^^^ |
| |
| Mac and Windows require Docker Toolbox to interact with USB devices. |
| Docker for Mac and Docker for Windows do not support USB. Docker Toolbox |
| uses VirtualBox and allows you to map USB devices into docker containers |
| as described below. |
| |
| Make sure to double click the Docker Quickstart Terminal application if |
| you're on Mac or Windows. |
| |
| Linux |
| ^^^^^ |
| |
| The docker daemon listens on a Unix domain socket on Linux. That socket |
| is owned by root, which means by default you must be root to start a |
| container. Make sure to follow the optional step of adding yourself to |
| the docker group so you can start the newt container as yourself. |
| |
| Pull the Mynewt Container |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| .. code-block:: console |
| |
| $ docker pull mynewt/newt:latest |
| |
| **Note** You can upgrade your container by repeating this command when updates are made available. |
| |
| Use a ``newt`` wrapper script |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Use the newt wrapper script to invoke newt. Create the following file, |
| name it ``newt``, make it executable, and put it in your path. This will |
| allow you to run newt as if it was natively installed. You can now |
| follow the normal tutorials using the newt wrapper script. |
| |
| .. code-block:: sh |
| |
| #!/bin/bash |
| |
| if [ "$1" = "debug" ] || [ "$1" = "run" ] |
| then |
| ti="-ti" |
| fi |
| |
| docker run -e NEWT_USER=$(id -u) -e NEWT_GROUP=$(id -g) -e NEWT_HOST=$(uname) $ti --rm --device=/dev/bus/usb --privileged -v $(pwd):/workspace -w /workspace mynewt/newt:latest /newt "$@" |
| |
| **Note** Remember to point to the correct subdirectory level when |
| invoking ``newt``. For example, invoke it using ``../newt`` in the |
| example below. |
| |
| .. code:: console |
| |
| user@~/dockertest$ ls |
| myproj newt |
| user@~/dockertest$ cd myproj |
| user@~/dockertest/myproj$ ../newt version |
| Apache Newt version: 1.1.0 |
| |
| Enable USB2 Support for Mac or Windows |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| If you plan on loading your application on an actual device, do the |
| steps below. |
| |
| Install VirtualBox extension pack |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| Docker uses a VirtualBox Linux VM to run containers. A free VirtualBox |
| extension pack is required to enable USB2 support. Download the |
| `VirtualBox Extension |
| Pack <https://www.virtualbox.org/wiki/Downloads>`__ version that matches |
| your VirtualBox installation and double click to install |
| |
| Enable USB2 and select your device |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| - The "default" VM created by docker-machine must first be stopped |
| before you can enable USB2. You have two options: |
| |
| - Run the command ``docker-machine stop default`` in the terminal |
| window or |
| - Use the VirtualBox UI. Right click on ``default`` -> Close -> |
| Power Off |
| |
| - Enable USB2 using the VirtualBox UI. Select the "default" |
| VM->Settings->Ports->USB2 to enable USB2. Add your device to the USB |
| Device Filters to make the device visible in the docker container. |
| See the image below. |
| |
| - Restart the "default" VM. You have two options: |
| |
| - Run ``docker-machine start default`` in the terminal window or |
| - Use the VirtualBox UI. Make sure the "default" machine is |
| highlighted. Click the green "Start" button. Select "Headless Start". |
| |
| .. image:: pics/virtualbox_usb.jpg |
| |
| **Note**: When working with actual hardware, remember that each board |
| has an ID. If you swap boards and do not refresh the USB Device Filter |
| on the VirtualBox UI, the ID might be stale and the Docker instance may |
| not be able to see the board correctly. For example, you may see an |
| error message like ``Error: unable to find CMSIS-DAP device`` when you |
| try to load or run an image on the board. In that case, you need to |
| click on the USB link in VirtualBox UI, remove the existing USB Device |
| Filter (e.g. "Atmel Corp. EDBG CMSIS-DAP[0101]") by clicking on the |
| "Removes selected USB filter" button, and add a new filter by clicking |
| on the "Adds new USB filter" button. |