blob: 4b253dcaaba7eb18084637eafcd88dbbbf5a64c6 [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">
<title>Concepts &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="genindex.html"/>
<link rel="search" title="Search" href="search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="index.html"/>
<link rel="next" title="Tutorials" href="tutorials/tutorials.html"/>
<link rel="prev" title="Debugging Mynewt" href="get_started/debug.html"/>
<script src="_static/js/modernizr.min.js"></script>
<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="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="_static/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.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" 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>
<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>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
Concepts
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/concepts.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</option>
<option value="/v1_11_0" selected="selected" >
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" >
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>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorials/tutorials.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="external_links.html">Third-party Resources</a></li>
<li class="toctree-l1"><a class="reference internal" href="os/os_user_guide.html">OS User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.11.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>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="vocabulary">
<span id="concepts"></span><span id="id1"></span><h1>Concepts<a class="headerlink" href="#vocabulary" title="Permalink to this headline"></a></h1>
<p>This page is meant to introduce you to some of the concepts inherent to
the Apache Mynewt Operating System, and <em>Newt</em> the tool that stitches a
project built on Apache Mynewt together.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#project" id="id2">Project</a></p></li>
<li><p><a class="reference internal" href="#package" id="id3">Package</a></p></li>
<li><p><a class="reference internal" href="#target" id="id4">Target</a></p></li>
<li><p><a class="reference internal" href="#configuration" id="id5">Configuration</a></p></li>
</ul>
</div>
<div class="section" id="project">
<h2><a class="toc-backref" href="#id2">Project</a><a class="headerlink" href="#project" title="Permalink to this headline"></a></h2>
<p>The project is the base directory of your embedded software tree. It is
a workspace that contains a logical collection of source code, for one
or more of your applications. A project consists of the following items:</p>
<ul class="simple">
<li><p>Project Definition: defines project level dependencies, and
parameters (located in <code class="docutils literal notranslate"><span class="pre">project.yml</span></code>)</p></li>
<li><p>Packages</p></li>
</ul>
<p><a class="reference internal" href="#package">Package</a> are described in detail in the section below.</p>
<p>Here is an example project definition file from the default Apache
Mynewt project:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="c1"># project.yml</span>
<span class="c1"># &lt;snip&gt;</span>
<span class="nt">project.name</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;my_project&quot;</span>
<span class="nt">project.repositories</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apache-mynewt-core</span>
<span class="c1"># Use github&#39;s distribution mechanism for core ASF libraries.</span>
<span class="c1"># This provides mirroring automatically for us.</span>
<span class="c1">#</span>
<span class="nt">repository.apache-mynewt-core</span><span class="p">:</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">github</span>
<span class="w"> </span><span class="nt">vers</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1-latest</span>
<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apache</span>
<span class="w"> </span><span class="nt">repo</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mynewt-core</span>
</pre></div>
</div>
<p>A couple of things to note in the project definition:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">project.repositories</span></code>: Defines the remote repositories that this
project relies upon.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">repository.apache-mynewt-core</span></code>: Defines the repository information
for the <code class="docutils literal notranslate"><span class="pre">apache-mynewt-core</span></code> repository.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">vers=1-latest</span></code>: Defines the repository version. This string will
use the latest stable version in the ‘Master’ github branch. To use
the latest version in the master branch, just change it to
<code class="docutils literal notranslate"><span class="pre">vers=0-dev</span></code>. Note that this branch might not be stable.</p></li>
</ul>
<p>Repositories are versioned collections of packages.</p>
<p>Projects can rely on remote repositories for functionality, and the newt
tool will resolve those remote repositories, and download the correct
version into your local source tree. Newly fetched repositories are put
in the <code class="docutils literal notranslate"><span class="pre">repos</span></code> directory of your project, and can be referenced
throughout the system by using the <code class="docutils literal notranslate"><span class="pre">&#64;</span></code> specifier.</p>
<p>By default, the <code class="docutils literal notranslate"><span class="pre">&#64;apache-mynewt-core</span></code> repository is included in every
project. Apache Mynewt Core contains all the base functionality of the
Apache Mynewt Operating System, including the Real Time Kernel,
Bluetooth Networking Stack, Flash File System, Console, Shell and
Bootloader.</p>
<p><em>NOTE:</em> Any project can be converted into a repository by providing it
with a <code class="docutils literal notranslate"><span class="pre">repository.yml</span></code> file and putting it up onto Github. More
information about repositories can be found in the Newt documentation.</p>
</div>
<div class="section" id="package">
<h2><a class="toc-backref" href="#id3">Package</a><a class="headerlink" href="#package" title="Permalink to this headline"></a></h2>
<p>A package is a collection items that form a fundamental unit in the
Mynewt Operating System. Packages can be:</p>
<ul class="simple">
<li><p>Applications</p></li>
<li><p>Libraries</p></li>
<li><p>Compiler definitions</p></li>
<li><p>Targets</p></li>
</ul>
<p>A package is identified by having a <code class="docutils literal notranslate"><span class="pre">pkg.yml</span></code> file in it’s base
directory. Here is a sample <code class="docutils literal notranslate"><span class="pre">pkg.yml</span></code> file for the blinky applicaton:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="c1"># pkg.yml</span>
<span class="c1"># &lt;snip&gt;</span>
<span class="nt">pkg.name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">apps/blinky</span>
<span class="nt">pkg.type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">app</span>
<span class="nt">pkg.description</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Basic example application which blinks an LED.</span>
<span class="nt">pkg.author</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Apache</span><span class="nv"> </span><span class="s">Mynewt</span><span class="nv"> </span><span class="s">&lt;dev@mynewt.apache.org&gt;&quot;</span>
<span class="nt">pkg.homepage</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;http://mynewt.apache.org/&quot;</span>
<span class="nt">pkg.keywords</span><span class="p">:</span>
<span class="nt">pkg.deps</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;@apache-mynewt-core/libs/os&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;@apache-mynewt-core/hw/hal&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;@apache-mynewt-core/libs/console/full&quot;</span>
</pre></div>
</div>
<p>Packages have a few features worth noting:</p>
<ul class="simple">
<li><p>Dependencies: Packages can rely upon other packages, and when they do
they will inherit their functionality (header files, library
definitions, etc.)</p></li>
<li><p>APIs: Packages can export named APIs, and they can require that
certain APIs be present, in order to compile.</p></li>
</ul>
<p>Everything that newt knows about within a project’s directory is a
package. This makes it very clean and easy to write re-usable
components, which can describe their Dependencies and APIs to the rest
of the system.</p>
</div>
<div class="section" id="target">
<span id="mynewt-target"></span><h2><a class="toc-backref" href="#id4">Target</a><a class="headerlink" href="#target" title="Permalink to this headline"></a></h2>
<p>A target in Apache Mynewt is very similar to a target in <em>make</em>. It is
the collection of parameters that must be passed to Newt in order to
generate a reproducible build. A target represents the top of the build
tree, and any packages or parameters specified at the target level,
cascade down to all dependencies.</p>
<p>Targets are also packages, and are stored in the <code class="docutils literal notranslate"><span class="pre">targets/</span></code> directory
at the base of your project. Most targets consist of:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">app</span></code>: The application to build.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">bsp</span></code>: The board support package to combine with that application</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">build_profile</span></code>: Either <code class="docutils literal notranslate"><span class="pre">debug</span></code> or <code class="docutils literal notranslate"><span class="pre">optimized</span></code>.</p></li>
</ul>
<p>Targets can also have additional items specified, including:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">aflags</span></code>: Any additional assembler flags you might want to specify
to the build.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">cflags</span></code>: Any additional compiler flags you might want to specify
to the build.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">lflags</span></code>: Any additional linker flags you might want to specify to
the build.</p></li>
</ul>
<p>In order to create and manipulate targets, the <em>newt</em> tool offers a set
of helper commands, you can find more information about these by
issuing:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target
<span class="go">Usage:</span>
<span class="go"> newt target [flags]</span>
<span class="go"> newt target [command]</span>
<span class="go">Available Commands:</span>
<span class="go"> amend Add, change, or delete values for multi-value target variables</span>
<span class="go"> cmake</span>
<span class="go"> config View or populate a target&#39;s system configuration</span>
<span class="go"> copy Copy target</span>
<span class="go"> create Create a target</span>
<span class="go"> delete Delete target</span>
<span class="go"> dep View target&#39;s dependency graph</span>
<span class="go"> revdep View target&#39;s reverse-dependency graph</span>
<span class="go"> set Set target configuration variable</span>
<span class="go"> show View target configuration variables</span>
<span class="go">Global Flags:</span>
<span class="go"> -h, --help Help for newt commands</span>
<span class="go"> -j, --jobs int Number of concurrent build jobs (default 2)</span>
<span class="go"> -l, --loglevel string Log level (default &quot;WARN&quot;)</span>
<span class="go"> -o, --outfile string Filename to tee output to</span>
<span class="go"> -q, --quiet Be quiet; only display error output</span>
<span class="go"> -s, --silent Be silent; don&#39;t output anything</span>
<span class="go"> -v, --verbose Enable verbose output when executing commands</span>
<span class="go">Use &quot;newt target [command] --help&quot; for more information about a command.</span>
</pre></div>
</div>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#id5">Configuration</a><a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h2>
<p>Additional help topics:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>newt<span class="w"> </span>target<span class="w"> </span>config<span class="w"> </span>show<span class="w"> </span>&lt;target-name&gt;
<span class="go">...</span>
<span class="go">* PACKAGE: sys/stats</span>
<span class="go"> * Setting: STATS_CLI</span>
<span class="go"> * Description: Expose the &quot;stat&quot; shell command.</span>
<span class="go"> * Value: 0</span>
<span class="go"> * Setting: STATS_NAMES</span>
<span class="go"> * Description: Include and report the textual name of each statistic.</span>
<span class="go"> * Value: 0</span>
<span class="go"> * Setting: STATS_NEWTMGR</span>
<span class="go"> * Description: Expose the &quot;stat&quot; newtmgr command.</span>
<span class="go"> * Value: 0</span>
<span class="go">...</span>
<span class="gp">$</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="tutorials/tutorials.html" class="btn btn-neutral float-right" title="Tutorials" accesskey="n">Next: Tutorials <span class="fa fa-arrow-circle-right"></span></a>
<a href="get_started/debug.html" class="btn btn-neutral" title="Debugging Mynewt" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Debugging Mynewt</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div 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">
<img src="_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<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>
<a href="">
<img src="_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'./',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="_static/js/affix.js"></script>
<script type="text/javascript" src="_static/js/main.js"></script>
</body>
</html>