build-ktn-imx tagshttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags2022-07-28T18:28:49Zhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/tag_STRESS_20221219tag_STRESS_20221219Stress image with bootfinish indicationEberhard Stollhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/tag_STRESS_20220729tag_STRESS_20220729Eberhard Stollhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/tag_STRESS_20220728tag_STRESS_20220728<p data-sourcepos="1:1-1:38" dir="auto">Initial image-ktn-stress configuration</p>2022-07-28T18:28:49ZEberhard Stollhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/5.0.05.0.0Maximilian Adducchiohttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/latestlatestMaximilian Adducchiohttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/rel_BSP_5.0.0-rcrel_BSP_5.0.0-rc<h1 data-sourcepos="1:1-1:20" dir="auto">
<a id="user-content-supported-hardware" class="anchor" href="#supported-hardware" aria-hidden="true"></a>Supported Hardware</h1>
<h2 data-sourcepos="3:1-3:49" dir="auto">
<a id="user-content-dk-imx8mm-demokit-with-imx8mm-som-n801x-s" class="anchor" href="#dk-imx8mm-demokit-with-imx8mm-som-n801x-s" aria-hidden="true"></a>DK i.MX8MM: Demokit with i.MX8MM SoM (N801x-S)</h2>
<ul data-sourcepos="5:1-12:0" dir="auto">
<li data-sourcepos="5:1-7:53">
<strong data-sourcepos="5:3-5:37">Supported peripherals in Linux:</strong> Ethernet 1 & 2, USB Host, USB OTG,
SD card, Debug Console, eMMC, SPI NOR, RTC, RS232, CAN, LEDs, GPIOs,
PWM-Beeper, HDMI, LVDS, I2C-Touchscreen, RS485, GPU</li>
<li data-sourcepos="8:1-8:52">
<strong data-sourcepos="8:3-8:29">Supported boot devices:</strong> SD card, SPI NOR, eMMC</li>
<li data-sourcepos="9:1-9:50">
<strong data-sourcepos="9:3-9:27">Supported System Boot</strong> A/B partitios on eMMC</li>
<li data-sourcepos="10:1-12:0">
<strong data-sourcepos="10:3-10:32">Not supported or untested:</strong> VPU, Temperature Monitoring, PCIe,
Suspend/Sleep</li>
</ul>
<h2 data-sourcepos="13:1-13:57" dir="auto">
<a id="user-content-dk-imx6ulull-demokit-with-imx6ulull-som-n6x1x-s" class="anchor" href="#dk-imx6ulull-demokit-with-imx6ulull-som-n6x1x-s" aria-hidden="true"></a>DK i.MX6UL/ULL: Demokit with i.MX6UL/ULL SoM (N6x1x-S)</h2>
<ul data-sourcepos="15:1-21:0" dir="auto">
<li data-sourcepos="15:1-17:41">
<strong data-sourcepos="15:3-15:37">Supported peripherals in Linux:</strong> Ethernet 1 & 2, USB Host, USB OTG,
SD card, Debug Console, NAND FLash, SPI NOR, RTC, RS232, CAN, LEDs, GPIOs,
PWM-Beeper, RGB, I2C-Touchscreen, RS485</li>
<li data-sourcepos="18:1-18:46">
<strong data-sourcepos="18:3-18:29">Supported boot devices:</strong> SD card, SPI NOR</li>
<li data-sourcepos="19:1-19:57">
<strong data-sourcepos="19:3-19:27">Supported System Boot</strong> A/B partitions on NAND-Flash</li>
<li data-sourcepos="20:1-21:0">
<strong data-sourcepos="20:3-20:32">Not supported or untested:</strong> Suspend/Sleep</li>
</ul>
<h1 data-sourcepos="22:1-22:11" dir="auto">
<a id="user-content-changelog" class="anchor" href="#changelog" aria-hidden="true"></a>Changelog</h1>
<ul data-sourcepos="25:1-31:0" dir="auto">
<li data-sourcepos="25:1-25:28">Linux: Update to v5.10.103</li>
<li data-sourcepos="26:1-26:31">U-Boot: Drop extlinux support</li>
<li data-sourcepos="27:1-27:36">U-Boot: Support A/B System Update</li>
<li data-sourcepos="28:1-28:48">U-Boot / Linux: Use redundant U-Boot Partition</li>
<li data-sourcepos="29:1-31:0">General: Support System Update (A/B) using swupdate tool</li>
</ul>
<h1 data-sourcepos="32:1-32:20" dir="auto">
<a id="user-content-ab-system-update" class="anchor" href="#ab-system-update" aria-hidden="true"></a>A/B System Update</h1>
<p data-sourcepos="34:1-34:65" dir="auto">Release 5.0.0 supports seamless (A/B) system updates by default.</p>
<p data-sourcepos="36:1-36:105" dir="auto">This means that you can update your device without booting into a separate partition or separate device.</p>
<p data-sourcepos="38:1-38:106" dir="auto">It requires a higher memory footprint and you must keep it in mind if you are developing a custom rootfs.</p>
<p data-sourcepos="40:1-40:53" dir="auto">Other non A/B setups are not supported at the moment.</p>
<h2 data-sourcepos="43:1-43:19" dir="auto">
<a id="user-content-partition-layout" class="anchor" href="#partition-layout" aria-hidden="true"></a>Partition Layout</h2>
<table data-sourcepos="45:1-51:59" dir="auto">
<thead>
<tr data-sourcepos="45:1-45:62">
<th data-sourcepos="45:2-45:12">Component</th>
<th data-sourcepos="45:14-45:22">Storage</th>
<th data-sourcepos="45:24-45:41">Linux Devicenode</th>
<th data-sourcepos="45:43-45:48">Size</th>
<th data-sourcepos="45:50-45:61">Filesystem</th>
</tr>
</thead>
<tbody>
<tr data-sourcepos="47:1-47:140">
<td data-sourcepos="47:2-47:64">Linux Root-Filesystem A/B Layout, Boot Volume and Data Volume</td>
<td data-sourcepos="47:66-47:77">eMMC, NAND</td>
<td data-sourcepos="47:79-47:110">
<code data-sourcepos="47:81-47:94">/dev/mmcblk0pX</code> / <code data-sourcepos="47:100-47:108">/dev/mtd0</code>
</td>
<td data-sourcepos="47:112-47:125">512 MB, 32GB</td>
<td data-sourcepos="47:127-47:139">ubifs, ext4</td>
</tr>
<tr data-sourcepos="48:1-48:50">
<td data-sourcepos="48:2-48:13">U-Boot SPL</td>
<td data-sourcepos="48:15-48:19">NOR</td>
<td data-sourcepos="48:21-48:33"><code data-sourcepos="48:23-48:31">/dev/mtd1</code></td>
<td data-sourcepos="48:35-48:43">320 KiB</td>
<td data-sourcepos="48:45-48:49">raw</td>
</tr>
<tr data-sourcepos="49:1-49:51">
<td data-sourcepos="49:2-49:13">U-Boot</td>
<td data-sourcepos="49:15-49:19">NOR</td>
<td data-sourcepos="49:21-49:33"><code data-sourcepos="49:23-49:31">/dev/mtd2</code></td>
<td data-sourcepos="49:35-49:44">1024 KiB</td>
<td data-sourcepos="49:46-49:50">raw</td>
</tr>
<tr data-sourcepos="50:1-50:59">
<td data-sourcepos="50:2-50:22">U-Boot env (copy 1)</td>
<td data-sourcepos="50:24-50:28">NOR</td>
<td data-sourcepos="50:30-50:42"><code data-sourcepos="50:32-50:40">/dev/mtd3</code></td>
<td data-sourcepos="50:44-50:51">64 KiB</td>
<td data-sourcepos="50:53-50:57">raw</td>
</tr>
<tr data-sourcepos="51:1-51:59">
<td data-sourcepos="51:2-51:22">U-Boot env (copy 2)</td>
<td data-sourcepos="51:24-51:28">NOR</td>
<td data-sourcepos="51:30-51:42"><code data-sourcepos="51:32-51:40">/dev/mtd4</code></td>
<td data-sourcepos="51:44-51:51">64 KiB</td>
<td data-sourcepos="51:53-51:57">raw</td>
</tr>
</tbody>
</table>
<h2 data-sourcepos="53:1-53:39" dir="auto">
<a id="user-content-factory-setup-initial-partitioning" class="anchor" href="#factory-setup-initial-partitioning" aria-hidden="true"></a>Factory Setup / Initial Partitioning</h2>
<h3 data-sourcepos="55:1-55:19" dir="auto">
<a id="user-content-install-images" class="anchor" href="#install-images" aria-hidden="true"></a>Install Images</h3>
<p data-sourcepos="57:1-59:72" dir="auto">For factory setup you need the images listed below. The images are created during the Yocto build
when executing <code data-sourcepos="58:17-58:33">bitbake image-ktn</code> or bitbake <code data-sourcepos="58:48-58:67">bitbake image-ktn-qt</code>. The images are then deployed
to the directory <code data-sourcepos="59:19-59:70">~/yocto-ktn/build-ktn-imx/tmp/deploy/$MACHINE/images</code>.</p>
<table data-sourcepos="61:1-67:118" dir="auto">
<thead>
<tr data-sourcepos="61:1-61:58">
<th data-sourcepos="61:2-61:14">Description</th>
<th data-sourcepos="61:16-61:35">Image Name (mx6ul)</th>
<th data-sourcepos="61:37-61:56">Image Name (mx8mm)</th>
</tr>
</thead>
<tbody>
<tr data-sourcepos="63:1-63:36">
<td data-sourcepos="63:2-63:13">U-Boot SPL</td>
<td data-sourcepos="63:15-63:21"><code data-sourcepos="63:17-63:19">SPL</code></td>
<td data-sourcepos="63:23-63:35"><code data-sourcepos="63:25-63:33">flash.bin</code></td>
</tr>
<tr data-sourcepos="64:1-64:47">
<td data-sourcepos="64:2-64:16">U-Boot Proper</td>
<td data-sourcepos="64:18-64:31"><code data-sourcepos="64:20-64:29">u-boot.bin</code></td>
<td data-sourcepos="64:33-64:46"><code data-sourcepos="64:35-64:44">u-boot.itb</code></td>
</tr>
<tr data-sourcepos="65:1-65:118">
<td data-sourcepos="65:2-65:9">bootfs</td>
<td data-sourcepos="65:11-65:63"><code data-sourcepos="65:13-65:61">image-ktn-bootfs-kontron-mx6ul-ktn-dunfell.tar.gz</code></td>
<td data-sourcepos="65:65-65:117"><code data-sourcepos="65:67-65:115">image-ktn-bootfs-kontron-mx8mm-ktn-dunfell.tar.gz</code></td>
</tr>
<tr data-sourcepos="66:1-66:80">
<td data-sourcepos="66:2-66:9">rootfs</td>
<td data-sourcepos="66:11-66:44"><code data-sourcepos="66:13-66:42">image-ktn-kontron-mx6ul.tar.gz</code></td>
<td data-sourcepos="66:46-66:79"><code data-sourcepos="66:48-66:77">image-ktn-kontron-mx8mm.tar.gz</code></td>
</tr>
<tr data-sourcepos="67:1-67:118">
<td data-sourcepos="67:2-67:9">userfs</td>
<td data-sourcepos="67:11-67:63"><code data-sourcepos="67:13-67:61">image-ktn-userfs-kontron-mx6ul-ktn-dunfell.tar.gz</code></td>
<td data-sourcepos="67:65-67:117"><code data-sourcepos="67:67-67:115">image-ktn-userfs-kontron-mx8mm-ktn-dunfell.tar.gz</code></td>
</tr>
</tbody>
</table>
<ol data-sourcepos="70:1-73:0" dir="auto">
<li data-sourcepos="70:1-71:0">
<p data-sourcepos="70:4-70:141">Copy the images into the directory <code data-sourcepos="70:40-70:53">/home/root/fw/</code> on your device (or download them from <a href="https://files.kontron-electronics.de/imx/latest" rel="nofollow noreferrer noopener" target="_blank">https://files.kontron-electronics.de/imx/latest</a>)</p>
</li>
<li data-sourcepos="72:1-73:0">
<p data-sourcepos="72:4-72:44">Flash bootloader binaries and environment</p>
</li>
</ol>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="74:1-76:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext"> ptool flash_bl && ptool flash_bl_spl && ptool flash_bootvars</span></code></pre>
<copy-code></copy-code>
</div>
<hr data-sourcepos="79:1-79:3">
<p data-sourcepos="80:1-80:31" dir="auto"><strong data-sourcepos="80:1-80:31">eMMC / NAND Partition sizes</strong></p>
<p data-sourcepos="82:1-82:194" dir="auto">To change the default partition sizes, see <code data-sourcepos="82:45-82:77">/usr/share/production/prod-env.sh</code> and change the default values. Consider that the eMMC has a maximum of 32GB and NAND-Flash has a maximum of 512MB.</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="84:1-90:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext"># partition sizes on eMMC (MB)</span>
<span id="LC2" class="line" lang="plaintext">rootfs_size=10000</span>
<span id="LC3" class="line" lang="plaintext">bootfs_size=50</span>
<span id="LC4" class="line" lang="plaintext"># userfs (if size empty -> all remaining space taken else SIZE in MiB)</span>
<span id="LC5" class="line" lang="plaintext">userfs_size=""</span></code></pre>
<copy-code></copy-code>
</div>
<hr data-sourcepos="92:1-93:0">
<ol data-sourcepos="94:1-99:0" start="3" dir="auto">
<li data-sourcepos="94:1-99:0">
<p data-sourcepos="94:4-94:65">Flash the eMMC on i.MX8MM or the NAND flash on i.MX6UL devices</p>
<p data-sourcepos="96:4-96:48">3.1 Kontron i.MX8MM: <code data-sourcepos="96:27-96:45">ptool flash_emmc_AB</code></p>
<p data-sourcepos="98:4-98:46">3.2 Kontron i.MX6UL: <code data-sourcepos="98:27-98:44">ptool flash_ubi_AB</code></p>
</li>
</ol>
<p data-sourcepos="100:1-101:53" dir="auto">This command will take some time and the status will be prompted.
Afterwards you can check the eMMC device with <code data-sourcepos="101:48-101:52">lsblk</code></p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="103:1-112:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">root@kontron-mx8mm:~# lsblk | grep mmcblk0</span>
<span id="LC2" class="line" lang="plaintext">mmcblk0 179:0 0 29.1G 0 disk </span>
<span id="LC3" class="line" lang="plaintext">├─mmcblk0p1 179:1 0 50M 0 part /mnt</span>
<span id="LC4" class="line" lang="plaintext">├─mmcblk0p2 179:2 0 9.8G 0 part </span>
<span id="LC5" class="line" lang="plaintext">├─mmcblk0p3 179:3 0 9.8G 0 part </span>
<span id="LC6" class="line" lang="plaintext">└─mmcblk0p4 179:4 0 9.6G 0 part /usr/local</span>
<span id="LC7" class="line" lang="plaintext">mmcblk0boot0 179:32 0 4M 1 disk </span>
<span id="LC8" class="line" lang="plaintext">mmcblk0boot1 179:64 0 4M 1 disk</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="114:1-114:31" dir="auto">The NAND flash with <code data-sourcepos="114:22-114:30">ubinfo -a</code></p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="115:1-146:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">Volume ID: 0 (on ubi0)</span>
<span id="LC2" class="line" lang="plaintext">Type: dynamic</span>
<span id="LC3" class="line" lang="plaintext">Alignment: 1</span>
<span id="LC4" class="line" lang="plaintext">Size: 124 LEBs (31490048 bytes, 30.0 MiB)</span>
<span id="LC5" class="line" lang="plaintext">State: OK</span>
<span id="LC6" class="line" lang="plaintext">Name: boot</span>
<span id="LC7" class="line" lang="plaintext">Character device major/minor: 245:1</span>
<span id="LC8" class="line" lang="plaintext">-----------------------------------</span>
<span id="LC9" class="line" lang="plaintext">Volume ID: 1 (on ubi0)</span>
<span id="LC10" class="line" lang="plaintext">Type: dynamic</span>
<span id="LC11" class="line" lang="plaintext">Alignment: 1</span>
<span id="LC12" class="line" lang="plaintext">Size: 620 LEBs (157450240 bytes, 150.1 MiB)</span>
<span id="LC13" class="line" lang="plaintext">State: OK</span>
<span id="LC14" class="line" lang="plaintext">Name: root_A</span>
<span id="LC15" class="line" lang="plaintext">Character device major/minor: 245:2</span>
<span id="LC16" class="line" lang="plaintext">-----------------------------------</span>
<span id="LC17" class="line" lang="plaintext">Volume ID: 2 (on ubi0)</span>
<span id="LC18" class="line" lang="plaintext">Type: dynamic</span>
<span id="LC19" class="line" lang="plaintext">Alignment: 1</span>
<span id="LC20" class="line" lang="plaintext">Size: 620 LEBs (157450240 bytes, 150.1 MiB)</span>
<span id="LC21" class="line" lang="plaintext">State: OK</span>
<span id="LC22" class="line" lang="plaintext">Name: root_B</span>
<span id="LC23" class="line" lang="plaintext">Character device major/minor: 245:3</span>
<span id="LC24" class="line" lang="plaintext">-----------------------------------</span>
<span id="LC25" class="line" lang="plaintext">Volume ID: 3 (on ubi0)</span>
<span id="LC26" class="line" lang="plaintext">Type: dynamic</span>
<span id="LC27" class="line" lang="plaintext">Alignment: 1</span>
<span id="LC28" class="line" lang="plaintext">Size: 636 LEBs (161513472 bytes, 154.0 MiB)</span>
<span id="LC29" class="line" lang="plaintext">State: OK</span>
<span id="LC30" class="line" lang="plaintext">Name: data</span></code></pre>
<copy-code></copy-code>
</div>
<h4 data-sourcepos="148:1-148:35" dir="auto">
<a id="user-content-why-do-we-need-a-bootfs-image" class="anchor" href="#why-do-we-need-a-bootfs-image" aria-hidden="true"></a>Why Do we Need a Bootfs Image?</h4>
<p data-sourcepos="149:1-149:80" dir="auto">In our implementation the bootfs is mandatory. It contains the following files:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="151:1-154:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">root@kontron-mx8mm:~# ls /mnt/</span>
<span id="LC2" class="line" lang="plaintext">fitImage_active fitImage_inactive lost+found sys_active</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="156:1-159:60" dir="auto">The U-Boot looks into the file <code data-sourcepos="156:33-156:42">sys_active</code> which is the current active Rootfs partition. After an
update this file gets altered, so that partitions are switched. Also we update the kernel in the last
step and keep the old one (active/inactive) as fallback if something bad happens. Switching back after
failure is done automatically from executed U-Boot scripts.</p>
<h4 data-sourcepos="161:1-161:35" dir="auto">
<a id="user-content-why-do-we-need-a-userfs-image" class="anchor" href="#why-do-we-need-a-userfs-image" aria-hidden="true"></a>Why Do we Need a Userfs Image?</h4>
<p data-sourcepos="163:1-165:218" dir="auto">The userfs image is not mandatory but can be used to install applications and files which should persist
during a system update. If you install files during the build into <code data-sourcepos="164:69-164:78">/usr/local</code> those files will get extracted
and copied into the userfs image. You can see an example in <a data-sourcepos="165:61-165:217" href="https://git.kontron-electronics.de/sw/yocto/meta-ktn/-/blob/develop-dunfell/swupdate/recipes-core/swupdate-extra-files/swupdate-extra-files.bb">this recipe</a>.</p>
<h2 data-sourcepos="167:1-167:48" dir="auto">
<a id="user-content-perform-seamless-system-update-using-swupdate" class="anchor" href="#perform-seamless-system-update-using-swupdate" aria-hidden="true"></a>Perform Seamless System Update using SWUpdate</h2>
<p data-sourcepos="169:1-171:101" dir="auto">The advantage of having an A/B setup is that you can perform a system update without having
to boot into separate rescue/recovery system. This will make the update more comfortable in
the end because the update can be downloaded and executed in the background during normal operation.</p>
<p data-sourcepos="173:1-174:116" dir="auto">A disadvantage is the bigger memory footprint of the device. If you are interested in different
concepts and in general how it works, please read the <a data-sourcepos="174:55-174:114" href="https://sbabic.github.io/swupdate/" rel="nofollow noreferrer noopener" target="_blank">SWUpdate documentation</a>.</p>
<h3 data-sourcepos="176:1-176:30" dir="auto">
<a id="user-content-creating-an-swupdate-image" class="anchor" href="#creating-an-swupdate-image" aria-hidden="true"></a>Creating an SWUpdate Image</h3>
<p data-sourcepos="178:1-179:41" dir="auto">You need a special image type (<code data-sourcepos="178:33-178:37">*.swu</code> archive) which can be read and executed by the <code data-sourcepos="178:88-178:95">swupdate</code> tool.
This file can be created with <code data-sourcepos="179:32-179:38">bitbake</code>:</p>
<p data-sourcepos="181:1-181:24" dir="auto"><code data-sourcepos="181:3-181:22">bitbake swupdate-img</code></p>
<p data-sourcepos="183:1-183:29" dir="auto">or with full qt environment:</p>
<p data-sourcepos="185:1-185:27" dir="auto"><code data-sourcepos="185:3-185:25">bitbake swupdate-img-qt</code></p>
<p data-sourcepos="187:1-188:59" dir="auto">This will create an archive containing our default image <code data-sourcepos="187:59-187:73">ìmage-ktn(-qt)</code> and includes further files
like <code data-sourcepos="188:7-188:20">sw-description</code> which <code data-sourcepos="188:30-188:37">swupdate</code> can use and install.</p>
<h3 data-sourcepos="190:1-190:44" dir="auto">
<a id="user-content-install-update-with-integrated-webserver" class="anchor" href="#install-update-with-integrated-webserver" aria-hidden="true"></a>Install Update with Integrated Webserver</h3>
<p data-sourcepos="192:1-195:80" dir="auto">The default image starts a webserver provided by <code data-sourcepos="192:51-192:58">swupdate</code>. It will listen for connections on
<code data-sourcepos="193:2-193:23">http://$DEVICE_IP:8080</code>. The device will make a DHCP request and fallback to 192.168.1.11 if no
DHCP server is available.
With the webserver you can download and install a <code data-sourcepos="195:52-195:56">*.swu</code> image onto the device.</p>
<hr data-sourcepos="197:1-197:3">
<p data-sourcepos="198:1-198:8" dir="auto"><strong data-sourcepos="198:1-198:8">Hint</strong></p>
<p data-sourcepos="200:1-202:137" dir="auto">This is just an example of a quite handy feature of <code data-sourcepos="200:54-200:61">swupdate</code>. In the field you probably want to download
the update from an external webserver or from an USB drive. Please look at the file <code data-sourcepos="201:86-201:126">/usr/lib/swupdate/conf.d/09-swupdate-args</code>
how <code data-sourcepos="202:6-202:13">swupdate</code> is invoked. Further parameters are described in the official <a data-sourcepos="202:77-202:136" href="https://sbabic.github.io/swupdate/" rel="nofollow noreferrer noopener" target="_blank">SWUpdate documentation</a>.</p>
<hr data-sourcepos="204:1-205:0">
<p data-sourcepos="206:1-206:93" dir="auto">After installing you can reboot the device which will then start into the updated partition.</p>2022-05-04T07:18:54ZMaximilian Adducchiohttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/rel_feature%2Fci-improvements_0.0.0rel_feature/ci-improvements_0.0.0Frieder Schrempfhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/rel_master_4.0.0-betarel_master_4.0.0-betaVersion 4.0.0-betaFrieder Schrempfhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/rel_zeus_3.0.0-alpha3rel_zeus_3.0.0-alpha3Version 3.0.0-alpha3Frieder Schrempfhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/rel_zeus_3.0.0-alpha2rel_zeus_3.0.0-alpha2Frieder Schrempfhttps://git.kontron-electronics.de/sw/yocto/build-ktn-imx/-/tags/rel_zeus_3.0.0-alpharel_zeus_3.0.0-alphaFrieder Schrempf