Files
slimbootloader.github.io/tools/GenContainer.html

470 lines
43 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Container Tool &mdash; Slim Bootloader 1.0 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/graphviz.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<link rel="shortcut icon" href="../_static/sbl_logo_blue_32x32_icon.ico"/>
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<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/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Configuration Tools" href="ConfigTools.html" />
<link rel="prev" title="Stitch Tool" href="StitchTool.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">
Slim Bootloader
<img src="../_static/sbl_logo_white_200x200.png" class="logo" alt="Logo"/>
</a>
<div class="version">
1.0
</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">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-started/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../supported-hardware/index.html">Supported Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="../developer-guides/index.html">Developers Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security/index.html">Security Features</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-tos/index.html">How-Tos</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Tools</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="BuildTool.html">Build Tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="StitchTool.html">Stitch Tool</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Container Tool</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#image-types">Image Types</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#normal">1. Normal</a></li>
<li class="toctree-l4"><a class="reference internal" href="#classic-linux">2. Classic Linux</a></li>
<li class="toctree-l4"><a class="reference internal" href="#multiboot-elf">3. Multiboot ELF</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#acpi-table-update">ACPI Table Update</a></li>
<li class="toctree-l3"><a class="reference internal" href="#tool-usage">Tool Usage</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="ConfigTools.html">Configuration Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="GpioTool.html">Gpio Tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="UcodeUtility.html">uCode Utility</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/index.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../specs/index.html">Specifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../references/references.html">References and Links</a></li>
<li class="toctree-l1"><a class="reference internal" href="../references/terminology.html">Terminology and Acronyms</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">Slim Bootloader</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">Tools</a></li>
<li class="breadcrumb-item active">Container Tool</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="container-tool">
<span id="gen-container-tool"></span><h1>Container Tool<a class="headerlink" href="#container-tool" title="Permalink to this heading"></a></h1>
<p><code class="docutils literal notranslate"><span class="pre">GenContainer.py</span></code> is a tool used to generate the Slim Bootloader container images in a binary file format.</p>
<p>An SBL container is an encapsulation of multiple components as depicted in the following image:</p>
<a class="reference internal image-reference" href="../_images/Cont.PNG"><img alt="Container structure" src="../_images/Cont.PNG" style="width: 1200px;" /></a>
<section id="image-types">
<span id="container-formats"></span><h2>Image Types<a class="headerlink" href="#image-types" title="Permalink to this heading"></a></h2>
<section id="normal">
<h3>1. Normal<a class="headerlink" href="#normal" title="Permalink to this heading"></a></h3>
<p>This type of container contains a single component in it. The Component may be an ELF file, an UEFI-PI FV binary,
or a PE32 file.</p>
<blockquote>
<div><ul>
<li><p>example command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">create</span> <span class="o">-</span><span class="n">t</span> <span class="n">NORMAL</span> <span class="o">-</span><span class="n">cl</span> <span class="n">UEFI</span><span class="p">:</span><span class="n">UefiPld</span><span class="o">.</span><span class="n">fd</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
</section>
<section id="classic-linux">
<h3>2. Classic Linux<a class="headerlink" href="#classic-linux" title="Permalink to this heading"></a></h3>
<p>This container type is used to boot a typical Linux operating system. This container is made up of atleast two
components - the kernel command line, and kernel image.</p>
<p><strong>SBL expects the components inside the container in the following order: kernel command line, kernel image,
and an optional initrd.</strong></p>
<blockquote>
<div><ul class="simple">
<li><p>Dummy files need to be provided if one of the component is not in use.</p></li>
<li><p>For example, if initrd is not used, a dummy file needs to be provided in place of the initrd.</p></li>
</ul>
</div></blockquote>
<p>Additionally, more optional components like ACPI tables, and firmware blobs can be added to the container.</p>
<p>Some device drivers may require binary blobs for initialization. These are typically loaded from the filesytem.
In some use cases like fast boot, having access to these blobs before the filesystem is mounted may be desirable.
Packaging blobs within the container provides these drivers a way to get the blobs without waiting for the filesystem
to be mounted. When these additional blobs are packaged in the container, SBL can load them to memory and pass
the memory address to the operating system through the kernel command line. For this, SBL expects a placeholder
in the command line to put the address into. For example, if the blobs component name when creating the container
was specified as <code class="docutils literal notranslate"><span class="pre">BLOB</span></code>, SBL will look for the string <code class="docutils literal notranslate"><span class="pre">SBL.BLOB=0x0000000000000000</span></code> in the cmdline. The zeroes
will be patched with the actual memory address at which the blob was loaded.</p>
<p><strong>File Order:</strong> cmdline.txt, bzImage (kernel), initrd, acpi, firmware1, firmware2, …</p>
<p>The Classic Linux containers format is laid out below.</p>
<blockquote>
<div><blockquote>
<div><a class="reference internal image-reference" href="../_images/sbl_classic_container.png"><img alt="../_images/sbl_classic_container.png" src="../_images/sbl_classic_container.png" style="width: 600px;" /></a>
</div></blockquote>
<ul>
<li><p>example command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">create</span> <span class="o">-</span><span class="n">t</span> <span class="n">CLASSIC</span> <span class="o">-</span><span class="n">cl</span> <span class="n">CMDL</span><span class="p">:</span><span class="n">cmdline</span><span class="o">.</span><span class="n">txt</span> <span class="n">KRNL</span><span class="p">:</span><span class="n">bzImage</span> <span class="n">INRD</span><span class="p">:</span><span class="n">initrd</span> <span class="n">SBL</span><span class="o">.</span><span class="n">BLOB</span><span class="o">=</span><span class="mh">0x0000000000000000</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
</section>
<section id="multiboot-elf">
<h3>3. Multiboot ELF<a class="headerlink" href="#multiboot-elf" title="Permalink to this heading"></a></h3>
<p>This type of container stores Multiboot / Multiboot-2 compliant ELF binaries and their corresponding command line files in pairs. The first ELF binary in the Multiboot container is assumed to be the one used for booting. If a binary does not use a command line, a dummy file needs to be provided in place of the command line file.</p>
<p><strong>Files:</strong> cmdline1, elf1, cmdline2, elf2, …</p>
<blockquote>
<div><ul>
<li><p>example command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">create</span> <span class="o">-</span><span class="n">t</span> <span class="n">MULTIBOOT</span> <span class="o">-</span><span class="n">cl</span> <span class="n">CMD1</span><span class="p">:</span><span class="n">cmdline1</span> <span class="n">ELF1</span><span class="p">:</span><span class="n">mb</span><span class="o">.</span><span class="n">elf</span> <span class="n">CMD2</span><span class="p">:</span><span class="n">cmdline2</span> <span class="n">ELF2</span><span class="p">:</span><span class="n">mb2</span><span class="o">.</span><span class="n">elf</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>The default container type is Classic Linux.</strong></p>
</div>
</section>
</section>
<section id="acpi-table-update">
<h2>ACPI Table Update<a class="headerlink" href="#acpi-table-update" title="Permalink to this heading"></a></h2>
<p>All the three container types support ACPI table update by packaging the ACPI blobs with
the container. The method is slightly different for the MULTIBOOT container due to the
nature of the files being present in pairs.</p>
<ul>
<li><p><strong>For NORMAL / CLASSIC LINUX containers:</strong></p>
<p>ACPI blobs can be packaged into the container using the component name <code class="docutils literal notranslate"><span class="pre">ACPI</span></code>. SBL will
detect this component as a special case and update the ACPI tables.</p>
</li>
</ul>
<blockquote>
<div><ul>
<li><p>example command:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">create</span> <span class="o">-</span><span class="n">t</span> <span class="n">NORMAL</span> <span class="o">-</span><span class="n">cl</span> <span class="n">UEFI</span><span class="p">:</span><span class="n">UefiPld</span><span class="o">.</span><span class="n">fd</span> <span class="n">ACPI</span><span class="p">:</span><span class="n">Dsdt</span><span class="o">.</span><span class="n">aml</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
<ul>
<li><p><strong>For MULTIBOOT containers:</strong></p>
<p>Since Multiboot files are in pairs (cmdline / boot file), a command line file containing a special
signature is used to indicate that the corresponding boot file is actually an ACPI blob. The command
used to create this file is:</p>
<ul>
<li><p>Linux command to create signature file:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>$ echo -n -e &#39;\x86\x00\xb1\xac&#39; &gt; acpi_cmd
</pre></div>
</div>
</li>
</ul>
</li>
</ul>
<blockquote>
<div><ul>
<li><p>example command to create container:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">create</span> <span class="o">-</span><span class="n">t</span> <span class="n">MULTIBOOT</span> <span class="o">-</span><span class="n">cl</span> <span class="n">CMD1</span><span class="p">:</span><span class="n">cmdline1</span> <span class="n">ELF1</span><span class="p">:</span><span class="n">mb</span><span class="o">.</span><span class="n">elf</span> <span class="n">CMD2</span><span class="p">:</span><span class="n">cmdline2</span> <span class="n">ELF2</span><span class="p">:</span><span class="n">mb2</span><span class="o">.</span><span class="n">elf</span> <span class="n">DUMY</span><span class="p">:</span><span class="n">acpi_cmd</span> <span class="n">DSDT</span><span class="p">:</span><span class="n">Dsdt</span><span class="o">.</span><span class="n">aml</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
</section>
<section id="tool-usage">
<h2>Tool Usage<a class="headerlink" href="#tool-usage" title="Permalink to this heading"></a></h2>
<p>Following operations are supported:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">usage</span><span class="p">:</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="p">{</span><span class="n">view</span><span class="p">,</span><span class="n">create</span><span class="p">,</span><span class="n">extract</span><span class="p">,</span><span class="n">replace</span><span class="p">,</span><span class="n">sign</span><span class="p">}</span> <span class="o">...</span>
<span class="n">positional</span> <span class="n">arguments</span><span class="p">:</span>
<span class="p">{</span><span class="n">view</span><span class="p">,</span><span class="n">create</span><span class="p">,</span><span class="n">extract</span><span class="p">,</span><span class="n">replace</span><span class="p">,</span><span class="n">sign</span><span class="p">}</span>
<span class="n">command</span>
<span class="n">view</span> <span class="n">display</span> <span class="n">a</span> <span class="n">container</span> <span class="n">image</span>
<span class="n">create</span> <span class="n">create</span> <span class="n">a</span> <span class="n">container</span> <span class="n">image</span>
<span class="n">extract</span> <span class="n">extract</span> <span class="n">a</span> <span class="n">component</span> <span class="n">image</span>
<span class="n">replace</span> <span class="n">replace</span> <span class="n">a</span> <span class="n">component</span> <span class="n">image</span>
<span class="n">sign</span> <span class="n">compress</span> <span class="ow">and</span> <span class="n">sign</span> <span class="n">a</span> <span class="n">component</span> <span class="n">image</span>
<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
<span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
</pre></div>
</div>
<ul>
<li><p>view:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">usage</span><span class="p">:</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">view</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="o">-</span><span class="n">i</span> <span class="n">IMAGE</span>
<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
<span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
<span class="o">-</span><span class="n">i</span> <span class="n">IMAGE</span> <span class="n">Container</span> <span class="nb">input</span> <span class="n">image</span>
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><ul>
<li><p>example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">view</span> <span class="o">-</span><span class="n">i</span> <span class="n">ContainerImage</span><span class="o">.</span><span class="n">bin</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
<ul>
<li><p>create:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">usage</span><span class="p">:</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">create</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="p">(</span><span class="o">-</span><span class="n">l</span> <span class="n">LAYOUT</span> <span class="o">|</span> <span class="o">-</span><span class="n">cl</span> <span class="n">COMP_LIST</span> <span class="p">[</span><span class="n">COMP_LIST</span> <span class="o">...</span><span class="p">])</span>
<span class="p">[</span><span class="o">-</span><span class="n">t</span> <span class="n">IMG_TYPE</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">o</span> <span class="n">OUT_PATH</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">k</span> <span class="n">KEY_PATH</span><span class="p">]</span>
<span class="p">[</span><span class="o">-</span><span class="n">cd</span> <span class="n">COMP_DIR</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span><span class="p">]</span>
<span class="p">[</span><span class="o">-</span><span class="n">a</span> <span class="p">{</span><span class="n">SHA2_256</span><span class="p">,</span> <span class="n">SHA2_384</span><span class="p">,</span> <span class="n">RSA2048_PKCS1_SHA2_256</span><span class="p">,</span> <span class="n">RSA3072_PKCS1_SHA2_384</span><span class="p">,</span> <span class="n">RSA2048_PSS_SHA2_256</span><span class="p">,</span> <span class="n">RSA3072_PSS_SHA2_384</span><span class="p">,</span> <span class="n">NONE</span><span class="p">}]</span>
<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
<span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
<span class="o">-</span><span class="n">l</span> <span class="n">LAYOUT</span> <span class="n">Container</span> <span class="n">layout</span> <span class="n">intput</span> <span class="n">file</span> <span class="k">if</span> <span class="n">no</span> <span class="o">-</span><span class="n">cl</span>
<span class="o">-</span><span class="n">cl</span> <span class="n">COMP_LIST</span> <span class="p">[</span><span class="n">COMP_LIST</span> <span class="o">...</span><span class="p">]</span>
<span class="n">List</span> <span class="n">of</span> <span class="n">each</span> <span class="n">component</span> <span class="n">files</span><span class="p">,</span> <span class="n">following</span> <span class="n">XXXX</span><span class="p">:</span><span class="n">FileName</span> <span class="nb">format</span>
<span class="o">-</span><span class="n">t</span> <span class="n">IMG_TYPE</span> <span class="n">Container</span> <span class="n">Image</span> <span class="n">Type</span> <span class="p">:</span> <span class="p">[</span><span class="n">NORMAL</span><span class="p">,</span> <span class="n">CLASSIC</span><span class="p">,</span> <span class="n">MULTIBOOT</span><span class="p">]</span>
<span class="o">-</span><span class="n">o</span> <span class="n">OUT_PATH</span> <span class="n">Container</span> <span class="n">output</span> <span class="n">directory</span><span class="o">/</span><span class="n">file</span>
<span class="o">-</span><span class="n">a</span> <span class="p">{</span><span class="n">SHA2_256</span><span class="p">,</span>
<span class="n">SHA2_384</span><span class="p">,</span>
<span class="n">RSA2048_PKCS1_SHA2_256</span><span class="p">,</span>
<span class="n">RSA3072_PKCS1_SHA2_384</span><span class="p">,</span>
<span class="n">RSA2048_PSS_SHA2_256</span><span class="p">,</span>
<span class="n">RSA3072_PSS_SHA2_384</span><span class="p">,</span>
<span class="n">NONE</span><span class="p">}</span>
<span class="n">Authentication</span> <span class="n">algorithm</span>
<span class="o">-</span><span class="n">k</span> <span class="n">KEY_PATH</span> <span class="n">KEY_ID</span> <span class="ow">or</span> <span class="n">Private</span> <span class="n">key</span> <span class="n">file</span>
<span class="o">-</span><span class="n">cd</span> <span class="n">COMP_DIR</span> <span class="n">Componet</span> <span class="n">image</span> <span class="nb">input</span> <span class="n">directory</span>
<span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span> <span class="n">Compression</span> <span class="n">tool</span> <span class="n">directory</span>
<span class="o">-</span><span class="n">s</span> <span class="n">SVN</span> <span class="n">Security</span> <span class="n">version</span> <span class="n">number</span> <span class="k">for</span> <span class="n">Component</span> <span class="k">for</span> <span class="n">no</span> <span class="o">-</span><span class="n">cl</span> <span class="n">option</span>
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><ul>
<li><p>Example 1 - using component list (<code class="docutils literal notranslate"><span class="pre">-cl</span></code>):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>python GenContainer.py create -cl CMDL:cmdline.txt:$svn KRNL:vmlinuz:$svn INRD:initrd:$svn -o Out
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><dl class="simple">
<dt>Notes:</dt><dd><ul class="simple">
<li><p>When using a component list, the container headers component name will be <code class="docutils literal notranslate"><span class="pre">BOOT</span></code>.</p></li>
<li><p>$svn is optional</p></li>
</ul>
</dd>
</dl>
</div></blockquote>
<ul>
<li><p>Example 2 - using component layout file (<code class="docutils literal notranslate"><span class="pre">-l</span></code>):</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">create</span> <span class="o">-</span><span class="n">l</span> <span class="n">layout</span><span class="o">.</span><span class="n">txt</span> <span class="o">-</span><span class="n">o</span> <span class="n">Out</span>
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><dl class="simple">
<dt>Note:</dt><dd><ul class="simple">
<li><p>Name of the container header component will be the name specified in the <code class="docutils literal notranslate"><span class="pre">layout.txt</span></code> file.</p></li>
</ul>
</dd>
</dl>
</div></blockquote>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>layout.txt can look like following:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Container Layout File</span>
<span class="c1">#</span>
<span class="c1"># Name , ImageFile ,CompAlg , AuthType, KeyFile , Alignment, Size, Svn</span>
<span class="c1"># ============================================================================================================================</span>
<span class="p">(</span> <span class="s1">&#39;BOOT&#39;</span><span class="p">,</span> <span class="s1">&#39;Out&#39;</span> <span class="p">,</span> <span class="s1">&#39;&#39;</span> <span class="p">,</span> <span class="s1">&#39;RSA2048_PSS_SHA2_256&#39;</span><span class="p">,</span> <span class="s1">&#39;KEY_ID_CONTAINER_RSA3072&#39;</span> <span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">&lt;---</span> <span class="n">Container</span> <span class="n">Hdr</span>
<span class="p">(</span> <span class="s1">&#39;CMDL&#39;</span><span class="p">,</span> <span class="s1">&#39;cmdline.txt&#39;</span> <span class="p">,</span> <span class="s1">&#39;Lz4&#39;</span> <span class="p">,</span> <span class="s1">&#39;RSA2048_PSS_SHA2_256&#39;</span><span class="p">,</span> <span class="s1">&#39;KEY_ID_CONTAINER_COMP_RSA3072&#39;</span> <span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">&lt;---</span> <span class="n">Component</span> <span class="n">Entry</span> <span class="mi">1</span>
<span class="p">(</span> <span class="s1">&#39;KRNL&#39;</span><span class="p">,</span> <span class="s1">&#39;vmlinuz&#39;</span> <span class="p">,</span> <span class="s1">&#39;Lz4&#39;</span> <span class="p">,</span> <span class="s1">&#39;RSA2048_PSS_SHA2_256&#39;</span><span class="p">,</span> <span class="s1">&#39;KEY_ID_CONTAINER_COMP_RSA3072&#39;</span> <span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">&lt;---</span> <span class="n">Component</span> <span class="n">Entry</span> <span class="mi">2</span>
<span class="p">(</span> <span class="s1">&#39;INRD&#39;</span><span class="p">,</span> <span class="s1">&#39;initrd&#39;</span> <span class="p">,</span> <span class="s1">&#39;Lz4&#39;</span> <span class="p">,</span> <span class="s1">&#39;RSA2048_PSS_SHA2_256&#39;</span><span class="p">,</span> <span class="s1">&#39;KEY_ID_CONTAINER_COMP_RSA3072&#39;</span> <span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">&lt;---</span> <span class="n">Component</span> <span class="n">Entry</span> <span class="mi">3</span>
</pre></div>
</div>
<p>If you provide the full path or a file/dir name to output or key, in both layout.txt and command line,
command line options will always overwrite the values in layout.txt.</p>
</div>
<ul>
<li><p>extract:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">usage</span><span class="p">:</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">extract</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="o">-</span><span class="n">i</span> <span class="n">IMAGE</span> <span class="p">[</span><span class="o">-</span><span class="n">n</span> <span class="n">COMP_NAME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">od</span> <span class="n">OUT_DIR</span><span class="p">]</span>
<span class="p">[</span><span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span><span class="p">]</span>
<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
<span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
<span class="o">-</span><span class="n">i</span> <span class="n">IMAGE</span> <span class="n">Container</span> <span class="nb">input</span> <span class="n">image</span> <span class="n">path</span>
<span class="o">-</span><span class="n">n</span> <span class="n">COMP_NAME</span> <span class="n">Component</span> <span class="n">name</span> <span class="n">to</span> <span class="n">extract</span>
<span class="o">-</span><span class="n">od</span> <span class="n">OUT_DIR</span> <span class="n">Output</span> <span class="n">directory</span>
<span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span> <span class="n">Compression</span> <span class="n">tool</span> <span class="n">directory</span>
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><ul>
<li><p>example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">extract</span> <span class="o">-</span><span class="n">i</span> <span class="n">ContainerImage</span><span class="o">.</span><span class="n">bin</span> <span class="o">-</span><span class="n">od</span> <span class="n">ExtDir</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
<ul>
<li><p>replace:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">usage</span><span class="p">:</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">replace</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="o">-</span><span class="n">i</span> <span class="n">IMAGE</span> <span class="p">[</span><span class="o">-</span><span class="n">o</span> <span class="n">NEW_NAME</span><span class="p">]</span> <span class="o">-</span><span class="n">n</span> <span class="n">COMP_NAME</span> <span class="o">-</span><span class="n">f</span>
<span class="n">COMP_FILE</span> <span class="p">[</span><span class="o">-</span><span class="n">c</span> <span class="p">{</span><span class="n">lz4</span><span class="p">,</span><span class="n">lzma</span><span class="p">,</span><span class="n">dummy</span><span class="p">}]</span> <span class="p">[</span><span class="o">-</span><span class="n">k</span> <span class="n">KEY_FILE</span><span class="p">]</span>
<span class="p">[</span><span class="o">-</span><span class="n">od</span> <span class="n">OUT_DIR</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span><span class="p">]</span>
<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
<span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
<span class="o">-</span><span class="n">i</span> <span class="n">IMAGE</span> <span class="n">Container</span> <span class="nb">input</span> <span class="n">image</span> <span class="n">path</span>
<span class="o">-</span><span class="n">o</span> <span class="n">NEW_NAME</span> <span class="n">Container</span> <span class="n">new</span> <span class="n">output</span> <span class="n">image</span> <span class="n">name</span>
<span class="o">-</span><span class="n">n</span> <span class="n">COMP_NAME</span> <span class="n">Component</span> <span class="n">name</span> <span class="n">to</span> <span class="n">replace</span>
<span class="o">-</span><span class="n">f</span> <span class="n">COMP_FILE</span> <span class="n">Component</span> <span class="nb">input</span> <span class="n">file</span> <span class="n">path</span>
<span class="o">-</span><span class="n">c</span> <span class="p">{</span><span class="n">lz4</span><span class="p">,</span><span class="n">lzma</span><span class="p">,</span><span class="n">dummy</span><span class="p">}</span> <span class="n">compression</span> <span class="n">algorithm</span>
<span class="o">-</span><span class="n">k</span> <span class="n">KEY_FILE</span> <span class="n">KEY_ID</span><span class="o">/</span><span class="n">Private</span> <span class="n">key</span> <span class="n">file</span> <span class="n">path</span> <span class="n">to</span> <span class="n">sign</span> <span class="n">component</span>
<span class="o">-</span><span class="n">od</span> <span class="n">OUT_DIR</span> <span class="n">Output</span> <span class="n">directory</span>
<span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span> <span class="n">Compression</span> <span class="n">tool</span> <span class="n">directory</span>
<span class="o">-</span><span class="n">s</span> <span class="n">SVN</span> <span class="n">Security</span> <span class="n">version</span> <span class="n">number</span> <span class="k">for</span> <span class="n">Component</span>
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><ul>
<li><p>example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">replace</span> <span class="o">-</span><span class="n">i</span> <span class="n">ContainerImage</span><span class="o">.</span><span class="n">bin</span> <span class="o">-</span><span class="n">od</span> <span class="n">Out</span> <span class="o">-</span><span class="n">n</span> <span class="n">CMDL</span> <span class="o">-</span><span class="n">f</span> <span class="n">new_cmdline</span><span class="o">.</span><span class="n">txt</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
<ul>
<li><p>sign:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">usage</span><span class="p">:</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">sign</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="o">-</span><span class="n">f</span> <span class="n">COMP_FILE</span> <span class="p">[</span><span class="o">-</span><span class="n">o</span> <span class="n">SIGN_FILE</span><span class="p">]</span>
<span class="p">[</span><span class="o">-</span><span class="n">c</span> <span class="p">{</span><span class="n">lz4</span><span class="p">,</span><span class="n">lzma</span><span class="p">,</span><span class="n">dummy</span><span class="p">}]</span> <span class="p">[</span><span class="o">-</span><span class="n">a</span> <span class="p">{</span><span class="n">SHA2_256</span><span class="p">,</span> <span class="n">SHA2_384</span><span class="p">,</span> <span class="n">RSA2048_PKCS1_SHA2_256</span><span class="p">,</span> <span class="n">RSA3072_PKCS1_SHA2_384</span><span class="p">,</span> <span class="n">RSA2048_PSS_SHA2_256</span><span class="p">,</span> <span class="n">RSA3072_PSS_SHA2_384</span><span class="p">,</span> <span class="n">NONE</span><span class="p">}]</span>
<span class="p">[</span><span class="o">-</span><span class="n">k</span> <span class="n">KEY_FILE</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">od</span> <span class="n">OUT_DIR</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span><span class="p">]</span>
<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
<span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
<span class="o">-</span><span class="n">f</span> <span class="n">COMP_FILE</span> <span class="n">Component</span> <span class="nb">input</span> <span class="n">file</span> <span class="n">path</span>
<span class="o">-</span><span class="n">o</span> <span class="n">SIGN_FILE</span> <span class="n">Signed</span> <span class="n">output</span> <span class="n">image</span> <span class="n">name</span>
<span class="o">-</span><span class="n">c</span> <span class="p">{</span><span class="n">lz4</span><span class="p">,</span><span class="n">lzma</span><span class="p">,</span><span class="n">dummy</span><span class="p">}</span> <span class="n">compression</span> <span class="n">algorithm</span>
<span class="o">-</span><span class="n">a</span> <span class="p">{</span><span class="n">SHA2_256</span><span class="p">,</span>
<span class="n">SHA2_384</span><span class="p">,</span>
<span class="n">RSA2048_PKCS1_SHA2_256</span><span class="p">,</span>
<span class="n">RSA3072_PKCS1_SHA2_384</span><span class="p">,</span>
<span class="n">RSA2048_PSS_SHA2_256</span><span class="p">,</span>
<span class="n">RSA3072_PSS_SHA2_384</span><span class="p">,</span>
<span class="n">NONE</span><span class="p">}</span>
<span class="n">Authentication</span> <span class="n">algorithm</span>
<span class="o">-</span><span class="n">k</span> <span class="n">KEY_FILE</span> <span class="n">KEY_ID</span> <span class="ow">or</span> <span class="n">Private</span> <span class="n">key</span> <span class="n">file</span> <span class="n">path</span> <span class="n">to</span> <span class="n">sign</span> <span class="n">component</span>
<span class="o">-</span><span class="n">od</span> <span class="n">OUT_DIR</span> <span class="n">Output</span> <span class="n">directory</span>
<span class="o">-</span><span class="n">td</span> <span class="n">TOOL_DIR</span> <span class="n">Compression</span> <span class="n">tool</span> <span class="n">directory</span>
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><ul>
<li><p>example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">GenContainer</span><span class="o">.</span><span class="n">py</span> <span class="n">sign</span> <span class="o">-</span><span class="n">f</span> <span class="o">&lt;</span><span class="n">ComponentImage</span><span class="o">/</span><span class="n">ContainerImage</span><span class="o">.</span><span class="n">bin</span><span class="o">&gt;</span> <span class="o">-</span><span class="n">c</span> <span class="n">lz4</span> <span class="o">-</span><span class="n">td</span> <span class="o">&lt;</span><span class="n">path</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">Lz4Compress</span><span class="o">.</span><span class="n">exe</span><span class="o">&gt;</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="StitchTool.html" class="btn btn-neutral float-left" title="Stitch Tool" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="ConfigTools.html" class="btn btn-neutral float-right" title="Configuration 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 2018 - 2025, Intel Corporation.
<span class="lastupdated">Last updated on May 13, 2025.
</span></p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>