<!--
 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="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Configuring &mdash; NuttX latest documentation</title>
  

  
  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../_static/sphinx_tabs/semantic-ui-2.4.1/segment.min.css" type="text/css" />
  <link rel="stylesheet" href="../_static/sphinx_tabs/semantic-ui-2.4.1/menu.min.css" type="text/css" />
  <link rel="stylesheet" href="../_static/sphinx_tabs/semantic-ui-2.4.1/tab.min.css" type="text/css" />
  <link rel="stylesheet" href="../_static/sphinx_tabs/tabs.css" type="text/css" />
  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />

  
  
    <link rel="shortcut icon" href="../_static/favicon.ico"/>
  
  
  

  
  <!--[if lt IE 9]>
    <script src="../_static/js/html5shiv.min.js"></script>
  <![endif]-->
  
    
      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
        <script src="../_static/jquery.js"></script>
        <script src="../_static/underscore.js"></script>
        <script src="../_static/doctools.js"></script>
        <script src="../_static/language_data.js"></script>
    
    <script type="text/javascript" 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
  

  
    
    <img src="../_static/NuttX.png" class="logo" alt="Logo"/>
  
  </a>
  
  <!-- this version selector is quite ugly, should be probably replaced by something
       more modern -->
       
  <div class="version-selector">
    <select>
    
      <option value="latest" selected="selected">latest</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" />
    <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="main navigation">
          
            
            
              
            
            
              <p class="caption"><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"><a class="reference internal" href="../introduction/inviolables.html">The Inviolable Principles of NuttX</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="quickstart.html">Quickstart</a></li>
<li class="toctree-l2"><a class="reference internal" href="install.html">Installing</a></li>
<li class="toctree-l2"><a class="reference internal" href="compiling.html">Compiling</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></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>
<li class="toctree-l2"><a class="reference internal" href="build_and_make.html">Build and Make Details</a></li>
</ul>
</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="../boards/index.html">Supported Boards</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="../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releases/index.html">Releases</a></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="../glossary.html">Glossary</a></li>
</ul>

            
          
        </div>
        
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" aria-label="top navigation">
        
          <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="breadcrumbs navigation">

  <ul class="wy-breadcrumbs">
    
      <li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
        
          <li><a href="index.html">Getting Started</a> &raquo;</li>
        
      <li>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">
            
  <div class="section" id="configuring">
