blob: f4d3dcecbace021f4eedd3c8e2ad90e8c24afe97 [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>Syscall Layer &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="/tools Host Tools" href="tools/index.html" />
<link rel="prev" title="Shared Memory Support" href="mm/shm.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 current"><a class="reference internal" href="index.html">OS Components</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="binfmt.html">Binary Loader</a></li>
<li class="toctree-l2"><a class="reference internal" href="drivers/index.html">Device Drivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="nxflat.html">NXFLAT</a></li>
<li class="toctree-l2"><a class="reference internal" href="nxgraphics/index.html">NX Graphics Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="paging.html">On-Demand Paging</a></li>
<li class="toctree-l2"><a class="reference internal" href="audio/index.html">Audio Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="filesystem/index.html">NuttX File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="libs/index.html">NuttX libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="net/index.html">Network Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="mm/index.html">Memory Management</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Syscall Layer</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#header-files">Header Files</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#include-syscall-h"><code class="docutils literal notranslate"><span class="pre">include/syscall.h</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#include-sys-syscall-h"><code class="docutils literal notranslate"><span class="pre">include/sys/syscall.h</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#include-arch-syscall-h-or-arch-cpu-include-syscall-h"><code class="docutils literal notranslate"><span class="pre">include/arch/syscall.h</span></code> (or <code class="docutils literal notranslate"><span class="pre">arch/&lt;cpu&gt;/include/syscall.h</span></code>)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#syscall-database">Syscall Database</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#variadic-functions">Variadic Functions</a></li>
<li class="toctree-l3"><a class="reference internal" href="#auto-generated-files">Auto-Generated Files</a></li>
<li class="toctree-l3"><a class="reference internal" href="#sub-directories">Sub-Directories</a></li>
<li class="toctree-l3"><a class="reference internal" href="#mksyscall">mksyscall</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tools/index.html"><code class="docutils literal notranslate"><span class="pre">/tools</span></code> Host Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="arch/index.html">Architecture-Specific Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="boards.html">Boards Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="cmake.html">CMake Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="openamp.html">OpenAMP Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="video.html">Video Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="crypto.html">Crypto API Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="wireless.html">Wireless Subsystem</a></li>
</ul>
</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">OS Components</a></li>
<li class="breadcrumb-item active">Syscall Layer</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/components/syscall.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="syscall-layer">
<h1>Syscall Layer<a class="headerlink" href="#syscall-layer" title="Permalink to this heading"></a></h1>
<p>This page discusses supports a syscall layer from communication between a
monolithic, kernel-mode NuttX kernel and a separately built, user-mode
application set.</p>
<p>With most MCUs, NuttX is built as a flat, single executable image
containing the NuttX RTOS along with all application code. The RTOS code
and the application run in the same address space and at the same kernel-
mode privileges. In order to exploit security features of certain
processors, an alternative build model is also supported: NuttX can
be built separately as a monolithic, kernel-mode module and the applications
can be added as a separately built, user-mode module.</p>
<p>The syscall layer provided in this directory serves as the communication
layer from the user-mode application into the kernel-mode RTOS. The
switch from user-mode to kernel-mode is accomplished using software
interrupts (SWIs). SWIs are implemented differently and named differently
by different manufacturers but all work essentially the same: A special
instruction is executed in user-mode that causes a software generated
interrupt. The software generated interrupt is caught within the kernel
and handle in kernel-mode.</p>
<section id="header-files">
<h2>Header Files<a class="headerlink" href="#header-files" title="Permalink to this heading"></a></h2>
<section id="include-syscall-h">
<h3><code class="docutils literal notranslate"><span class="pre">include/syscall.h</span></code><a class="headerlink" href="#include-syscall-h" title="Permalink to this heading"></a></h3>
<p>This header file supports general access to SWI facilities. It is simply
a wrapper file that includes <code class="docutils literal notranslate"><span class="pre">include/sys/syscall.h</span></code> and
<code class="docutils literal notranslate"><span class="pre">include/arch/syscall.h</span></code>.</p>
</section>
<section id="include-sys-syscall-h">
<h3><code class="docutils literal notranslate"><span class="pre">include/sys/syscall.h</span></code><a class="headerlink" href="#include-sys-syscall-h" title="Permalink to this heading"></a></h3>
<p>The SWIs received by the kernel are distinguish by a code that identifies
how to process the SWI. This header file defines all such codes understood
by the NuttX kernel.</p>
</section>
<section id="include-arch-syscall-h-or-arch-cpu-include-syscall-h">
<h3><code class="docutils literal notranslate"><span class="pre">include/arch/syscall.h</span></code> (or <code class="docutils literal notranslate"><span class="pre">arch/&lt;cpu&gt;/include/syscall.h</span></code>)<a class="headerlink" href="#include-arch-syscall-h-or-arch-cpu-include-syscall-h" title="Permalink to this heading"></a></h3>
<p>This header file is provided by the platform-specific logic and declares
(or defines) the mechanism for providing software interrupts on this
platform. The following functions must be declared (or defined) in this
header file:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">SWI</span></code> with <code class="docutils literal notranslate"><span class="pre">SYS_</span></code> call number only:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uintptr_t</span><span class="w"> </span><span class="nf">sys_call0</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">nbr</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">SWI</span></code> with <code class="docutils literal notranslate"><span class="pre">SYS_</span></code> call number and one parameter:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uintptr_t</span><span class="w"> </span><span class="nf">sys_call1</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">nbr</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm1</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">SWI</span></code> with <code class="docutils literal notranslate"><span class="pre">SYS_</span></code> call number and two parameters:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uintptr_t</span><span class="w"> </span><span class="nf">sys_call2</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">nbr</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm1</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm2</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">SWI</span></code> with <code class="docutils literal notranslate"><span class="pre">SYS_</span></code> call number and three parameters:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uintptr_t</span><span class="w"> </span><span class="nf">sys_call3</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">nbr</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm1</span><span class="p">,</span>
<span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm2</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm3</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">SWI</span></code> with <code class="docutils literal notranslate"><span class="pre">SYS_</span></code> call number and four parameters:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uintptr_t</span><span class="w"> </span><span class="nf">sys_call4</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">nbr</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm1</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm2</span><span class="p">,</span>
<span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm3</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm4</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">SWI</span></code> with <code class="docutils literal notranslate"><span class="pre">SYS_</span></code> call number and five parameters:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uintptr_t</span><span class="w"> </span><span class="nf">sys_call5</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">nbr</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm1</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm2</span><span class="p">,</span>
<span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm3</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm4</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm5</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">SWI</span></code> with <code class="docutils literal notranslate"><span class="pre">SYS_</span></code> call number and six parameters:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">uintptr_t</span><span class="w"> </span><span class="nf">sys_call6</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">nbr</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm1</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm2</span><span class="p">,</span>
<span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm3</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm4</span><span class="p">,</span><span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm5</span><span class="p">,</span>
<span class="w"> </span><span class="kt">uintptr_t</span><span class="w"> </span><span class="n">parm6</span><span class="p">);</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="syscall-database">
<h3>Syscall Database<a class="headerlink" href="#syscall-database" title="Permalink to this heading"></a></h3>
<p>Sycall information is maintained in a database. That “database” is
implemented as a simple comma-separated-value file, <code class="docutils literal notranslate"><span class="pre">syscall.csv</span></code>. Most
spreadsheets programs will accept this format and can be used to maintain
the syscall database.</p>
<p>The format of the CSV file for each line is:</p>
<ul class="simple">
<li><p>Field 1: Function name</p></li>
<li><p>Field 2: The header file that contains the function prototype</p></li>
<li><p>Field 3: Condition for compilation</p></li>
<li><p>Field 4: The type of function return value.</p></li>
<li><p>Field 5 - N+5: The type of each of the N formal parameters of the function</p></li>
<li><p>Fields N+5 - : If the last parameter is “…”, then the following fields
provide the type and number of of possible optional parameters.
See note below about variadic functions</p></li>
</ul>
<p>Each type field has a format as follows:</p>
<ul>
<li><p>type name:</p>
<p>For all simpler types</p>
</li>
<li><p>formal type | actual type:</p>
<p>For array types where the form of the formal (eg. <code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">parm[2]</span></code>)
differs from the type of actual passed parameter (eg. <code class="docutils literal notranslate"><span class="pre">int*</span></code>).
This is necessary because you cannot do simple casts to array types.</p>
</li>
<li><p>formal type | union member actual type | union member fieldname:</p>
<p>A similar situation exists for unions. For example, the formal
parameter type union sigval – You cannot cast a uintptr_t to
a union sigval, but you can cast to the type of one of the union
member types when passing the actual parameter. Similarly, we
cannot cast a union sigval to a uinptr_t either. Rather, we need
to cast a specific union member fieldname to <code class="docutils literal notranslate"><span class="pre">uintptr_t</span></code>.</p>
</li>
</ul>
</section>
</section>
<section id="variadic-functions">
<h2>Variadic Functions<a class="headerlink" href="#variadic-functions" title="Permalink to this heading"></a></h2>
<p>General variadic functions which may have an arbitrary number of argument
or arbitrary types cannot be represented as system calls.
<code class="docutils literal notranslate"><span class="pre">syslog()</span></code> is a good example. Normally you would work around this by
using the non- variadic form of the OS interface that accepts a <code class="docutils literal notranslate"><span class="pre">va_list</span></code>
as an argument, <code class="docutils literal notranslate"><span class="pre">vsyslog()</span></code> in this case.</p>
<p>There are many functions that have a variadic form but take only
one or two optional arguments. There can be handled as system
calls, but only by treating them as though they had a fixed number of
arguments.</p>
<p>These are handled in <code class="docutils literal notranslate"><span class="pre">syscall.csv</span></code> by appending the number and type of
optional arguments. For example, consider the <code class="docutils literal notranslate"><span class="pre">open()</span></code> OS interface. Its
prototype is:</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">open</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">path</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">oflag</span><span class="p">,</span><span class="w"> </span><span class="p">...);</span>
</pre></div>
</div>
<p>In reality, open may take only a single optional argument of type <code class="docutils literal notranslate"><span class="pre">mode_t</span></code>
and is represented in <code class="docutils literal notranslate"><span class="pre">syscall.csv</span></code> like this:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>&quot;open&quot;,&quot;fcntl.h&quot;,&quot;&quot;,&quot;int&quot;,&quot;const char*&quot;,&quot;int&quot;,&quot;...&quot;,&quot;mode_t&quot;
</pre></div>
</div>
<p>The existence of the <code class="docutils literal notranslate"><span class="pre">mode_t</span></code> tells <code class="docutils literal notranslate"><span class="pre">tools/mksyscall</span></code> that there is at most
one optional parameter and, if present, it is of type <code class="docutils literal notranslate"><span class="pre">mode_t</span></code>.</p>
<p>NOTE: This CSV file is used not only to support the generate of trap information,
but also for the generation of symbol tables. See <code class="docutils literal notranslate"><span class="pre">Documentation/components/tools/</span></code>
and <code class="docutils literal notranslate"><span class="pre">Documentation/components/libs/</span></code> for further information.</p>
</section>
<section id="auto-generated-files">
<h2>Auto-Generated Files<a class="headerlink" href="#auto-generated-files" title="Permalink to this heading"></a></h2>
<p>Stubs and proxies for the sycalls are automatically generated from this CSV
database. Here the following definition is used:</p>
<ul class="simple">
<li><p>Proxy - A tiny bit of code that executes in the user space. A proxy
has exactly the same function prototype as does the “real” function
for which it proxies. However, it only serves to map the function
call into a syscall, marshaling all of the system call parameters
as necessary.</p></li>
<li><p>Stub - Another tiny bit of code that executes within the NuttX kernel
that is used to map a software interrupt received by the kernel to
a kernel function call. The stubs receive the marshaled system
call data, and perform the actually kernel function call (in
kernel-mode) on behalf of the proxy function.</p></li>
</ul>
</section>
<section id="sub-directories">
<h2>Sub-Directories<a class="headerlink" href="#sub-directories" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">stubs</span></code> - Autogenerated stub files are placed in this directory.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">proxies</span></code> - Autogenerated proxy files are placed in this directory.</p></li>
</ul>
</section>
<section id="mksyscall">
<h2>mksyscall<a class="headerlink" href="#mksyscall" title="Permalink to this heading"></a></h2>
<p>mksyscall is C program that is used during the initial NuttX build
by the logic in the top-level <code class="docutils literal notranslate"><span class="pre">syscall/</span></code> directory. Information about the
stubs and proxies is maintained in a comma separated value (CSV) file
in the <code class="docutils literal notranslate"><span class="pre">syscall/</span></code> directory. The mksyscall program will accept this CSV
file as input and generate all of the required proxy or stub files as
output. See <code class="docutils literal notranslate"><span class="pre">Documentation/components/tools/</span></code> for additional information.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="mm/shm.html" class="btn btn-neutral float-left" title="Shared Memory Support" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="tools/index.html" class="btn btn-neutral float-right" title="/tools Host Tools" 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>