blob: 17aa2adbe2e3573d191300238055d11420a6e14a [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.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>FAQ &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="Guides" href="../guides/index.html" />
<link rel="prev" title="Events" href="../reference/os/events.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"><a class="reference internal" href="../quickstart/index.html">Getting Started</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="../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 current"><a class="current reference internal" href="#">FAQ</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#nsh-tricks">NSH Tricks</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#how-to-get-an-application-available-in-the-nsh">How to get an application available in the NSH?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-increase-the-command-line-length">How to increase the command line length?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-do-i-enable-editing-support-on-the-command-line">How do I enable editing support on the command line?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-enable-command-line-history">How to enable command line history?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-enable-autocomplete-on-the-command-line">How to enable autocomplete on the command line?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-interrupt-an-nsh-application-using-ctrl-c">How to interrupt an NSH Application using Ctrl^C ?</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#board-initialization">Board Initialization</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#how-to-start-directly-my-application-instead-starting-nsh">How to start directly my application instead starting NSH?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#why-after-putting-my-application-on-entrypoint-it-stops-to-work">Why after putting my application on ENTRYPOINT it stops to work?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#why-isn-t-dev-ttysx-created-when-using-usb-console-even-when-uart-is-enabled">Why isn’t /dev/ttySx created when using USB Console even when UART is enabled?</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#network">Network</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#how-to-detect-ethernet-cable-connection-disconnection">How to detect Ethernet cable connection/disconnection?</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-define-the-mtu-and-mss-for-the-network-packets">How to define the MTU and MSS for the network packets?</a></li>
</ul>
</li>
</ul>
</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 active">FAQ</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/faq/index.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="admonition-todo admonition" id="id1">
<p class="admonition-title">Todo</p>
<p>Create new subsections as needed.</p>
</div>
<section id="faq">
<h1>FAQ<a class="headerlink" href="#faq" title="Permalink to this heading"></a></h1>
<section id="nsh-tricks">
<h2>NSH Tricks<a class="headerlink" href="#nsh-tricks" title="Permalink to this heading"></a></h2>
<section id="how-to-get-an-application-available-in-the-nsh">
<h3>How to get an application available in the NSH?<a class="headerlink" href="#how-to-get-an-application-available-in-the-nsh" title="Permalink to this heading"></a></h3>
<p>You will need at least three things enabled inside NuttX menuconfig
to be able to see an application this displayed there:
BUILTIN, NSH_BUILTIN_APPS and the application itself.
Enabling BUILTIN:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Library Routines ---&gt;
[*] Support Builtin Applications
</pre></div>
</div>
<p>Enabling NSH_BUILTIN_APPS:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
NSH Library ---&gt;
[*] Enable built-in applications
</pre></div>
</div>
<p>Enabling Hello World Application:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
Examples ---&gt;
[*] &quot;Hello, World!&quot; example
</pre></div>
</div>
<p>After compilation you should see the hello at NSH:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>NuttShell<span class="w"> </span><span class="o">(</span>NSH<span class="o">)</span><span class="w"> </span>NuttX-12.5.1
nsh&gt;<span class="w"> </span>?
<span class="nb">help</span><span class="w"> </span>usage:<span class="w"> </span><span class="nb">help</span><span class="w"> </span><span class="o">[</span>-v<span class="o">]</span><span class="w"> </span><span class="o">[</span>&lt;cmd&gt;<span class="o">]</span>
<span class="w"> </span>.<span class="w"> </span>cp<span class="w"> </span><span class="nb">exit</span><span class="w"> </span>mkdir<span class="w"> </span><span class="nb">set</span><span class="w"> </span><span class="nb">unset</span>
<span class="w"> </span><span class="o">[</span><span class="w"> </span>cmp<span class="w"> </span>expr<span class="w"> </span>mkrd<span class="w"> </span>sleep<span class="w"> </span>uptime
<span class="w"> </span>?<span class="w"> </span>dirname<span class="w"> </span><span class="nb">false</span><span class="w"> </span>mount<span class="w"> </span><span class="nb">source</span><span class="w"> </span>usleep
<span class="w"> </span><span class="nb">alias</span><span class="w"> </span>dd<span class="w"> </span>fdinfo<span class="w"> </span>mv<span class="w"> </span><span class="nb">test</span><span class="w"> </span>xd
<span class="w"> </span><span class="nb">unalias</span><span class="w"> </span>df<span class="w"> </span>free<span class="w"> </span>pidof<span class="w"> </span><span class="nb">time</span>
<span class="w"> </span>basename<span class="w"> </span>dmesg<span class="w"> </span><span class="nb">help</span><span class="w"> </span><span class="nb">printf</span><span class="w"> </span><span class="nb">true</span>
<span class="w"> </span><span class="k">break</span><span class="w"> </span><span class="nb">echo</span><span class="w"> </span>hexdump<span class="w"> </span><span class="nb">pwd</span><span class="w"> </span>truncate
<span class="w"> </span>cat<span class="w"> </span>env<span class="w"> </span><span class="nb">kill</span><span class="w"> </span>rm<span class="w"> </span>uname
<span class="w"> </span><span class="nb">cd</span><span class="w"> </span><span class="nb">exec</span><span class="w"> </span>ls<span class="w"> </span>rmdir<span class="w"> </span>umount
Builtin<span class="w"> </span>Apps:
<span class="w"> </span>hello<span class="w"> </span>nsh<span class="w"> </span>sh
nsh&gt;
</pre></div>
</div>
<p>Note: if you want to see the applications physically at /bin you can
enable BINFS:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>File Systems ---&gt;
[*] BINFS File System
</pre></div>
</div>
</section>
<section id="how-to-increase-the-command-line-length">
<h3>How to increase the command line length?<a class="headerlink" href="#how-to-increase-the-command-line-length" title="Permalink to this heading"></a></h3>
<p>You can increase the Max command line length from 64 to other value,
this way:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
NSH Library ---&gt;
Command Line Configuration ---&gt;
(64) Max command line length
</pre></div>
</div>
</section>
<section id="how-do-i-enable-editing-support-on-the-command-line">
<h3>How do I enable editing support on the command line?<a class="headerlink" href="#how-do-i-enable-editing-support-on-the-command-line" title="Permalink to this heading"></a></h3>
<p>You need to change Command Line Editor from “Minimal readline” to
“Command Line Editor”, this way:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
NSH Library ---&gt;
Command Line Configuration ---&gt;
Command Line Editor (Command Line Editor) ---&gt;
</pre></div>
</div>
</section>
<section id="how-to-enable-command-line-history">
<h3>How to enable command line history?<a class="headerlink" href="#how-to-enable-command-line-history" title="Permalink to this heading"></a></h3>
<p>You need to enable these options in the menuconfig:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
System Libraries and NSH Add-Ons ---&gt;
-*- readline() Support ---&gt;
[*] Command line history
(80) Command line history length
(16) Command line history records
</pre></div>
</div>
<p>Note: If you are using the “Command Line Editor” instead of the “readline”
then you need to use this other option:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
System Libraries and NSH Add-Ons ---&gt;
-*- EMACS-like Command Line Editor ---&gt;
[*] Command line history
(80) Command line history length
(16) Command line history records
</pre></div>
</div>
</section>
<section id="how-to-enable-autocomplete-on-the-command-line">
<h3>How to enable autocomplete on the command line?<a class="headerlink" href="#how-to-enable-autocomplete-on-the-command-line" title="Permalink to this heading"></a></h3>
<p>You need to enable these options in the menuconfig:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
System Libraries and NSH Add-Ons ---&gt;
-*- readline() Support ---&gt;
[*] Tab completion
(64) Maximum built-in matches
(64) Maximum external command matches
</pre></div>
</div>
<p>Note: autocomplete is not enabled when “Command Line Editor” instead of the
“readline”.</p>
</section>
<section id="how-to-interrupt-an-nsh-application-using-ctrl-c">
<h3>How to interrupt an NSH Application using Ctrl^C ?<a class="headerlink" href="#how-to-interrupt-an-nsh-application-using-ctrl-c" title="Permalink to this heading"></a></h3>
<p>You need to enable these options in the menuconfig:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>RTOS Features ---&gt;
Signal Configuration ---&gt;
[*] Default signal actions ---&gt;
[*] SIGINT and SIGKILL
Device Drivers ---&gt;
Serial Driver Support ---&gt;
[*] Serial TERMIOS support
[*] Support SIGINT
(0x03) Serial parse SIGINT characters
</pre></div>
</div>
</section>
</section>
<section id="board-initialization">
<h2>Board Initialization<a class="headerlink" href="#board-initialization" title="Permalink to this heading"></a></h2>
<section id="how-to-start-directly-my-application-instead-starting-nsh">
<h3>How to start directly my application instead starting NSH?<a class="headerlink" href="#how-to-start-directly-my-application-instead-starting-nsh" title="Permalink to this heading"></a></h3>
<p>You can start you application directly instead of starting the default
NSH terminal. Lets support your application is called “hello”, then you
will modify the ENTRYPOINT to call “hello_main” instead of “nsh_main”:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>RTOS Features ---&gt;
Tasks and Scheduling ---&gt;
(hello_main) Application entry point
</pre></div>
</div>
</section>
<section id="why-after-putting-my-application-on-entrypoint-it-stops-to-work">
<h3>Why after putting my application on ENTRYPOINT it stops to work?<a class="headerlink" href="#why-after-putting-my-application-on-entrypoint-it-stops-to-work" title="Permalink to this heading"></a></h3>
<p>When you replace the ENTRYPOINT from “nsh_main” to your application some
initialization flow are changed, for instance the NSH_ARCHINIT is not
executed anymore and so some drivers initialization that are called from
it also stops to work.</p>
<p>You can fix it enabling the Board Late Initialization that will replace the
NSH_ARCHINIT to call those drivers initialization. Just enable it:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>RTOS Features ---&gt;
RTOS hooks ---&gt;
[*] Custom board late initialization
</pre></div>
</div>
<p>Also you need to disable the architecture-specific initialization:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Application Configuration ---&gt;
NSH Library ---&gt;
[ ] Have architecture-specific initialization
</pre></div>
</div>
</section>
<section id="why-isn-t-dev-ttysx-created-when-using-usb-console-even-when-uart-is-enabled">
<h3>Why isn’t /dev/ttySx created when using USB Console even when UART is enabled?<a class="headerlink" href="#why-isn-t-dev-ttysx-created-when-using-usb-console-even-when-uart-is-enabled" title="Permalink to this heading"></a></h3>
<p>If you don’t use serial console then /dev/ttyS0 will not be created,
even if you enable the UART peripheral at “System Type”.</p>
<p>You can fix it enabling the Serial Upper-Half Driver:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Device Drivers ---&gt;
Serial Driver Support ---&gt;
[*] Enable standard &quot;upper-half&quot; serial driver
</pre></div>
</div>
</section>
</section>
<section id="network">
<h2>Network<a class="headerlink" href="#network" title="Permalink to this heading"></a></h2>
<section id="how-to-detect-ethernet-cable-connection-disconnection">
<h3>How to detect Ethernet cable connection/disconnection?<a class="headerlink" href="#how-to-detect-ethernet-cable-connection-disconnection" title="Permalink to this heading"></a></h3>
<p>NuttX supports Ethernet connection/disconnection events from Ethernet PHY
using signals (see <code class="docutils literal notranslate"><span class="pre">nuttx/drivers/net/phy_notify.c</span></code>).
The network monitor thread at apps/netutils/netinit (see
<code class="docutils literal notranslate"><span class="pre">CONFIG_NETINIT_MONITOR</span></code>) will handle taking the network down if the cable
is unplugged and bringing it back up when the cable is restored.
It is important to note that your Ethernet controller driver of your
MCU needs to support CONFIG_ARCH_PHY_INTERRUPT (and implement
<code class="docutils literal notranslate"><span class="pre">arch_phy_irq()</span></code>).</p>
</section>
<section id="how-to-define-the-mtu-and-mss-for-the-network-packets">
<h3>How to define the MTU and MSS for the network packets?<a class="headerlink" href="#how-to-define-the-mtu-and-mss-for-the-network-packets" title="Permalink to this heading"></a></h3>
<p>As you probably know the “MSS = MTU - 40”, so you just need to setup the MTU.
If you search for MTU in the menuconfig you will not find it, but you can
setup the MTU using the <code class="docutils literal notranslate"><span class="pre">CONFIG_NET_ETH_PKTSIZE</span></code> here:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Networking Support ---&gt;
Driver buffer configuration ---&gt;
(590) Ethernet packet buffer size
</pre></div>
</div>
<p>Then just figure it out using this formula:</p>
<blockquote>
<div><p>MTU = NET_ETH_PKTSIZE - 14</p>
<p>MSS = MTU - 40</p>
</div></blockquote>
<p>In this case you have MTU = 590 - 14 =&gt; MTU = 576!</p>
<p>And the MSS = 576 - 40 =&gt; MSS = 536.</p>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../reference/os/events.html" class="btn btn-neutral float-left" title="Events" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../guides/index.html" class="btn btn-neutral float-right" title="Guides" 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>