blob: d427cb51a6b6229a5fcadcdab84bd57d707aa496 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Configuring &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css" />
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Debugging" href="debugging.html" />
<link rel="prev" title="Running" href="running.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../latest" selected="selected">latest</option>
<option value="../../10.0.0" >10.0.0</option>
<option value="../../10.0.1" >10.0.1</option>
<option value="../../10.1.0" >10.1.0</option>
<option value="../../10.2.0" >10.2.0</option>
<option value="../../10.3.0" >10.3.0</option>
<option value="../../11.0.0" >11.0.0</option>
<option value="../../12.0.0" >12.0.0</option>
<option value="../../12.1.0" >12.1.0</option>
<option value="../../12.2.0" >12.2.0</option>
<option value="../../12.2.1" >12.2.1</option>
<option value="../../12.3.0" >12.3.0</option>
<option value="../../12.4.0" >12.4.0</option>
<option value="../../12.5.0" >12.5.0</option>
<option value="../../12.5.1" >12.5.1</option>
<option value="../../12.6.0" >12.6.0</option>
<option value="../../12.7.0" >12.7.0</option>
<option value="../../12.8.0" >12.8.0</option>
<option value="../../12.9.0" >12.9.0</option>
<option value="../../12.10.0" >12.10.0</option>
<option value="../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Getting Started</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="install.html">Installing</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiling_make.html">Compiling with Make</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiling_cmake.html">Compiling with CMake</a></li>
<li class="toctree-l2"><a class="reference internal" href="running.html">Running</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Configuring</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#fast-configuration-changes">Fast configuration changes</a></li>
<li class="toctree-l3"><a class="reference internal" href="#reference-configuration">Reference configuration</a></li>
<li class="toctree-l3"><a class="reference internal" href="#merge-configuration">Merge configuration</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="debugging.html">Debugging</a></li>
<li class="toctree-l2"><a class="reference internal" href="organization.html">Directory Structure</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../logos/index.html">NuttX Logos</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">Getting Started</a></li>
<li class="breadcrumb-item active">Configuring</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/quickstart/configuring.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="configuring">
<span id="id1"></span><h1>Configuring<a class="headerlink" href="#configuring" title="Permalink to this heading"></a></h1>
<p>Apache NuttX is a very configurable: nearly all features can be configured in or
out of the system. This makes it possible to compile a build tailored for your
hardware and application.</p>
<p>The Apache NuttX configuration system uses Linux’s
<a class="reference external" href="https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt">kconfig system</a> which
includes various frontends that allow you to modify configuration easily. Usually, the <code class="docutils literal notranslate"><span class="pre">menuconfig</span></code>
frontend is used, which is a console based menu system (more info <a class="reference external" href="https://en.wikipedia.org/wiki/Menuconfig">here</a>).</p>
<p>As previously explained in <a class="reference internal" href="compiling_make.html"><span class="doc">Compiling with Make</span></a>, the first step is to load a premade configuration for
your board. Then, you can modify this configuration to your liking. In this example, we will show
how you modify the default configuration of the <code class="docutils literal notranslate"><span class="pre">sim</span></code> build, a build of NuttX which runs on your own
computer.</p>
<ol class="arabic">
<li><p>Initialize Board Configuration</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx
<span class="gp">$ </span>./tools/configure.sh<span class="w"> </span>-l<span class="w"> </span>sim:nsh
<span class="go"> Copy files</span>
<span class="go"> Select CONFIG_HOST_LINUX=y</span>
<span class="go"> Refreshing...</span>
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Build &amp; run</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make<span class="w"> </span>clean<span class="p">;</span><span class="w"> </span>make
<span class="gp">$ </span>./nuttx
<span class="go">login: admin</span>
<span class="go">password: Administrator</span>
<span class="go">User Logged-in!</span>
<span class="go">nsh&gt;</span>
</pre></div>
</div>
</div></blockquote>
<p>From another terminal window, kill the simulator:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>pkill<span class="w"> </span>nuttx
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Modify configuration</p>
<p>In this case we will remove the login feature (which will boot straight to the prompt). To
do so, we use the <code class="docutils literal notranslate"><span class="pre">menuconfig</span></code> frontend.</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make<span class="w"> </span>menuconfig
</pre></div>
</div>
</div></blockquote>
<p>Here’s what you should see:</p>
<a class="reference internal image-reference" href="../_images/menuconfig.png"><img alt="Screenshot of menuconfig system main screen" class="align-center" src="../_images/menuconfig.png" style="width: 800px;" /></a>
<p><br/></p>
<p>The NSH Login setting is under <span class="menuselection">Application Configuration ‣ NSH Library</span>. You
can use <kbd class="kbd docutils literal notranslate">🢁</kbd> and <kbd class="kbd docutils literal notranslate">🢃</kbd> keys to navigate and <kbd class="kbd docutils literal notranslate"></kbd> to enter a submenu.
To disable the corresponding setting go to <span class="menuselection">Console Login</span> and press <kbd class="kbd docutils literal notranslate">spacebar</kbd> to
it (so that it has a blank space instead of a star in it).</p>
<p>Now you need to exit <code class="docutils literal notranslate"><span class="pre">menuconfig</span></code> and save the modified configuration. Use the <kbd class="kbd docutils literal notranslate">🡸</kbd> and
<kbd class="kbd docutils literal notranslate">🡺</kbd> arrow keys to navigate the lower menu. If you select <span class="menuselection">Exit</span> you will be
prompted to save the config.</p>
</li>
<li><p>Build with the new Configuration</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Run</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>./nuttx
<span class="go">NuttShell (NSH) NuttX-8.2</span>
<span class="go">MOTD: username=admin password=Administrator</span>
</pre></div>
</div>
</div></blockquote>
<p>Success!</p>
</li>
</ol>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>If you find that message of the day (MOTD) annoying and want to turn that off, it’s
configured in <span class="menuselection">Application Configuration ‣ NSH Library ‣ Message of the Day (MOTD)</span>.</p>
</div>
<section id="fast-configuration-changes">
<h2>Fast configuration changes<a class="headerlink" href="#fast-configuration-changes" title="Permalink to this heading"></a></h2>
<p>If you know exactly which configuration symbol you want to change, you can use the <code class="docutils literal notranslate"><span class="pre">kconfig-tweak</span></code> tool (comes with the <code class="docutils literal notranslate"><span class="pre">kconfig-frontends</span></code> package) to quickly change a setting without going into the configuration frontend. This is useful to change settings such as debug options:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_NET
<span class="gp">$ </span>make<span class="w"> </span>olddefconfig<span class="w"> </span><span class="c1"># needed to have the kconfig system check the config</span>
<span class="gp">$ </span>kconfig-tweak<span class="w"> </span>--enable<span class="w"> </span>CONFIG_DEBUG_NET
<span class="gp">$ </span>make<span class="w"> </span>olddefconfig
</pre></div>
</div>
<p>This is also useful to script configuration changes that you perform often:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_ALERT
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_FEATURES
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_ERROR
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_WARN
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_INFO
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_ASSERTIONS
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_NET
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_NET_ERROR
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_NET_WARN
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_NET_INFO
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_SYMBOLS
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_DEBUG_NOOPT
kconfig-tweak<span class="w"> </span>--disable<span class="w"> </span>CONFIG_SYSLOG_TIMESTAMP
make<span class="w"> </span>oldconfig
</pre></div>
</div>
</section>
<section id="reference-configuration">
<h2>Reference configuration<a class="headerlink" href="#reference-configuration" title="Permalink to this heading"></a></h2>
<p>Defconfig supports the use of <code class="docutils literal notranslate"><span class="pre">#include</span></code> statements to reference other configuration files:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>CONFIG_XXX1=y
CONFIG_XXX2=y
#include &quot;configs/system.config&quot;
#include &quot;configs/net.config&quot;
</pre></div>
</div>
<p>The default header file search path includes:</p>
<ul class="simple">
<li><p>Current directory;</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">${boards}/configs/common</span></code>;</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">${boards}/common/configs</span></code>;</p></li>
</ul>
</section>
<section id="merge-configuration">
<h2>Merge configuration<a class="headerlink" href="#merge-configuration" title="Permalink to this heading"></a></h2>
<p>Multiple config fragments can be merged manually using the tools/merge_config.py script.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx
<span class="gp">$ </span>./tools/merge_config.py<span class="w"> </span>-o<span class="w"> </span>defconfig<span class="w"> </span>.config1<span class="w"> </span>.config2
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="running.html" class="btn btn-neutral float-left" title="Running" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="debugging.html" class="btn btn-neutral float-right" title="Debugging" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>