blob: 1b354dd9e37b5d216ec7c834fcc59c923a9755f2 [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>Partition Table &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="PROCFS" href="procfs.html" />
<link rel="prev" title="How NXFFS works" href="how_nxffs_works.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 current"><a class="reference internal" href="index.html">NuttX File System</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="index.html#virtual-file-system-vfs">Virtual File System (VFS)</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="index.html#file-systems">File systems</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="aio.html">Asynchronous I/O support</a></li>
<li class="toctree-l4"><a class="reference internal" href="binfs.html">BINFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="cromfs.html">CROMFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="fat.html">FAT</a></li>
<li class="toctree-l4"><a class="reference internal" href="hostfs.html">Host File System</a></li>
<li class="toctree-l4"><a class="reference internal" href="littlefs.html">LITTLEFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="mmap.html">File mapping emulation (mmap)</a></li>
<li class="toctree-l4"><a class="reference internal" href="mnemofs.html">MNEMOFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="nfs.html">NFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxffs.html">NXFFS</a></li>
<li class="toctree-l4 current"><a class="current reference internal" href="#">Partition Table</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#text-based-partition-table">Text based Partition Table</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="procfs.html">PROCFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="romfs.html">ROMFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="rpmsgfs.html">RPMSG File System</a></li>
<li class="toctree-l4"><a class="reference internal" href="smartfs.html">SMARTFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="shmfs.html">Shared Memory File System</a></li>
<li class="toctree-l4"><a class="reference internal" href="spiffs.html">SPIFFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="tmpfs.html">TMPFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="unionfs.html">Union File System</a></li>
<li class="toctree-l4"><a class="reference internal" href="userfs.html">User file system</a></li>
<li class="toctree-l4"><a class="reference internal" href="zipfs.html">ZipFS</a></li>
<li class="toctree-l4"><a class="reference internal" href="inotify.html">Inotify</a></li>
<li class="toctree-l4"><a class="reference internal" href="nuttxfs.html">Nuttx FS</a></li>
<li class="toctree-l4"><a class="reference internal" href="nxflat.html">NuttX FLAT Binary Format (NXFLAT)</a></li>
<li class="toctree-l4"><a class="reference internal" href="pseudofs.html">Pseudo File System</a></li>
<li class="toctree-l4"><a class="reference internal" href="special_files_dev_num.html">Special Files and Device Numbers</a></li>
<li class="toctree-l4"><a class="reference internal" href="v9fs.html">V9FS</a></li>
<li class="toctree-l4"><a class="reference internal" href="v9fs.html#adding-v9fs-to-the-nuttx-configuration">Adding V9FS to the NuttX Configuration</a></li>
<li class="toctree-l4"><a class="reference internal" href="v9fs.html#nfs-mount-command">NFS Mount Command</a></li>
<li class="toctree-l4"><a class="reference internal" href="index.html#fs-categories">FS Categories</a></li>
</ul>
</li>
</ul>
</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"><a class="reference internal" href="../syscall.html">Syscall Layer</a></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"><a href="index.html">NuttX File System</a></li>
<li class="breadcrumb-item active">Partition Table</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/components/filesystem/partition.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="partition-table">
<h1>Partition Table<a class="headerlink" href="#partition-table" title="Permalink to this heading"></a></h1>
<section id="text-based-partition-table">
<h2>Text based Partition Table<a class="headerlink" href="#text-based-partition-table" title="Permalink to this heading"></a></h2>
<p><strong>Summary</strong></p>
<p>TXTABLE - A text based partition table stored in last eraseblock
(or in romdisk for backup).</p>
<ol class="arabic simple">
<li><p>The 1st line must be “Magic+Version”, current is “TXTABLE0”.</p></li>
<li><p>The 2nd and remaining lines are partition entries(min: one)
in format: “%s %zx %zx”(means name, size and offset (byte)(in hex)).</p></li>
<li><p>Size or offset can be default zero(means zero(for 1st entry) or
calculated(for others)), and will be calculated by the parser refs to previous
and next entries.</p></li>
<li><p>The last eraseblock will be registered as pseudo partition named “txtable”.
If the last eraseblock included by the last real partition, it will be
excluded from.</p></li>
</ol>
<p>To avoid problems of PTABLE: In case of multiple NuttX binary,
partition table maybe out of sync.</p>
<p>And it’s easier:</p>
<ol class="arabic simple">
<li><p>Text format with simple rules(name + size + offset).</p></li>
<li><p>Size or offset can be default(calculated refs to previous
and next entries).</p></li>
<li><p>Support backup table(eg. /etc/txtable.txt in ROMFS)</p></li>
</ol>
<p>Size / Offset can be automatically calculated, case:</p>
<ol class="arabic simple">
<li><p>The offset of the first entry is zero, and the offset of other entries
is zero: automatic calculation;</p></li>
<li><p>The size of the last entry is zero: fill to the end of the entire Flash
(keep the last eraseblock); the size of other entries is zero:
automatically calculated(next.offset - current.offset);</p></li>
<li><p>Typical case 1: The size of all entries is
zero (calculated automatically), and the offset is non-zero;</p></li>
<li><p>Typical case 2: The size and offset of a certain entry are all zero,
but the size and offset of two adjacent entries are all non-zero;</p></li>
</ol>
<p><strong>Examples</strong></p>
<p>Both size and offset of “partition6” are zero,
gap exists between “partition7” and “data”,
and not reserve last eraseblock.</p>
<ul>
<li><p>txtable.txt</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>TXTABLE0
partition1 0x6C000 0x4000
partition2 0x10000 0x70000
partition3 0x80000 0x80000
partition4 0x80000 0x100000
partition5 0x280000 0x180000
partition6 0 0
partition7 0x10000 0x480000
data 0 0x500000
</pre></div>
</div>
</li>
<li><p>Parsed</p>
<div class="line-block">
<div class="line">Reserved last eraseblock, and gap between partition7 and data is kept.</div>
<div class="line">Format: name, offset, size</div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/dev/partition1 offset 0x00004000, size 0x0006c000
/dev/partition2 offset 0x00070000, size 0x00010000
/dev/partition3 offset 0x00080000, size 0x00080000
/dev/partition4 offset 0x00100000, size 0x00080000
/dev/partition5 offset 0x00180000, size 0x00280000
/dev/partition6 offset 0x00400000, size 0x00080000
/dev/partition7 offset 0x00480000, size 0x00010000
/dev/data offset 0x00500000, size 0x00aff000
/dev/txtable offset 0x00fff000, size 0x00001000
</pre></div>
</div>
</li>
</ul>
<p>More than one not set size or offset</p>
<ul>
<li><p>txtable.txt</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>TXTABLE0
partition1 0 0x4000
partition2 0 0x70000
partition3 0 0x80000
partition4 0x80000 0x100000
partition5 0x280000 0
partition6 0 0
partition7 0x10000 0x480000
data 0 0x500000
</pre></div>
</div>
</li>
<li><p>Parsed</p>
<div class="line-block">
<div class="line">Size of partition[2,3,4,6] and data are calculated, and gap between
partition7 and data is kept.</div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/dev/partition1 offset 0x00004000, size 0x0006c000
/dev/partition2 offset 0x00070000, size 0x00010000
/dev/partition3 offset 0x00080000, size 0x00080000
/dev/partition4 offset 0x00100000, size 0x00080000
/dev/partition5 offset 0x00180000, size 0x00280000
/dev/partition6 offset 0x00400000, size 0x00080000
/dev/partition7 offset 0x00480000, size 0x00010000
/dev/data offset 0x00500000, size 0x00aff000
/dev/txtable offset 0x00fff000, size 0x00001000
</pre></div>
</div>
</li>
</ul>
<p>Only one partition entry, and size not spec</p>
<ul>
<li><p>txtable.txt</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>TXTABLE0
partition1 0x0 0x4000
</pre></div>
</div>
</li>
<li><p>Parsed</p>
<div class="line-block">
<div class="line">The last eraseblock was kept, and size is correct.</div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/dev/partition1 offset 0x00004000, size 0x00ffb000
/dev/txtable offset 0x00fff000, size 0x00001000
</pre></div>
</div>
</li>
</ul>
<p>Blank line &amp;&amp; New line delim</p>
<ul>
<li><p>txtable.txt</p>
<div class="line-block">
<div class="line">New line: CR + LF / LF.</div>
<div class="line">Additional char/string after “%s %zx %zx”.</div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>TXTABLE0
partition1 0x6C000 0x4000
partition2 0 0x70000
partition3 0 0x80000
partition4 0 0x100000
partition5 0x280000 0x180000
partition6 0x80000 0x400000 # String between &quot;%s %zx %zx&quot; and &quot;LF&quot; will be ignored.
partition7 0x10000 0x480000 # Comments: This is the 7th partition.
data 0 0x500000
EOF
</pre></div>
</div>
</li>
<li><p>Parsed</p>
<div class="line-block">
<div class="line">Blank lines are ignored, and new line of both “LF” or “CRLF” are parsed.
String between “%s %zx %zx” and “LF” will be ignored(eg. CR, or some comments).</div>
</div>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>/dev/partition1 offset 0x00004000, size 0x0006c000
/dev/partition2 offset 0x00070000, size 0x00010000
/dev/partition3 offset 0x00080000, size 0x00080000
/dev/partition4 offset 0x00100000, size 0x00080000
/dev/partition5 offset 0x00180000, size 0x00280000
/dev/partition6 offset 0x00400000, size 0x00080000
/dev/partition7 offset 0x00480000, size 0x00010000
/dev/data offset 0x00500000, size 0x00aff000
/dev/txtable offset 0x00fff000, size 0x00001000
</pre></div>
</div>
</li>
</ul>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="how_nxffs_works.html" class="btn btn-neutral float-left" title="How NXFFS works" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="procfs.html" class="btn btn-neutral float-right" title="PROCFS" 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>