| <!-- |
| 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 — 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/<cpu>/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/<cpu>/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>"open","fcntl.h","","int","const char*","int","...","mode_t" |
| </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>© Copyright 2023, The Apache Software Foundation.</p> |
| </div> |
| |
| |
| |
| </footer> |
| </div> |
| </div> |
| </section> |
| </div> |
| <script> |
| jQuery(function () { |
| SphinxRtdTheme.Navigation.enable(true); |
| }); |
| </script> |
| |
| </body> |
| </html> |