<span id="id1"></span><h1>Configuring<a class="headerlink" href="#configuring" title="Permalink to this headline">¶</a></h1>
<p>Apache NuttX is a very configurable operating system. 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. It also makes configuring the system complex at times.</p>
<p>There is a configuration system that can be used on the commandline or in a GUI. I’ve found
the easiest way to configured Apache NuttX is to use the <code class="docutils literal notranslate"><span class="pre">menuconfig</span></code> system. This is used
via a terminal program and allows quick access to all of Apache NuttX’s features via a system of
menus.</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> adapted for use with Apache
NuttX. Here’s info on Linux’s kconfig <a class="reference external" href="https://en.wikipedia.org/wiki/Menuconfig">menuconfig</a> system.</p>
<p>After you’ve configured your board (see <a class="reference internal" href="compiling.html#compiling"><span class="std std-ref">Compiling</span></a>), you can use the menuconfig system
to change the configuration. Once you’ve configured, you can compile to make a build that
has your configuration options selected.</p>
<ol class="arabic">
<li><p>Initialize Board Configuration</p>
<p>Here we’ll use the simulator since that’s the simplest to explain. You can do this with
any board and base configuration.  Note here you should be supplying <cite>configure.sh</cite> the correct flag
for your build environment:</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-l selects the Linux <span class="o">(</span>l<span class="o">)</span> host environment.
-m selects the macOS <span class="o">(</span>m<span class="o">)</span> host environment.
-c selects the Windows host and Cygwin <span class="o">(</span>c<span class="o">)</span> environment.
-g selects the Windows host and MinGW/MSYS environment.
-n selects the Windows host and Windows native <span class="o">(</span>n<span class="o">)</span> environment.
</pre></div>
</div>
</div></blockquote>
<p>Select the simulator configuration for a Linux host:</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ <span class="nb">cd</span> nuttx
$ make distclean  <span class="c1"># make a clean start, clearing out old configurations</span>
$ ./tools/configure.sh -l sim:nsh
  Copy files
  Select <span class="nv">CONFIG_HOST_LINUX</span><span class="o">=</span>y
  Refreshing...
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Make</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make clean<span class="p">;</span> make
$ ./nuttx
login:
</pre></div>
</div>
</div></blockquote>
<p>From another terminal window, kill the simulator:</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ pkill nuttx
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Menu Configuration</p>
<p>Showing that <code class="docutils literal notranslate"><span class="pre">login:</span></code> is annyoing. Let’s use the <code class="docutils literal notranslate"><span class="pre">menuconfig</span></code> system to turn it off.</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make 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>
</li>
<li><p>Application Configuration</p>
<p>The NSH Login setting is under <code class="docutils literal notranslate"><span class="pre">Application</span> <span class="pre">Configuration</span> <span class="pre">&gt;</span> <span class="pre">NSH</span> <span class="pre">Library</span></code>. Use
the up and down arrows to navigate to <code class="docutils literal notranslate"><span class="pre">Application</span> <span class="pre">Configuration</span></code>; hit <code class="docutils literal notranslate"><span class="pre">&lt;return&gt;</span></code> to
select it. Now you’re in the <code class="docutils literal notranslate"><span class="pre">Application</span> <span class="pre">Configuration</span></code> menu. Use the arrows to go
down to <code class="docutils literal notranslate"><span class="pre">NSH</span> <span class="pre">Library</span></code> and select that. Now navigate down to <code class="docutils literal notranslate"><span class="pre">Console</span> <span class="pre">Login</span></code> and use
the spacebar to uncheck that setting (so that it has a blank space instead of a star in it).</p>
<p>Now let’s save. Use the right and left arrow keys to select the <code class="docutils literal notranslate"><span class="pre">Exit</span></code> menu item at the
bottom of the screen. Hit <code class="docutils literal notranslate"><span class="pre">&lt;return&gt;</span></code> to select it, hit <code class="docutils literal notranslate"><span class="pre">&lt;return&gt;</span></code> again, and again, finally
hitting <code class="docutils literal notranslate"><span class="pre">&lt;return&gt;</span></code> in the <code class="docutils literal notranslate"><span class="pre">Save</span> <span class="pre">Configuration</span></code> dialog box.</p>
</li>
<li><p>Make the New Configuration</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make clean<span class="p">;</span> make
</pre></div>
</div>
</div></blockquote>
</li>
<li><p>Run</p>
<blockquote>
<div><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ ./nuttx
NuttShell <span class="o">(</span>NSH<span class="o">)</span> NuttX-8.2
MOTD: <span class="nv">username</span><span class="o">=</span>admin <span class="nv">password</span><span class="o">=</span>Administrator
</pre></div>
</div>
</div></blockquote>
<p>Success!</p>
<p>If you find that message of the day (MOTD) annoying and want to turn that off, it’s
configured in <code class="docutils literal notranslate"><span class="pre">Application</span> <span class="pre">Configuration</span> <span class="pre">&gt;</span> <span class="pre">NSH</span> <span class="pre">Library</span> <span class="pre">&gt;&gt;</span> <span class="pre">Message</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">Day</span> <span class="pre">(MOTD)</span></code>.</p>
</li>
</ol>
<hr class="docutils" />
<p>Next up is <a class="reference internal" href="debugging.html#debugging"><span class="std std-ref">Debugging</span></a>.</p>
</div>


           </div>
           
          </div>
          <footer>
  

  <hr/>

  <div role="contentinfo">
    <p>
        
        &copy; Copyright 2020, The Apache Software Foundation

    </p>
  </div> 

</footer>

        </div>
      </div>

    </section>

  </div>
  

  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>

  
  
    
   

</body>
</html>