blob: f840dd3f4141d4f145903c057f5aa063b810816d [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- This is broken by doc revisioning.
-->
<link rel="shortcut icon" href="../../../img/favicon.ico">
<title>Install Cross Tools for ARM - Apache Mynewt</title>
<link href="../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../../css/highlight.css">
<link href="../../../css/base.css" rel="stylesheet">
<link href="../../../css/custom.css" rel="stylesheet">
<link href="../../../css/v2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="Install Cross Tools for ARM">
<div class="container">
<div class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
</div>
</div>
</div>
</div>
<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li
class=""
>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li
class="important"
>
<a href="/quick-start/">Quick Start</a>
</li>
<li
class=""
>
<a href="/about/">About</a>
</li>
<li
class=""
>
<a href="/talks/">Talks</a>
</li>
<li
class="active"
>
<a href="/documentation/">Documentation</a>
</li>
<li
class=""
>
<a href="/download/">Download</a>
</li>
<li
class=""
>
<a href="/community/">Community</a>
</li>
<li
class=""
>
<a href="/events/">Events</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
<div class="top">
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search documentation" />
</div>
</form>
</div>
</div>
<ul class="toc-nav">
<li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest">
Version: master
</option>
<option value="/v1_12_0/" >
Version: 1.12.0
</option>
<option value="/v1_11_0/" >
Version: 1.11.0
</option>
<option value="/v1_10_0/" >
Version: 1.10.0
</option>
<option value="/v1_9_0/" >
Version: 1.9.0
</option>
<option value="/v1_8_0/" >
Version: 1.8.0
</option>
<option value="/v1_7_0/" >
Version: 1.7.0
</option>
<option value="/v1_6_0/" >
Version: 1.6.0
</option>
<option value="/v1_5_0/" >
Version: 1.5.0
</option>
<option value="/v1_4_0/" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" selected="selected" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select></li>
<li ><a href="../../introduction/">Mynewt Documentation</a>
<ul>
<li ><a href="../get_started/">Basic Setup</a>
<ul>
<li ><a href="../native_install_intro/">Native Install Option</a>
<ul>
<li >
<a href="../../../newt/install/newt_mac/">Install Newt on Mac</a>
</li>
<li >
<a href="../../../newt/install/newt_linux/">Install Newt on Linux</a>
</li>
<li >
<a href="../../../newt/install/newt_windows/">Install Newt on Windows</a>
</li>
<li >
<a href="../native_tools/">Install Native Toolchain</a>
</li>
<li class="active">
<a href="./">Install Cross Tools for ARM</a>
</li>
</ul>
</li>
<li >
<a href="../docker/">Docker Container Option</a>
</li>
<li >
<a href="../project_create/">Create Your First Project</a>
</li>
<li >
<a href="../serial_access/">Serial Port Setup</a>
</li>
</ul>
</li>
<li >
<a href="../vocabulary/">Concepts</a>
</li>
<li ><a href="../../tutorials/tutorials/">Tutorials</a>
</li>
<li ><a href="../../os_user_guide/">OS User Guide</a>
</li>
<li><a href="
../../../network/ble/ble_intro/
">BLE User Guide</a>
</li>
<li ><a href="../../../newt/newt_intro/">Newt Tool Guide</a>
</li>
<li ><a href="../../../newtmgr/overview/">Newt Manager Guide</a>
</li>
<li >
<a href="../../../known_issues/">Known Issues</a>
</li>
</ul>
</li>
<li><a href="
../../../newt/install/prev_releases/
">Appendix</a>
</li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<div class="doc-header">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/documentation/">Docs</a></li>
<li>&raquo; <a href="os/get_started/native_install_intro/">Native Install Option</a></li>
<li>&raquo; <a href="os/get_started/get_started/">Basic Setup</a></li>
<li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
<li>&raquo; Install Cross Tools for ARM</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/mynewt-site/blob/master/docs/os/get_started/cross_tools.md"
class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 1.3.0 is not the most recent version of the Apache Mynewt
documentation. Click <a href="/latest">here</a> to read the latest
version.
</p>
</div>
<h1 id="installing-the-cross-tools-for-arm">Installing the Cross Tools for ARM</h1>
<p>This page shows you how to install the tools to build, run, and debug Mynewt OS applications that run on supported ARM target boards. It shows you how to install the following tools on macOS, Linux and Windows:</p>
<ul>
<li>ARM cross toolchain to compile and build Mynewt applications for the target boards.</li>
<li>Debuggers to load and debug applications on the target boards.</li>
</ul>
<p><br></p>
<h2 id="installing-the-arm-cross-toolchain">Installing the ARM Cross Toolchain</h2>
<p>ARM maintains a pre-built GNU toolchain with gcc and gdb targeted at Embedded ARM Processors, namely Cortex-R/Cortex-M processor families. Mynewt OS has been tested with version 7.2 of the toolchain and we recommend you install 7.0 or later to get started. Mynewt OS will eventually work with multiple versions available, including the latest releases. </p>
<h3 id="installing-the-arm-toolchain-for-mac-os-x">Installing the ARM Toolchain For Mac OS X</h3>
<p>Add the <strong>PX4/homebrew-px4</strong> homebrew tap and install version 7.2 of the toolchain. After installing, check that the symbolic link that homebrew created points to the correct version of the debugger.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ brew tap PX4/homebrew-px4
$ brew update
$ brew install gcc-arm-none-eabi-74
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ls -al /usr/local/bin/arm-none-eabi-gcc
lrwxr-xr-x 1 ccollins admin 58 Jul 5 18:12 /usr/local/bin/arm-none-eabi-gcc -&gt; ../Cellar/gcc-arm-none-eabi/20171218/bin/arm-none-eabi-gcc
</code></pre></div>
<p><strong>Note:</strong> If no version is specified, brew will install the latest version available. </p>
<p><br></p>
<h3 id="installing-the-arm-toolchain-for-linux">Installing the ARM Toolchain For Linux</h3>
<p>On a Debian-based Linux distribution, gcc 7 for ARM can be installed with
apt-get as documented below. The steps are explained in depth at
<a href="https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa">https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa</a>.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
$ sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
$ sudo apt-get update
$ sudo apt-get install gcc-arm-embedded
</code></pre></div>
<p><br></p>
<h3 id="installing-the-arm-toolchain-for-windows">Installing the ARM Toolchain for Windows</h3>
<p>Step 1: Download and run the <a href="https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-win32-sha2.exe?revision=bc72768f-9927-454e-9141-918927fb74ff?product=GNU%20Arm%20Embedded%20Toolchain,32-bit,,Windows,7-2018-q2-update">installer</a> to install arm-none-eabi-gcc and arm-none-eabi-gdb. Select the default destination folder: <strong>C:\Program Files (x86)\GNU Tools Arm Embedded\7 2018-q2-update</strong>.</p>
<p><strong>Notes:</strong> </p>
<ul>
<li>Check the <code>Add path to environment variable</code> option before you click the <code>Finish</code> button for the installation. </li>
<li>You may select a different folder but the installation instructions use the default values.</li>
</ul>
<p>Step 2: Check that you are using the installed versions arm-none-eabi-gcc and arm-none-eabi-gdb. Open a MinGW terminal and run the <code>which</code> commands. </p>
<p><strong>Note:</strong> You must start a new MinGW terminal to inherit the new <strong>Path</strong> values.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ which arm-none-eabi-gcc
/c/Program Files (x86)/GNU Tools Arm Embedded/7 2018-q2-update/bin/arm-none-eabi-gcc
$ which arm-none-eabi-gdb
/c/Program Files (x86)/GNU Tools Arm Embedded/7 2018-q2-update/bin/arm-none-eabi-gdb
</code></pre></div>
<h2 id="installing-the-debuggers">Installing the Debuggers</h2>
<p>Mynewt uses, depending on the board, either the OpenOCD or SEGGER J-Link debuggers.
<br></p>
<h3 id="installing-the-openocd-debugger">Installing the OpenOCD Debugger</h3>
<p>OpenOCD (Open On-Chip Debugger) is open-source software that allows your
computer to interface with the JTAG debug connector on a variety of boards. A
JTAG connection lets you debug and test embedded target devices. For more on
OpenOCD go to <a href="http://openocd.org">http://openocd.org</a>.</p>
<p>OpenOCD version 0.10.0 with nrf52 support is required. A binary for this version is available to download for Mac OS, Linux, and Windows.</p>
<p><br></p>
<h4 id="installing-openocd-on-mac-os">Installing OpenOCD on Mac OS</h4>
<p>Step 1: Download the <a href="https://github.com/runtimeco/openocd-binaries/raw/master/openocd-bin-0.10.0-MacOS.tgz">binary tarball for Mac OS</a>.</p>
<p>Step 2: Change to the root directory: </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$cd /
</code></pre></div>
<p><br>
Step 3: Untar the tarball and install into ** /usr/local/bin**. You will need to replace ** ~/Downloads ** with the directory that the tarball is downloaded to. </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>sudo tar -xf ~/Downloads/openocd-bin-0.10.0-MacOS.tgz
</code></pre></div>
<p><br>
Step 4: Check the OpenOCD version you are using. </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$which openocd
/usr/local/bin/openocd
$openocd -v
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
</code></pre></div>
<p>You should see version: <strong>0.10.0</strong>. </p>
<p>If you see one of these errors:</p>
<ul>
<li>Library not loaded: /usr/local/lib/libusb-0.1.4.dylib - Run <code>brew install libusb-compat</code>.</li>
<li>Library not loaded: /usr/local/opt/libftdi/lib/libftdi1.2.dylib - Run <code>brew install libftdi</code>.</li>
<li>Library not loaded: /usr/local/lib/libhidapi.0.dylib - Run <code>brew install hidapi</code>.</li>
</ul>
<p><br></p>
<h4 id="installing-openocd-on-linux">Installing OpenOCD on Linux</h4>
<p>Step 1: Download the <a href="https://github.com/runtimeco/openocd-binaries/raw/master/openocd-bin-0.10.0-Linux.tgz">binary tarball for Linux</a></p>
<p>Step 2: Change to the root directory: </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$cd /
</code></pre></div>
<p><br>
Step 3: Untar the tarball and install into ** /usr/local/bin**. You will need to replace ** ~/Downloads ** with the directory that the tarball is downloaded to. </p>
<p>** Note:** You must specify the -p option for the tar command.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$sudo tar -xpf ~/Downloads/openocd-bin-0.10.0-Linux.tgz
</code></pre></div>
<p><br>
Step 4: Check the OpenOCD version you are using: </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$which openocd
/usr/local/bin/openocd
$openocd -v
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
</code></pre></div>
<p>You should see version: <strong>0.10.0</strong>. </p>
<p>If you see any of these error messages:</p>
<ul>
<li>
<p>openocd: error while loading shared libraries: libhidapi-hidraw.so.0: cannot open shared object file: No such file or directory</p>
</li>
<li>
<p>openocd: error while loading shared libraries: libusb-1.0.so.0: cannot open shared object file: No such file or directory </p>
</li>
</ul>
<p>run the following command to install the libraries: </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$sudo apt-get install libhidapi-dev:i386
</code></pre></div>
<p><br></p>
<h4 id="installing-openocd-on-windows">Installing OpenOCD on Windows</h4>
<p>Step 1: Download the <a href="https://github.com/runtimeco/openocd-binaries/raw/master/openocd-0.10.0.zip">binary zip file for Windows</a>.</p>
<p>Step 2: Extract into the <strong>C:\openocd-0.10.0</strong> folder. </p>
<p>Step 3: Add the path: ** C:\openocd-0.10.0\bin<strong> to your Windows User </strong>Path<strong> environment variable. Note: You must add </strong>bin** to the path.</p>
<p>Step 4: Check the OpenOCD version you are using. Open a new MinGW terminal and run the following commands: </p>
<p><strong>Note:</strong> You must start a new MinGW terminal to inherit the new <strong>Path</strong> values.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$which openocd
/c/openocd-0.10.0/bin/openocd
$openocd -v
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
</code></pre></div>
<p>You should see version: <strong>0.10.0</strong>. </p>
<p><br></p>
<h3 id="installing-segger-j-link">Installing SEGGER J-Link</h3>
<p>You can download and install Segger J-LINK Software and documentation pack from <a href="https://www.segger.com/jlink-software.html">SEGGER</a>. </p>
<p><strong>Note:</strong> On Windows, perform the following additonal steps:</p>
<ul>
<li>Make note of the destination folder of your installation.</li>
<li>Add the installation destination folder path to your Windows user <strong>Path</strong> environment variable. You do not need to add <strong>bin</strong> to the path.</li>
<li>Open a new MinGW terminal to inherit the new <strong>Path</strong> values.</li>
</ul>
<div class="row">
<ul class="nav nav-pills" style="margin-bottom: 10px">
<li>
</li>
<li class="pull-right">
</li>
</ul>
</div>
<footer class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<a href="https://www.apache.org/">
<img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2021 The Apache Software Foundation.<br>
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
project logo are either registered trademarks or trademarks of the Apache
Software Foundation in the United States and other countries.
</small>
</p>
<a href="">
<img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
<a href="https://www.apache.org/licenses/">
<button class="button-footer-asf">
License
</button>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html">
<button class="button-footer-asf">
Sponsorship
</button>
</a>
<a href="https://www.apache.org/foundation/thanks.html">
<button class="button-footer-asf">
Thanks
</button>
</a>
<a href="https://www.apache.org/security/">
<button class="button-footer-asf">
Security
</button>
</a>
<a href="https://apache.org/events/current-event">
<button class="button-footer-asf">
ASF Events
</button>
</a>
</footer>
</div>
</div>
</div>
<script src="../../../js/jquery-1.10.2.min.js"></script>
<script src="../../../js/bootstrap-3.0.3.min.js"></script>
<script src="../../../js/highlight.pack.js"></script>
<script src="../../../js/base.js"></script>
<script src="../../../js/custom.js"></script>
<script src="search/main.js"></script>
</body>
</html>