blob: 658dda456df6e30884ccbb237e7f65d1fc1b3ede [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>Porting Mynewt OS &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="up" title="OS User Guide" href="../../os_user_guide.html"/>
<link rel="next" title="BSP Porting" href="port_bsp.html"/>
<link rel="prev" title="Split Images" href="../../modules/split/split.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> /
<a href="../../os_user_guide.html">OS User Guide</a> /
Porting Mynewt OS
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-core/edit/master/docs/os/core_os/porting/port_os.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" >
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" selected="selected" >
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"><a class="reference internal" href="../../../concepts.html">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 current"><a class="reference internal" href="../../os_user_guide.html">OS User Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../mynewt_os.html">Kernel</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/system_modules.html">System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/hal/hal.html">Hardware Abstraction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/bootloader/bootloader.html">Secure Bootloader</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/split/split.html">Split Images</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Porting Guide</a><ul>
<li class="toctree-l3"><a class="reference internal" href="port_bsp.html">BSP Porting</a></li>
<li class="toctree-l3"><a class="reference internal" href="port_mcu.html">Porting Mynewt to a new MCU</a></li>
<li class="toctree-l3"><a class="reference internal" href="port_cpu.html">Porting Mynewt to a new CPU Architecture</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/baselibc.html">Baselibc</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/drivers/driver.html">Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/devmgmt/newtmgr.html">Device Management with Newt Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/mcumgr/mcumgr.html">Device Management with MCUmgr</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/imgmgr/imgmgr.html">Image Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/sysinitconfig/sysinitconfig.html">Compile-Time Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/fs/fs.html">File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/fcb/fcb.html">Flash Circular Buffer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/sensor_framework/sensor_framework.html">Sensor Framework</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/testutil/testutil.html">Test Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/json/json.html">JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../modules/mfg/mfg.html">Manufacturing support</a></li>
</ul>
</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.6.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="porting-mynewt-os">
<h1>Porting Mynewt OS<a class="headerlink" href="#porting-mynewt-os" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
</div>
<p>This chapter describes how to adapt the Mynewt OS to different
platforms.</p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#description" id="id1">Description</a></p></li>
<li><p><a class="reference internal" href="#board-support-package-bsp-dependency" id="id2">Board Support Package (BSP) Dependency</a></p></li>
<li><p><a class="reference internal" href="#mcu-dependency" id="id3">MCU Dependency</a></p></li>
<li><p><a class="reference internal" href="#mcu-hal" id="id4">MCU HAL</a></p></li>
<li><p><a class="reference internal" href="#cpu-core-dependency" id="id5">CPU Core Dependency</a></p></li>
</ul>
</div>
<div class="section" id="description">
<h2><a class="toc-backref" href="#id1">Description</a><a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<p>The Mynewt OS is a complete multi-tasking environment with scheduler,
time control, buffer management, and synchronization objects. it also
includes libraries and services like console, command shell, image
manager, bootloader, and file systems etc.</p>
<p>Thee majority of this software is platform independent and requires no
intervention to run on your platform, but some of the components require
support from the underlying platform.</p>
<p>The platform dependency of these components can fall into several
categories:</p>
<ul class="simple">
<li><p><strong>CPU Core Dependencies</strong> – Specific code or configuration to
operate the CPU core within your target platform</p></li>
<li><p><strong>MCU Dependencies</strong> – Specific code or configuration to operate the
MCU or SoC within your target platform</p></li>
<li><p><strong>BSP Dependencies</strong> – Specific code or configuration to accommodate
the specific layout and functionality of your target platform</p></li>
</ul>
</div>
<div class="section" id="board-support-package-bsp-dependency">
<h2><a class="toc-backref" href="#id2">Board Support Package (BSP) Dependency</a><a class="headerlink" href="#board-support-package-bsp-dependency" title="Permalink to this headline"></a></h2>
<p>With all of the functionality provided by the core, MCU, and MCU HAL
(Hardware Abstraction Layer), there are still some things that must be
specified for your particular system. This is provided in Mynewt to
allow you the flexibility to design for the exact functionality,
peripherals and features that you require in your product.</p>
<p>In Mynewt, these settings/components are included in a Board Support
Package (BSP). The BSP contains the information specific to running
Mynewt on a target platform or hardware board. Mynewt supports some
common open source hardware as well as the development boards for some
common MCUs. These development systems might be enough for you to get
your prototype up and running, but when building a product you are
likely going to have your own board which is slightly different from
those already supported by Mynewt.</p>
<p>For example, you might decide on your system that 16 Kilobytes of flash
space in one flash device is reserved for a flash file system. Or on
your system you may decide that GPIO pin 5 of the MCU is connected to
the system LED. Or you may decide that the OS Tick (the underlying time
source for the OS) should run slower than the defaults to conserve
battery power. These types of behaviors are specified in the BSP.</p>
<p>The information provided in the BSP (what you need to specify to get a
complete executable) can vary depending on the MCU and its underlying
core architecture. For example, some MCUs have dedicated pins for UART,
SPI etc, so there is no configuration required in the BSP when using
these peripherals. However some MCUs have a pin multiplexor that allows
the UART to be mapped to several different pins. For these MCUs, the BSP
must specify if and where the UART pins should appear to match the
hardware layout of your system.</p>
<ul class="simple">
<li><p>If your BSP is already supported by Mynewt, there is no additional
BSP work involved in porting to your platform. You need only to set
the <code class="docutils literal notranslate"><span class="pre">bsp</span></code> attribute in your Mynewt target using the <a class="reference internal" href="../../../newt/index.html"><span class="doc">newt command
tool</span></a>.</p></li>
<li><p>If your BSP is not yet supported by Mynewt, you can add support
following the instructions on <a class="reference internal" href="port_bsp.html"><span class="doc">BSP Porting</span></a>.</p></li>
</ul>
</div>
<div class="section" id="mcu-dependency">
<h2><a class="toc-backref" href="#id3">MCU Dependency</a><a class="headerlink" href="#mcu-dependency" title="Permalink to this headline"></a></h2>
<p>Some OS code depends on the MCU or SoC that the system contains. For
example, the MCU may specify the potential memory map of the system -
where code and data can reside.</p>
<ul class="simple">
<li><p>If your MCU is already supported by Mynewt, there is no additional
MCU work involved in porting to your platform. You need only to set
the <code class="docutils literal notranslate"><span class="pre">arch</span></code> attribute in your Mynewt target using the <a class="reference internal" href="../../../newt/index.html"><span class="doc">newt command
tool</span></a>.</p></li>
<li><p>If your MCU is not yet supported by Mynewt, you can add support
following the instructions in <a class="reference internal" href="port_mcu.html"><span class="doc">Porting Mynewt to a new MCU</span></a>.</p></li>
</ul>
</div>
<div class="section" id="mcu-hal">
<h2><a class="toc-backref" href="#id4">MCU HAL</a><a class="headerlink" href="#mcu-hal" title="Permalink to this headline"></a></h2>
<p>Mynewt’s architecture supports a hardware abstraction layer (HAL) for
common on or off-chip MCU peripherals such as GPIO, UARTs, flash memory
etc. Even if your MCU is supported for the core OS, you may find that
you need to implement the HAL functionality for a new peripheral. For a
description of the HAL abstraction and implementation information, see
the <a class="reference internal" href="../../modules/hal/hal.html"><span class="doc">HAL API</span></a></p>
</div>
<div class="section" id="cpu-core-dependency">
<h2><a class="toc-backref" href="#id5">CPU Core Dependency</a><a class="headerlink" href="#cpu-core-dependency" title="Permalink to this headline"></a></h2>
<p>Some OS code depends on the CPU core that your system is using. For
example, a given CPU core has a specific assembly language instruction
set, and may require special cross compiler or compiler settings to use
the appropriate instruction set.</p>
<ul class="simple">
<li><p>If your CPU architecture is already supported by Mynewt, there is no
CPU core work involved in porting to your platform. You need only to
set the <code class="docutils literal notranslate"><span class="pre">arch</span></code> and <code class="docutils literal notranslate"><span class="pre">compiler</span></code> attributes in your Mynewt target
using the <a class="reference internal" href="../../../newt/index.html"><span class="doc">newt command tool</span></a>.</p></li>
<li><p>If your CPU architecture is not supported by Mynewt, you can add
support following the instructions on <a class="reference internal" href="port_cpu.html"><span class="doc">Porting Mynewt to a new CPU Architecture</span></a>.</p></li>
</ul>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="port_bsp.html" class="btn btn-neutral float-right" title="BSP Porting" accesskey="n">Next: BSP Porting <span class="fa fa-arrow-circle-right"></span></a>
<a href="../../modules/split/split.html" class="btn btn-neutral" title="Split Images" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Split Images</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>