blob: d5f77bc434d5856e0fa9de15f9d9be2f4752f74d [file] [log] [blame]
Project Blinky on a Windows Machine
-----------------------------------
Getting your Windows machine ready for simulated target
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The ``newt`` tool is the build software used to build Mynewt OS images
or executables for any embedded hardware device/board, including the one
for the current tutorial (STM32-E407 development board from Olimex). You
can run the ``newt`` tool natively on a computer running any of the
three Operating System machines - OSX, Linux, or Windows.
However, Mynewt OS images for a simulated target are built on the
Windows machine by using Linux versions of the build software (newt)in a
virtual machine on your Windows box. The Linux VM is set up by
installing the Docker Toolbox. Your Windows machine will communicate
with the Linux VM via transient ssh connections. You will then download
a Docker image (``newtvm.exe``)that allows you to run the newt commands
in the Linux Docker instance. The Docker image contains:
- The newt command-line tool
- Go
- A multilib-capable native gcc / glibc
- An arm-none-eabi gcc
- Native gdb
The sequence of events when using the Docker image is as follows:
1. A new docker environment is created in the Linux VM.
2. The specified command with the newtvm prefix (``newtvm newt``
command) is sent to the docker environment via ssh.
3. The Linux command runs.
4. The output from the command is sent back to Windows via ssh.
5. The output is displayed in the Windows command prompt.
Install Linux virtual machine
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Download the Docker Toolbox for Windows (version 1.9.0c or later)
from https://www.docker.com/docker-toolbox. The Docker toolbox
creates a consistently reproducible and self-contained environment in
Linux.
- Run the Docker Toolbox installer. All the default settings are OK.
- You may need to add
"C::raw-latex:`\Program `Files:raw-latex:`\Git`:raw-latex:`\usr`:raw-latex:`\bin`"
to your PATH environment variable. To add to the PATH environment
variable, right-click on the Start button in the bottom left corner.
Choose System -> Advanced system settings -> Environment Variables.
Click on the PATH variable under "System variables" and click Edit to
check and add it if it is not already there.
Install newtvm tool
^^^^^^^^^^^^^^^^^^^
- From your base user (home) directory, pull or clone the latest code
from the newt repository into the ``newt`` directory. It includes the
executable ``newtvm.exe`` for the newtvm tool in the ``newtvm``
directory.
.. code:: c
C:\Users\admin> git clone https://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt newt
The newtvm tool is what allows you to run programs in the Linux
docker instance.
- Run the Docker Quickstart Terminal application inside the Docker
folder under Programs. You can find it by clicking Start button ->
All apps. By default, the Docker Toolbox installer creates a shortcut
to this program on your desktop. Wait until you see an ASCII art
whale displayed in the terminal window and the Docker prompt given.
.. code:: c
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
admin@dev1 MINGW64 ~ (master)
$
The first time you run this, it may take several minutes to complete.
You will need to run the Docker Quickstart Terminal once each time you
restart your computer.
- Open a command prompt (e.g., Windows-R, "cmd", enter). You execute
the newt tool commands as though you were running newt in Linux, but
you prefix each command with "newtvm". For example:
.. code:: c
C:\Users\admin\newt\newtvm> newtvm newt help
The newtvm tool will take a long time to run the first time you execute
it. The delay is due to the fact that the tool must download the mynewt
docker instance.
- You are now ready to proceed to `building the image for the simulated
target <#building-test-code-on-simulator>`__.
Getting your Windows machine ready for hardware target
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When you want to produce images for actual hardware board on your
Windows machine, go through the following setup procedure and then
proceed to the `blinky project on the Olimex
board <#Using-SRAM-to-make-LED-blink>`__ with this method.
Installing some prerequisites
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- You have to install the following if you do not have them already.
The steps below indicate specific folders where each of these
programs should be installed. You can choose different locations, but
the remainder of this tutorial for a Windows machine assumes the
specified folders.
- win-builds-i686
- win-builds-x86\_64
- MSYS
- gcc for ARM
- openocd
- zadig
- git
- go
- *win-builds (mingw64) 1.5 for i686*
Download from
http://win-builds.org/doku.php/download_and_installation_from_windows.
Install at: "C::raw-latex:`\win`-builds-i686".
Be sure to click the i686 option (not x86\_64). The defaults for
all other options are OK. The installer will want to download a
bunch of additional packages. They are not all necessary, but it
is simplest to just accept the defaults.
- *win-builds (mingw64) 1.5 for x86\_64*
Download from
http://win-builds.org/doku.php/download_and_installation_from_windows.
Install at "C::raw-latex:`\win`-builds-x86\_64"
Run the installer a second time, but this time click the x86\_64
option, NOT i686. The defaults for all other options are OK.
- *MSYS*
Start your download from
http://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/MSYS%20%2832-bit%29/MSYS-20111123.zip
Unzip to "C::raw-latex:`\msys`"
- *gcc for ARM, 4.9.3*
Download the Windows installer from
https://launchpad.net/gcc-arm-embedded/+download and install at
"C::raw-latex:`\Program `Files (x86):raw-latex:`\GNU `Tools ARM
Embedded:raw-latex:`\4`.9 2015q3".
- OpenOCD 0.8.0
Download OpenOCD 0.8.0 from
http://www.freddiechopin.info/en/download/category/4-openocd.
Unzip to "C::raw-latex:`\openocd`".
- Zadig 2.1.2
Download it from http://zadig.akeo.ie and install it at
"C::raw-latex:`\zadig`".
- Git
Click on https://git-scm.com/download/win to start the download.
Install at "C::raw-latex:`\Program `Files (x86):raw-latex:`\Git`".
Specify the "Use Git from the Windows Command Prompt" option. The
defaults for all other options are OK.
- Go
Download the release for Microsoft Windows from
https://golang.org/dl/ and install it "C::raw-latex:`\Go`".
Creating local repository
^^^^^^^^^^^^^^^^^^^^^^^^^
- The directory structure must be first readied for using Go. Go code
must be kept inside a workspace. A workspace is a directory hierarchy
with three directories at its root:
- src contains Go source files organized into packages (one package
per directory),
- pkg contains package objects, and
- bin contains executable commands.
The GOPATH environment variable specifies the location of your
workspace. First create a 'dev' directory and then a 'go' directory
under it. Set the GOPATH environment variable to this directory and
then proceed to create the directory for cloning the newt tool
repository.
.. code:: c
$ cd c:\
$ mkdir dev\go
$ cd dev\go
- Set the following user environment variables using the steps outlined
here.
.. code:: c
* GOPATH: C:\dev\go
* PATH: C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q3\bin;%GOPATH%\bin;C:\win-builds-x86_64\bin;C:\win-builds-i686\bin;C:\msys\bin
Steps:
1. Right-click the start button
2. Click "Control panel"
3. Click "System and Security"
4. Click "System"
5. Click "Advanced system settings" in the left panel
6. Click the "Envoronment Variables..." button
7. There will be two sets of environment variables: user variables in
the upper half of the screen, and system variables in the lower half.
Configuring the user variables is recommended and tested (though
system variables will work as well).
- Next, install godep. Note that the following command produces no
output.
.. code:: c
$ go get github.com/tools/godep
- Set up the repository for the package building tool "newt" on your
local machine. First create the appropriate directory for it and then
clone the newt tool repository from the online apache repository (or
its github.com mirror) into this newly created directory. Check the
contents of the directory.
.. code:: c
$ go get git-wip-us.apache.org/repos/asf/incubator-mynewt-newt.git/newt
$ dir
bin pkg src
$ dir src
git-wip-us.apache.org github.com gopkg.in
$ dir
newt
$ cd newt
$ dir
Godeps README.md coding_style.txt newt.go
LICENSE cli design.txt
- Check that newt is in place.
.. code:: c
$ dir $GOPATH\src\git-wip-us.apache.org\repos\asf\incubator-mynewt-newt.git\newt
Godeps README.md coding_style.txt newt.go
LICENSE cli design.txt
Building the newt tool
^^^^^^^^^^^^^^^^^^^^^^
- You will use Go to run the newt.go program to build the newt tool.
The command used is ``go install`` which compiles and writes the
resulting executable to an output file named ``newt``. It installs
the results along with its dependencies in $GOPATH/bin.
.. code:: c
$ go install
$ ls "$GOPATH"/bin/
godep incubator-mynewt-newt.git newt
- Try running newt using the compiled binary. For example, check for
the version number by typing 'newt version'. See all the possible
commands available to a user of newt by typing 'newt -h'.
Note: If you are going to be be modifying the newt tool itself often and
wish to compile the program every time you call it, you may want to
define the newt environment variable that allows you to execute the
command via ``%newt%``. Use
``set newt=go run %GOPATH%\src\github.com\mynewt\newt\newt.go`` or set
it from the GUI. Here, you use ``go run`` which runs the compiled binary
directly without producing an executable.
.. code:: c
$ newt version
Newt version: 1.0
$ newt -h
Newt allows you to create your own embedded project based on the Mynewt
operating system. Newt provides both build and package management in a
single tool, which allows you to compose an embedded workspace, and set
of projects, and then build the necessary artifacts from those projects.
For more information on the Mynewt operating system, please visit
https://www.github.com/mynewt/documentation.
Please use the newt help command, and specify the name of the command
you want help for, for help on how to use a specific command
Usage:
newt [flags]
newt [command]
Examples:
newt
newt help [<command-name>]
For help on <command-name>. If not specified, print this message.
Available Commands:
version Display the Newt version number.
target Set and view target information
egg Commands to list and inspect eggs on a nest
nest Commands to manage nests & clutches (remote egg repositories)
help Help about any command
Flags:
-h, --help=false: help for newt
-l, --loglevel="WARN": Log level, defaults to WARN.
-q, --quiet=false: Be quiet; only display error output.
-s, --silent=false: Be silent; don't output anything.
-v, --verbose=false: Enable verbose output when executing commands.
Use "newt help [command]" for more information about a command.
- Without creating a project repository you can't do a whole lot with
the Newt tool. So you'll have to wait till you have downloaded a nest
to try out the tool.
Getting the debugger ready
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Use Zadig to configure the USB driver for your Olimex debugger. If
your debugger is already set up, you can skip this step.
1. Plug in your Olimex debugger.
2. Start Zadig.
3. Check the Options -> List All Devices checkbox.
4. Select "Olimex OpenOCD JTAG ARM-USB-TINY-H" in the dropdown menu.
5. Select the "WinUSB" driver.
6. Click the "Install Driver" button.
- Proceed to the section on how to `make an LED
blink <#using-sram-to-make-led-blink>`__ section.