Spaces
Browse
Pages
Blog
Labels
Space Operations
Quick Search
Help
Online Help
Keyboard Shortcuts
Feed Builder
What’s new
Available Gadgets
About Embedian
Log In
Sign Up
Yocto/Open Embedded on SMARC
Yocto/Open Embedded on SMARC
Copy Page
You are not logged in. Any changes you make will be marked as
anonymous
. You may want to
Log In
if you already have an account. You can also
Sign Up
for a new account.
This page is being edited by
.
image-effects
image-attributes
search
attachments
weblink
advanced
Paragraph
Paragraph
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Preformatted
Quote
Bold
Italic
Underline
Colour picker
More colours
Formatting
Strikethrough
Subscript
Superscript
Monospace
Clear Formatting
Bullet list
Numbered list
Task list
Outdent
Indent
Align left
Align center
Align right
Page Layout
Link
Table
Insert
Insert Content
Image
Link
Attachment
Symbol
Emoticon
Markup
Horizontal rule
Task List
Insert Macro
Evernote
User Mention
JIRA Issue/Filter
Info
Status
Gallery
Table of Contents
Other Macros
Page Layout
No Layout
Two column (simple)
Two column (simple, left sidebar)
Two column (simple, right sidebar)
Three column (simple)
Two column
Two column (left sidebar)
Two column (right sidebar)
Three column
Three column (left and right sidebars)
Undo
Redo
Find/Replace
Keyboard Shortcuts Help
<p><img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e3BhZ2V0cmVlOnJldmVyc2U9dHJ1ZXxleGNlcnB0PXRydWV9&locale=en_GB&version=2" data-macro-name="pagetree" data-macro-parameters="excerpt=true|reverse=true"></p><table class="wysiwyg-macro" data-macro-name="panel" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e3BhbmVsfQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><strong>On this page:</strong></p><p><img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e3RvYzpzdHlsZT1zcXVhcmV9&locale=en_GB&version=2" data-macro-name="toc" data-macro-parameters="style=square"></p></td></tr></table><h1><span style="color: rgb(0,51,102);">Building NXP/Embedian’s Yocto Kirkstone BSP Distribution</span></h1><p><span style="color: rgb(0,51,102);"><strong>Eric Lee</strong></span></p><p>version 1.0a, 08/08/2023</p><h1><span style="color: rgb(0,51,102);">Introduction</span></h1><hr /><p><span style="color: rgb(0,51,102);"> </span></p><div class="paragraph"><p>This document describes how Embedian builds a customized version of NXP’s i.MX8M (8MQ) official Yocto Kirkstone BSP release for Embedian's <em>SMARC-iMX8M</em> product platform. The approach is to pull from Embedian's public facing GIT repository and build that using bitbake. The reason why we use this approach is that it allows co-development. The build output is comprised of binary images, feed packages, and an SDK for <em>SMARC-iMX8M</em> specific development.</p></div><p><span style="color: rgb(0,51,102);"> </span></p><div class="paragraph"><p>NXP makes their i.MX series official bsp build scripts available via the following GIT repository:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);"><a href="https://github.com/nxp-imx/meta-imx"><span style="color: rgb(0,51,102);">https://github.com/nxp-imx/meta-imx</span></a>/meta-bsp</span><a href="git://git.freescale.com/imx/meta-fsl-bsp-release"><br /></a></code></p></td></tr></table><p> </p><div class="paragraph"><span style="color: rgb(0,0,0);">Freescale community BSP release build script is available via the following repository:</span><span style="color: rgb(0,0,0);"> </span></div><div class="paragraph"><p> </p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);"><a href="https://github.com/Freescale/meta-freescale-distro"><span style="color: rgb(0,51,102);">https://github.com/Freescale/meta-freescale-distro</span></a></span><a href="git://git.freescale.com/imx/fsl-arm-yocto-bsp.git"><br /></a></code></p></td></tr></table><p><span style="color: rgb(0,0,0);">It is this repository that actually pulls in the <span style="color: rgb(0,51,102);">meta-imx/meta-bsp</span></span><span style="color: rgb(0,0,0);"> project to perform the Linux BSP builds for NXP's i.MX8M ARM Cortext-A53 chips. </span><span style="color: rgb(0,0,0);"> </span></p><h1><span style="color: rgb(0,51,102);">Generating SSH Keys</span></h1><hr /><p><span style="color: rgb(0,0,0);"> </span>We recommend you use SSH keys to establish a secure connection between your computer and Embedian Gitlab server. The steps below will walk you through generating an SSH key and then adding the public key to our Gitlab account.<span style="color: rgb(0,0,0);"> </span></p><h3><span style="color: rgb(0,51,102);">Step 1. Check for SSH keys</span></h3><hr /><p>First, we need to check for existing ssh keys on your computer. Open up <span class="platform-windows">Git Bash</span> and run:</p><table class="wysiwyg-macro" data-macro-name="code" data-macro-parameters="language=cpp|theme=Confluence" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6dGhlbWU9Q29uZmx1ZW5jZXxsYW5ndWFnZT1jcHB9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>$ cd ~/.ssh $ ls # Lists the files in your .ssh directory</pre></td></tr></table><p>Check the directory listing to see if you have a file named either <code>id_rsa.pub</code> or <code>id_dsa.pub</code>. If you don't have either of those files go to <strong>step 2</strong>. Otherwise, you already have an existing keypair, and you can skip to <strong>step 3</strong>.</p><h3><span style="color: rgb(0,51,102);">Step 2. Generate a new SSH key</span></h3><hr /><p>To generate a new SSH key, enter the code below. We want the default settings so when asked to enter a file in which to save the key, just press enter.</p><table class="wysiwyg-macro" data-macro-name="code" data-macro-parameters="language=cpp|theme=Confluence" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6dGhlbWU9Q29uZmx1ZW5jZXxsYW5ndWFnZT1jcHB9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>$ ssh-keygen -t ed25519 -C "your_email@example.com" Generating public/private ed25519 key pair. Enter file in which to save the key (/home/eric/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/eric/.ssh/id_ed25519 Your public key has been saved in /home/eric/.ssh/id_ed25519.pub The key fingerprint is: SHA256:SS9opo/QHxT2cCwlX+ulhn3ZUVdhdG88vvliOVHJ/6c your_email@example.com The key's randomart image is: +--[ED25519 256]--+ | . . . .+B| | = . . .o+| | = = . . o.=| | . O * o o.=o| | = S * o .o.| | . = o . . +| | . o . =.| | . + . = +| | . o .E+o| +----[SHA256]-----+</pre></td></tr></table><h3><span style="color: rgb(0,51,102);">Step 3. Add your SSH key to Embedian Gitlab Server</span></h3><hr /><p>Copy the key to your clipboard.</p><table class="wysiwyg-macro" data-macro-name="code" data-macro-parameters="language=cpp|theme=Confluence" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6dGhlbWU9Q29uZmx1ZW5jZXxsYW5ndWFnZT1jcHB9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>$ cat ~/.ssh/id_ed25519 ssh-rsa AAAAB3NzaC1yc2EAAABDAQABAAABAQDQUEnh8uGpfxaZVU6+uE4bsDrs/tEE5/BPW7jMAxak 6qgOh6nUrQGBWS+VxMM2un3KzwvLRJSj8G4TnTK2CSmlBvR+X8ZeXNTyAdaDxULs/StVhH+QRtFEGy4o iMIzvIlTyORY89jzhIsgZzwr01nqoSeWWASd+59JWtFjVy0nwVNVtbek7NfuIGGAPaijO5Wnshr2uChB Pk8ScGjQ3z4VqNXP6CWhCXTqIk7EQl7yX2GKd6FgEFrzae+5Jf63Xm8g6abbE3ytCrMT/jYy5OOj2XSg 6jlxSFnKcONAcfMTWkTXeG/OgeGeG5kZdtqryRtOlGmOeuQe1dd3I+Zz3JyT your_email@example.c om</pre></td></tr></table><p><span style="color: rgb(51,51,51);">Go to </span><a href="http://git.embedian.com/" style="font-size: 14.0px;">Embedian Git Server</a><span style="color: rgb(51,51,51);">. At </span><span style="color: rgb(0,51,102);">Profile Setting --> SSH Keys --> Add SSH Key </span></p><p>Paste your public key and press "<span style="color: rgb(0,51,102);">Add Key</span>" and your are done.</p><h1><span style="color: rgb(0,51,102);">Overview of the</span> <em><span style="color: rgb(128,128,128);">meta-embedian</span></em> <span style="color: rgb(0,51,102);">Yocto Layer</span></h1><hr /><p><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">The supplied </span>meta-embedian<span style="color: rgb(0,0,0);"> Yocto compliant layer has the following organization:</span></span></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);">. <br />|-- conf <br />| |-- layer.conf <br />| |-- machine<br />| |-- include<br />| | |-- imx8mp-emb.inc<br />| |-- pitximx8mp2g.conf<br />| |-- pitximx8mp4g.conf<br />| |-- pitximx8mp6g.conf<br />| |-- smarcimx8qm8g.conf<br />| |-- smarcimx8qm4g.conf<br />| |-- smarcimx8mp6g.conf<br />| |-- smarcimx8mp4g.conf<br />| |-- smarcimx8mp2g.conf<br />| |-- smarcimx8mq4g.conf<br />| |-- smarcimx8mq2g.conf<br />| |-- smarcimx8mm4g.conf<br />| |-- smarcimx8mm2g.conf<br />| |-- smarcfimx7d2g.conf<br />| |-- smarcfimx7d.conf<br />| |-- smarcfimx7s.conf<br />| |-- smarcfimx6qp2g.conf<br />| |-- smarcfimx6qp1g.conf<br />| |-- smarcfimx6q2g.conf<br />| |-- smarcfimx6q1g.conf<br />| |-- smarcfimx6dl1g.conf<br />| | `-- smarcfimx6solo.conf<br />|-- README<br />|-- recipes-bsp <br />| |-- u-boot <br />| `-- u-boot-imx_2022.04.bb<br />| |-- imx-atf<br />| `-- imx-atf_2.6.bbappend<br />| | |-- imx-atf<br />| | | `-- imx8mm-atf-uart4.patch<br />| |-- imx-sc-firmware<br />| `-- imx-sc-firmware_%.bbappend<br />| | |-- imx-sc-firmware<br />| | | |-- mx8qm-smarc-8g-scfw-tcm.bin<br />| | | `-- mx8qm-smarc-4g-scfw-tcm.bin<br />| |-- alsa-state<br />| | |-- alsa-state<br />| | | `-- asound.state<br />| `-- alsa-state.bbappend<br />| |-- pm-utils<br />| `-- pm-utils_%.bbappend<br />| |-- imx-mkimage<br />| `-- imx-boot_1.0.bbappend</span><span style="color: rgb(0,51,102);"><br />|-- recipes-core<br />| |-- busybox<br />| `-- busybox_%.bbappend<br />| | |-- busybox<br />| | | |-- ftpget.cfg<br />| | | `-- defconfig<br />| |-- base-files<br />| `-- base-files_%.bbappend<br />| | |-- base-files<br />| | | |-- issue<br />| | | `-- issue.net<br />| |-- systemd<br />| `-- systemd-serialgetty.bbappend<br />| | |-- systemd-serialgetty<br />| | | |-- disable-serialgetty.service<br />| | | `-- disable-serialgetty.sh<br />| |-- packagegroups<br />| `-- packagegroup-core-tools-testapps.bbappend<br />| |-- psplash<br />| `-- psplash_git.bbappend<br />| | |-- files<br />| | | |-- 0001-psplash-Change-colors-for-the-Embedian-Yocto-logo.patch<br />| | | |-- psplash-poky.png<br />| | | `-- psplash-bar.png<br />| |-- udev<br />| | |-- files<br />| | | | `-- usb-power.rules <br />| `-- udev-rules-imx.bbappend</span><span style="color: rgb(0,51,102);"><br />|-- recipes-kernel <br />| |-- linux<br />| `-- linux-imx.bb<br />`-- scripts <br />| `-- emb_mk_yocto_sdcard<br /></span></code></p></td></tr></table><p><strong><span style="color: rgb(0,51,102);"><span style="color: rgb(82,123,189);"><br />Notes on </span><em>meta-embedian</em><span style="color: rgb(82,123,189);"> layer content</span></span></strong></p><p><span style="color: rgb(51,102,255);"><code>conf/machine/*</code></span></p><p style="margin-left: 30.0px;">This folder contains the machine definitions for all Embedian's platform and backup repository in Embedian. These select the associated kernel, kernel config, u-boot, u-boot config, and tar.bz2 image settings.</p><p><span style="color: rgb(51,102,255);"><code>recipes-bsp/u-boot/*</code></span></p><p style="margin-left: 30.0px;">This folder contains recipes used to build DAS U-boot for <em><span style="color: rgb(0,51,102);">all Embedian's</span></em> platform.</p><p><span style="color: rgb(51,102,255);"><code>recipes-bsp/imx-atf/*</code></span></p><p style="margin-left: 30.0px;">This folder contains recipes used to enable console port for <em><span style="color: rgb(0,51,102);">Embedian's</span></em> <em>i.MX8MM</em> platform.</p><p><span style="color: rgb(51,102,255);"><code>recipes-bsp/imx-sc-firmware/*</code></span></p><p style="margin-left: 30.0px;">This folder contains system control firmware binary for<span style="color: rgb(0,51,102);"> <em>Embedian's i.MX8QM</em></span> platform.</p><p><span style="color: rgb(51,102,255);">recipes-bsp/alsa-state/*</span></p><p style="margin-left: 30.0px;">This folder contains sgtl5000 sound chip default state for<span style="color: rgb(0,51,102);"> <em>all Embedian's</em></span> platform.</p><p><span style="color: rgb(51,102,255);"><code>recipes-bsp/imx-mkimage/*</code></span></p><p style="margin-left: 30.0px;">This folder contains imx-mkimage tool for<span style="color: rgb(0,51,102);"> <em>Embedian's i.MX8MQ, i.MX8MM, i.MX8QM, i.MX8MP</em></span> platform.</p><p><span style="color: rgb(51,102,255);"><code>recipes-core/busybox/*</code></span></p><p style="margin-left: 30.0px;">This folder remove telnetd from bysybox for<span style="color: rgb(0,51,102);"> <em>all Embedian's</em></span> platform. <span style="color: rgb(51,102,255);"> </span></p><p><span style="color: rgb(51,102,255);"><code>recipes-core/psplash/*</code></span><span style="color: rgb(51,102,255);"> </span></p><p style="margin-left: 30.0px;">This folder customized Yocto boot psplash for <span style="color: rgb(0,51,102);"><em>all Embedian's</em></span> platform.</p><p><code><span style="color: rgb(51,102,255);">recipes-kernel/linux/*</span></code></p><p style="margin-left: 30.0px;">Contains the recipes needed to build for all <em>Embedian's</em> platform Linux kernels.</p><h1><span style="color: rgb(0,51,102);">Setting Up the Tools and Build Environment</span></h1><hr /><p><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">To build the latest NXP<em> i.MX8M </em>meta-bsp, you first need an <span style="color: rgb(255,0,0);">Ubuntu 20.04</span> or <span style="color: rgb(255,0,0);">22.04 </span>LTS installation. Since bitbake does not accept building images using root privileges, please <strong>do not</strong> login as a root user when performing the instructions in this section. </span></span></p><p><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">Once you have Ubuntu 20.04 or 22.04 LTS running, install the additional required support packages using the following console command:</span></span></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);">$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm rsync curl zstd lz4 libssl-dev pv device-tree-compiler libghc-gnutls-dev</span></code></p></td></tr></table><p> </p><p>To get the BSP you need to have 'repo' installed and use it as:</p><p>Install the 'repo' utility:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);">$ mkdir ~/bin<br />$ curl <span class="nolink"><span class="nolink">https://storage.googleapis.com/git-repo-downloads/repo</span></span> > ~/bin/repo > ~/bin/repo<br />$ chmod a+x ~/bin/repo<br />$ PATH=${PATH}:~/bin </span></code></p></td></tr></table><div class="paragraph"><span style="color: rgb(0,0,0);"><br /></span></div><div class="paragraph"><span style="color: rgb(0,0,0);">Download the BSP Yocto Project Environment.<br /><br /></span></div><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);"><code>$ mkdir ~/kirkstone-release</code></span></p><p><span style="color: rgb(0,51,102);">$ <code>cd ~/kirkstone-release</code></span></p><p><span style="color: rgb(0,51,102);"><code>$ repo init -u <span class="nolink"><span class="nolink">https://github.com/nxp-imx/imx-manifest</span></span> -b imx-linux-kirkstone -m imx-5.15.71-2.2.0.xml</code></span></p><p><span style="color: rgb(0,51,102);"><code>$ repo sync</code></span></p></td></tr></table><div class="paragraph"><span style="color: rgb(0,0,0);"><br /></span></div><div class="paragraph"><span style="color: rgb(0,0,0);">Download the Embedian Yocto build script and meta layer.</span></div><div class="paragraph"><p> </p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);">$ wget ftp://ftp.embedian.com/public/dev/minfs/kirkstone/emb-imx-setup-release.sh<a href="ftp://ftp.embedian.com/public/dev/minfs/smarc-imx8m-bsp-release/fsl-smarcimx8m-sumo-setup-release.sh" /></span></code></p><p><code><span style="color: rgb(0,51,102);">$ chmod 444 emb-imx-setup-release.sh</span></code></p><p><code><a href="ftp://ftp.embedian.com/public/dev/minfs/emb-fsl-bsp-release/emb-fsl-setup-release.sh"><span style="color: rgb(0,51,102);">$ c</span></a><span style="color: rgb(0,51,102);">d sources</span></code></p><p><code><span style="color: rgb(0,51,102);">$ git clone <a href="mailto:git@git.embedian">git@git.embedian</a>.com:developer/meta-embedian-bsp.git meta-embedian -b kirtstone-5.15.71_2.2.0</span></code></p><p><code><span style="color: rgb(0,51,102);">$ cd ~/kirkstone-release</span></code></p><p><code><span style="color: rgb(0,51,102);">$ DISTRO=fsl-imx-xwayland MACHINE=smarcimx8mq4g source emb-imx-setup-release.sh -b build-xwayland </span></code></p></td></tr></table><pre class="paragraph"><span style="color: rgb(0,0,0);">Choose "y" to accept EULA.</span></pre><pre class="paragraph"><span style="color: rgb(0,0,0);">This script will create and bring you to </span>~/kirkstone-release/build-xwayland directory.</pre><div class="paragraph"><table class="wysiwyg-macro" data-macro-name="note" data-macro-parameters="title=Note" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGU6dGl0bGU9Tm90ZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code>The last line of the above script</code></p><p><code>$ DISTRO=<distro name> MACHINE=<machine name> source <span style="color: rgb(0,51,102);">emb-imx-setup-release.sh</span> -b <build dir><br /></code></p><ol><li><code><distro name> </code><ul><li><code>fsl-imx-x11 - Only X11 graphics</code></li><li><p><code>fsl-imx-wayland - Wayland weston graphics</code></p></li><li><p><code>fsl-imx-xwayland - Wayland graphics and X11. X11 applications using EGL are not supported</code></p></li><li><p><code>fsl-imx-fb - Frame Buffer graphics - no X11 or Wayland (<span style="color: rgb(153,51,0);">Frame Buffer DISTRO is not supported on i.MX8M).</span></code></p></li></ul></li><li><p><code><machine name></code></p><ul><li><p><code><em>smarcimx8mq2g</em> - if your board is quad lite or quad core i.MX8M and 2GB LPDDR4.</code></p></li><li><p><code><em>smarcimx8mq4g</em> - if your board is quad lite or quad core i.MX8M and 4GB LPDDR4.</code></p></li></ul></li></ol><p><code><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">The default console debug port is</span> <em>SER3.</em></span></code></p><p><code><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">In this document, we will use</span> <em>smarcimx8mq4g</em> <span style="color: rgb(0,0,0);">as the example of machine name. Users need to change different machine name if you have different SMARC card variants.</span></span></code></p></td></tr></table><span style="color: rgb(0,0,0);"> </span><div class="paragraph"><span style="color: rgb(0,51,102);">Building the target platforms</span></div><div class="paragraph"><hr /><span style="color: rgb(0,0,0);"> </span><span style="color: rgb(0,0,0);">To build Embedian/Freescale Yocto BSP, </span><span style="color: rgb(0,0,0);">use the following commands:</span></div><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);"><code>$ MACHINE=smarcimx8mq4g bitbake -k fsl-image-qt6-validation-imx<em><br /></em>or<br />$ MACHINE=smarcimx8mq4g bitbake -k fsl-image-validation-imx</code></span></p></td></tr></table><div class="paragraph"><p><span style="color: rgb(0,51,102);"><br /></span></p><table class="wysiwyg-macro" data-macro-name="note" data-macro-parameters="title=Note" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGU6dGl0bGU9Tm90ZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code>fsl-image-validation-imx provides a gui image without QT6.</code> </p><p><code>fsl-image-qt6-validation-imx provides a Qt6 image for X11, wayland or FB backends depending on your distro name.<br /><br /></code></p><p><code>If your machine name is smarcimx8mq2g and your gui image is without QT6 , the following command gives you as an example.</code></p><p><span style="color: rgb(0,51,102);"><code>$ MACHINE=smarcimx8mq2g bitbake -k fsl-image-validation-imx</code></span></p><p><code>The first build takes time. </code></p></td></tr></table><p> </p></div><div class="paragraph"><div class="paragraph"><pre>Once it done, you can find all required images under <span style="color: rgb(0,51,102);">~/kirkstone</span>-release/<build directory>/tmp/deploy/images/<machine name>/</pre><p>You may want to build programs that aren’t installed into a root file system so you can make them available via a feed site (described below.) To do this you can build the package directly and then build the package named <span style="color: rgb(0,51,102);">package-index</span> to add the new package to the feed site.</p></div><p><span style="color: rgb(0,0,0);"> </span></p><div class="paragraph"><p>The following example builds the <span style="color: rgb(0,51,102);">tcpdump</span> program and makes it available on the feed site:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);"><code>$ MACHINE=smarcimx8mq4g bitbake tcpdump </code></span><br /><span style="color: rgb(0,51,102);"><code>$ MACHINE=smarcimx8mq4g bitbake package-index</code></span></p></td></tr></table><div class="paragraph"><span style="color: rgb(0,0,0);"><br /></span></div><div class="paragraph"><span style="color: rgb(0,0,0);">Once the build(s) are completed you’ll find the resulting images, rpm and licenses in folder<em> </em></span><em><code><span style="color: rgb(0,51,102);">~/kirkstone-release/<build directory>/tmp/deploy</span></code></em><span style="color: rgb(0,0,0);">.</span></div><p><span style="color: rgb(0,51,102);"><code><span style="color: rgb(0,51,0);">deploy/images/<machine name>/*</span> </code></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">This folder contains the binary images for the root file system and the Embedian <em>SMARC-iMX8M</em> specific version of the boot file, Image and device tree file. Specifically the images are:</span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/<span style="color: rgb(0,51,102);"><code><span style="color: rgb(0,51,0);">imx-boot-<machine name>-sd.bin-flash_evk</span></code></span></span></code></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">This is <span>boot file binary for </span><em>SMARC-iMX8M</em> with HDMI</span></span></p><p><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"> </span></span><span style="color: rgb(0,51,102);">d<code>eploy/images/</code></span><span style="color: rgb(0,51,0);"><code><machine name>/</code><span style="color: rgb(0,51,102);"><code><span style="color: rgb(0,51,0);">imx-boot-<machine name>-sd.bin-flash_evk_no_hdmi</span></code></span></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">This is boot file binary for <em>SMARC-iMX8M</em> without HDMI</span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/<span style="color: rgb(0,51,102);"><code><span style="color: rgb(0,51,0);">imx-boot-<machine name>-sd.bin-flash_dp_evk</span></code></span></span></code></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">This is boot file binary for <em>SMARC-iMX8M</em> with DisplayPort</span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/</span>Image</code></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"><span style="color: rgb(34,34,34);">The kernel Image for <em>SMARC-iMX8M</em>.</span></span></span><span style="color: rgb(0,0,0);"> </span><span style="color: rgb(0,51,102);"> </span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/<device tee file></span></code></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,0,0);">Selecting display configuration is a matter of selecting an appropriate DTB file under <span style="color: rgb(0,51,102);">deploy/images/</span><span style="color: rgb(0,51,0);"><machine name>/<device tee file></span></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,0,0);">All available DTB files are listed in the table below.</span></p><p><span style="color: rgb(0,0,0);"> </span></p><table class="confluenceTable"><tbody><tr><th style="text-align: center;" class="confluenceTh"><span style="color: rgb(0,51,102);">DTB File Name</span></th><th style="text-align: center;" class="confluenceTh"><span style="color: rgb(0,51,102);">Description</span></th></tr><tr><td class="confluenceTd"><code><span style="color: rgb(0,51,102);"><em>imx8mq-smarc.dtb</em></span></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for no display configuration.</span></td></tr><tr><td class="confluenceTd"><code><em><span style="color: rgb(0,51,102);">imx8mq-smarc-hdmi.dtb</span></em></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for HDMI display configuration (DCSS).</span></td></tr><tr><td class="confluenceTd"><code><span style="color: rgb(0,51,102);"><em>imx8mq-smarc-dp.dtb</em></span></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for Display Port (DP) display configuration (DCSS).</span></td></tr><tr><td class="confluenceTd"><code><span style="color: rgb(0,51,102);"><em>imx8mq-smarc-lcdif-lvds.dtb</em></span></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for LCDIF LVDS display configuration.</span></td></tr><tr><td class="confluenceTd"><code><em><span style="color: rgb(0,51,102);">imx8mq-smarc-dcss-lvds.dtb</span></em></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for DCSS LVDS display configuration.</span></td></tr><tr><td class="confluenceTd"><code><em><span style="color: rgb(0,51,102);">imx8mq-smarc-dual-display.dtb</span></em></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for dual LVDS+HDMI display configuration. </span></td></tr></tbody></table><p><span style="color: rgb(0,0,0);"><br /></span></p><p><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"><code><span style="color: rgb(0,51,102);">deploy/images/<span style="color: rgb(0,51,0);"><machine name>/fsl-image-validation-imx</span>-<machine name>.*</span></code></span></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">Embedian root file system images for software development on Embedian’s <em>SMARC-iMX8M</em> platforms without QT6.</span></span></p><p><code><span style="color: rgb(0,51,102);">deploy/images/</span><span style="color: rgb(0,51,0);"><machine name>/fsl-image-qt6-validation-imx-<machine name></span><span style="color: rgb(0,51,102);">.*</span></code></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">Embedian root file system images for software development on Embedian’s <em>SMARC-iMX8M</em> with QT6.</span></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,0);"><br />deploy/deb/*</span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,0);"> </span><span style="color: rgb(0,0,0);">This folder contains all the packages used to construct the root file system images. They are in </span><span style="color: rgb(0,0,0);"><span style="color: rgb(0,51,102);"><strong><em>deb</em></strong></span></span><span style="color: rgb(0,0,0);"> format (similar format to Debian packages) and can be dynamically installed on the target platform via a properly constructed </span><em>feed</em><span style="color: rgb(0,0,0);"> file. Here is an example of the feed file (named base- feeds</span><span style="color: rgb(0,51,102);">.conf</span><span style="color: rgb(0,0,0);">) that is used internally at Embedian to install upgrades onto a </span><span style="color: rgb(0,0,0);"><span style="color: rgb(0,51,102);"><strong><em>SMARC-iMX8M</em></strong></span></span><span style="color: rgb(0,0,0);"> platform without reflashing the file system:</span></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);">src/gz all http://<ip address>/al<a href="http://www.embedian.com/core-sdk/smarct437x/processor-sdk-02.00.00.00/deploy/ipk/all"><span style="color: rgb(0,51,102);">l</span></a></span></code></p><p><code><span style="color: rgb(0,51,102);">src/gz armv8a http://<ip address>/armv8a</span></code></p><p><code><span style="color: rgb(0,51,102);">src/gz armv8a-mx8m http://<ip addresss>/armv8a-mx8m</span></code></p><p><code><span style="color: rgb(0,51,102);">src/gz smarcimx8mq4g <span class="nolink"><span class="nolink">http://<ip addresss></span></span>/smarcimx8mq4g</span></code></p></td></tr></table><div class="paragraph"><span style="color: rgb(0,51,0);"><br /></span></div><div class="paragraph"><span style="color: rgb(0,51,0);"><code>deploy/licenses/* </code></span></div><div class="paragraph" style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">A database of all licenses used in all packages built for the system.</span></span></div><h1><span style="color: rgb(0,51,102);">Setup SD Card Manually</span></h1><hr /><p>For these instruction, we are assuming: DISK=/dev/mmcblk0, "lsblk" is very useful for determining the device id.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre>$ export DISK=/dev/mmcblk0</pre></td></tr></table><p>Erase SD card:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);">$ <code class="java plain">sudo dd </code><code class="java keyword">if</code><code class="java plain">=/dev/zero of=${DISK} bs=1M count=</code><code class="java value">160</code></span></p></td></tr></table><p>Create Partition Layout: Leave 1MB offset for boot file.</p><p><strong>With util-linux v2.26, sfdisk was rewritten and is now based on libfdisk</strong>.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=sfdisk" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1zZmRpc2t9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo sfdisk --version</code></span></div><div class="line number2 index1 alt1"><code><span style="color: rgb(0,51,102);">sfdisk from util-linux 2.34</span></code></div></td></tr></table><p>Create Partitions:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="title=sfdisk >\=2.26.x" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86dGl0bGU9c2ZkaXNrID49Mi4yNi54fQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code><span style="color: rgb(0,51,102);">$ sudo sfdisk ${DISK} <<-__EOF__</span></code><br /><code><span style="color: rgb(0,51,102);">2M,48M,0x83,*</span></code></p><pre><code><span style="color: rgb(0,51,102);">50M,,,</span></code></pre><pre><code><span style="color: rgb(0,51,102);">__EOF__</span></code></pre></td></tr></table><p><br />Format Partitions:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(153,51,0);"><code class="java keyword">for</code><code class="java plain">: DISK=/dev/mmcblk0</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkfs.vfat -F </code><code class="java value">16</code> <code class="java plain">${DISK}p1 -n boot</code></span></div><div class="line number3 index2 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkfs.ext4 ${DISK}p2 -L rootfs</code></span></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><span style="color: rgb(128,0,0);"><code class="java keyword">for</code><code class="java plain">: DISK=/dev/sdX</code></span></div><div class="line number6 index5 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkfs.vfat -F </code><code class="java value">16</code> <code class="java plain">${DISK}</code><code class="java value">1</code> <code class="java plain">-n boot</code></span></div><div class="line number7 index6 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkfs.ext4 ${DISK}</code><code class="java value">2</code> <code class="java plain">-L rootfs</code></span></div></td></tr></table><p>Mount Partitions:</p><p><strong>On some systems, these partitions may be auto-mounted...</strong></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkdir -p /media/boot/</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkdir -p /media/rootfs/</code></span></div><div class="line number3 index2 alt2"> </div><div class="line number4 index3 alt1"><span style="color: rgb(128,0,0);"><code class="java keyword">for</code><code class="java plain">: DISK=/dev/mmcblk0</code></span></div><div class="line number5 index4 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}p1 /media/boot/</code></span></div><div class="line number6 index5 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}p2 /media/rootfs/</code></span></div><div class="line number7 index6 alt2"><code class="java plain"> </code></div><div class="line number8 index7 alt1"><span style="color: rgb(128,0,0);"><code class="java keyword">for</code><code class="java plain">: DISK=/dev/sdX</code></span></div><div class="line number9 index8 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}</code><code class="java value">1</code> <code class="java plain">/media/boot/</code></span></div><div class="line number10 index9 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}</code><code class="java value">2</code> <code class="java plain">/media/rootfs/</code></span></div></td></tr></table><h3><span style="color: rgb(0,51,102);">Install Boot File (<code><span style="color: rgb(255,0,0);">i</span><span style="color: rgb(255,0,0);">mx-boot-<machine name>-sd.bin-flash_evk</span></code></span><span style="color: rgb(0,51,102);">)</span></h3><p>Boot file is factory default flashed at on-module eMMC flash.</p><p style="margin-left: 30.0px;"><strong>If on-module eMMC Flash is empty</strong></p><p style="margin-left: 30.0px;">In some cases, when eMMC flash is erased or the u-boot is under development, we need a way to boot from SD card first. Users need to shunt cross the <strong><em><span style="color: rgb(0,51,102);">TEST#</span></em></strong> pin to ground. In this way, <em>SMARC-iMX8M</em> will always boot up from SD card. </p><p style="margin-left: 30.0px;">Fuse flash.bin to the SD card. </p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-L30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><hr /></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);">$ </span><em>sudo dd if=<boot file> of=${DISK} bs=1024 seek=33</em></div></td></tr></table><p style="margin-left: 30.0px;"><strong>If on-module eMMC Flash is not empty</strong></p><p style="margin-left: 30.0px;">The <em><boot file></em> is pre-installed in on-module eMMC flash at factory default. SMARC-iMX8M is designed to always boot up from on-module eMMC flash and to load Image, device tree blob and root file systems based on the setting of <em>BOOT_SEL</em>. If users need to fuse your own flash.bin or perform u-boot upgrade. This section will instruct you how to do that.</p><p style="margin-left: 30.0px;">Copy <boot file> to the second partition home directory of your SD card and boot into SD card. Go to home directory and you should see flash.bin file. </p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-L30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><hr /></div><div class="line number2 index1 alt1"><code>$ sudo cp -v <boot file> /media/rootfs/home/root/</code></div></td></tr></table><p style="margin-left: 30.0px;">Fuse <boot file> to the on-module eMMC flash. (The eMMC flash is emulated as /dev/mmcblk0 in SMARC-iMX8M)</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=home directory" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1ob21lIGRpcmVjdG9yeX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><p class="line number1 index0 alt2"><code><span style="color: rgb(0,51,102);"><em>$ sudo dd if=<boot file> of=/dev/mmcblk0 bs=1024 seek=33</em></span></code></p></td></tr></table><table class="wysiwyg-macro" data-macro-name="note" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><ol><li><p><code><em>imx-boot-smarcimx8mq4g-sd.bin-flash_dp_evk</em></code> is boot file with DisplayPort, <code><em><span style="color: rgb(0,51,102);">imx-boot-smarcimx8mq4g-sd.bin-flash_evk</span></em></code> is boot file with HDMI and <em><code><span style="color: rgb(0,51,102);">imx-boot-smarcimx8mq4g-sd.bin-flash_evk_no_hdmi</span> </code></em>is boot file without any displays.</p></li><li><span style="color: rgb(0,0,0);">If your u-boot hasn't been finalized and still under development, it is recommended to shunt cross the test pin and boot directly from SD card first. Once your u-boot is fully tested and finalized, you can <span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"> fuse your <boot file> to eMMC flash.</span></span></span></li><li><span style="color: rgb(0,0,0);">When <em>TEST#</em> pin of SMARC-iMX8M is not shunt crossed, it will always boot up from on-module eMMC flash. U-boot will read the <em>BOOT_SEL</em> configuration and determine where it should load Image and device tree blob. When TEST# is shunt crossed (pull low), it will always boot up from SD card.</span></li></ol></td></tr></table><h3><span style="color: rgb(0,51,102);">uEnv.txt based bootscript</span></h3><p>Create "uEnv.txt" boot script: ($ vim uEnv.txt)</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/uEnv.txt" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3VFbnYudHh0fQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><p><code>optargs="video=HDMI-A-1:1920x1080-32@60 consoleblank=0"</code><br /><code>#optargs="video=HDMI-A-1:3840x2160-32@30 consoleblank=0"</code><br /><code>#optargs="video=HDMI-A-1:3840x2160-32@60 consoleblank=0"</code><br /><code>#console port SER3</code><br /><code>console=ttymxc0,115200 earlycon=ec_imx6q,0x30860000,115200</code><br /><code>#console port SER2</code><br /><code>#console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200</code><br /><code>#console port SER1</code><br /><code>#console=ttymxc2,115200 earlycon=ec_imx6q,0x30880000,115200</code><br /><code>#console port SER0</code><br /><code>#console=ttymxc3,115200 earlycon=ec_imx6q,0x30A60000,115200</code><br /><code>mmcdev=1</code><br /><code>mmcpart=1</code><br /><code>image=Image</code><br /><code>loadaddr=0x40480000</code><br /><code>fdt_addr=0x43000000</code><br /><code>mmcroot=/dev/mmcblk1p2 rw</code><br /><code>usbroot=/dev/sda2 rw</code><br /><code>mmcrootfstype=ext4 rootwait fixrtc</code><br /><code>netdev=eth0</code><br /><code>ethact=FEC0</code><br /><code>ipaddr=192.168.1.150</code><br /><code>serverip=192.168.1.53</code><br /><code>gatewayip=192.168.1.254</code><br /><code>mmcargs=setenv bootargs ${mcore_clk} console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}</code><br /><code>uenvcmd=run loadimage; run loadfdt; run mmcboot</code><br /><code># USB Boot</code><br /><code>#usbargs=setenv bootargs console=${console} root=${usbroot} rootfstype=${mmcrootfstype} ${optargs}</code><br /><code>#uenvcmd=run loadusbimage; run loadusbfdt; run usbboot</code></p></td></tr></table><p>Copy uEnv.txt to the boot partition:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="title=~/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86dGl0bGU9fi99&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><pre>$ sudo cp -v ~/uEnv.txt /media/boot/</pre></td></tr></table><h3><span style="color: rgb(0,51,102);">Install Kernel Image</span></h3><p>Copy Image to the boot partition:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-L30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><pre>$ sudo cp -v Image /media/boot</pre></td></tr></table><h3><span style="color: rgb(0,51,102);">Install Kernel Device Tree Binary</span></h3><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-L30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code>$ sudo mkdir -p /media/boot/dtbs</code></p><pre>$ sudo cp -v <device tree file> /media/boot/dtbs/imx8mq-smarc.dtb</pre></td></tr></table><p><span style="color: rgb(0,0,0);">All available DTB files are listed in the table below.</span></p><table class="confluenceTable"><tbody><tr><th style="text-align: center;" class="confluenceTh"><span style="color: rgb(0,51,102);">DTB File Name</span></th><th style="text-align: center;" class="confluenceTh"><span style="color: rgb(0,51,102);">Description</span></th></tr><tr><td class="confluenceTd"><code><span style="color: rgb(0,51,102);"><em>imx8mq-smarc.dtb</em></span></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for no display configuration.</span></td></tr><tr><td class="confluenceTd"><code><em><span style="color: rgb(0,51,102);">imx8mq-smarc-hdmi.dtb</span></em></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for HDMI display configuration (DCSS).</span></td></tr><tr><td class="confluenceTd"><code><span style="color: rgb(0,51,102);"><em>imx8mq-smarc-dp.dtb</em></span></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for Display Port (DP) display configuration (DCSS).</span></td></tr><tr><td class="confluenceTd"><code><span style="color: rgb(0,51,102);"><em>imx8mq-smarc-lcdif-lvds.dtb</em></span></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for LCDIF LVDS display configuration.</span></td></tr><tr><td class="confluenceTd"><code><em><span style="color: rgb(0,51,102);">imx8mq-smarc-dcss-lvds.dtb</span></em></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for DCSS LVDS display configuration.</span></td></tr><tr><td class="confluenceTd"><code><em><span style="color: rgb(0,51,102);">imx8mq-smarc-dual-display.dtb</span></em></code></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">Device tree blob for dual LVDS+HDMI display configuration. </span></td></tr></tbody></table><p><span style="color: rgb(0,0,0);"> </span></p><table class="wysiwyg-macro" data-macro-name="note" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGU6aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p>The device tree name in your SD card has be to <em><code>imx8mq-smarc.dtb</code></em></p></td></tr></table><h1><span style="color: rgb(0,51,102);">Install Root File System</span></h1><hr /><h3><span style="color: rgb(153,51,0);">Copy Root File System:</span></h3><p><span style="color: rgb(0,51,102);"><u><strong>Yocto Built Rootfs:</strong></u></span></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-L30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><pre>$ sudo tar jxvf <filename.tar.bz2> -C /media/rootfs</pre></td></tr></table><table class="wysiwyg-macro" data-macro-name="note" data-macro-parameters="title=Note" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGU6dGl0bGU9Tm90ZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><ol><li><em>SMARC-iMX8M</em> always boots up from on-module eMMCI flash first. The firmware in eMMC flash is factory pre-installed from Embedian. It will read the <em>BOOT_SEL</em> configuration that defined by SMARC specification on your carrier board and load Image and device tree blob from the partition one of the device (could be SD card, eMMC, GBE,..etc) that you selected.</li><li>MAC address is factory pre-installed at on board I2C EEPROM at offset 60 bytes. It starts with Embedian's vendor code <em>10:0D:32</em>. u-boot will read it and pass this parameter to kernel.</li><li>The kernel modules is included in the Yocto rootfs.</li></ol></td></tr></table><p>Remove SD card:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sync</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo umount /media/boot</code></span></div><div class="line number3 index2 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo umount /media/rootfs</code></span></div></td></tr></table><h1><span style="color: rgb(0,51,102);">Setup SD Card Automatically</span></h1><hr /><p>This section tells you how to set up an SD card automatically. It mainly uses a script to do all the steps in the above section.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code>$ <span style="color: rgb(0,51,102);">cd ~/kirkstone-release</span></code></p><p><code><span style="color: rgb(0,51,102);">$ <code class="java plain">sudo MACHINE=smarcimx8mq4g sources/meta-embedian/scripts/emb_mk_yocto_sdcard/emb-create-yocto-sdcard.sh /dev/sdX</code></span></code></p></td></tr></table><p> </p><p><span style="color: rgb(0,51,102);">Shunt cross <em>TEST#</em> pin to ground and set the <em>BOOT_SEL</em> to ON OFF OFF. The module will boot up from SD card. </span></p><h1><span style="color: rgb(0,51,102);">Feed Packages </span></h1><hr /><p><span style="color: rgb(0,0,0);">You need to setup Apache2 web server on your development host machine first.</span></p><p><span style="color: rgb(0,0,0);"><span style="color: rgb(37,37,37);">The Apache server default web page directory is </span><strong>/var/www/html</strong><span style="color: rgb(37,37,37);"> .We need to populate it with a link pointing to our deb</span><strong> package</strong><span style="color: rgb(37,37,37);"> repository.</span></span></p><p><span style="color: rgb(0,0,0);"> </span></p><table class="wysiwyg-macro" data-macro-name="info" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm99&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre>sudo ln -s /path/to/build-yocto/tmp/deploy/deb /var/www/html/deb</pre></td></tr></table><p><span style="color: rgb(0,0,0);"><br /></span></p><p><span style="color: rgb(0,0,0);">The following procedure can be used on a Embedian <em>SMARC-iMX8M </em>device to download and utilize the feed file show above to install the </span><span style="color: rgb(0,51,102);"><em>tcpdump</em></span><span style="color: rgb(0,0,0);"> terminal emulation program:</span></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);"><code># vim /etc/apt/sources.list.d/yocto.list</code></span></p><p><span style="color: rgb(0,51,102);">Only keep the following four lines:</span></p><p><span style="color: rgb(0,51,102);"><code>deb https://<ip address>/all ./</code></span></p><p><span style="color: rgb(0,51,102);"><code>deb http://<ip address>/armv8a</code></span><code><span style="color: rgb(0,51,102);"> ./</span></code></p><p><span style="color: rgb(0,51,102);"><code>deb http://<ip address>/armv8a-mx8m</code><code> ./</code></span></p><p><code><span style="color: rgb(0,51,102);">deb http://<ip address>/smarcimx8mq4g ./</span></code></p></td></tr></table><div class="paragraph"><table class="wysiwyg-macro" data-macro-name="info" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm99&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);"><code># apt-get update</code></span></p><p><span style="color: rgb(0,51,102);"><code># apt-get upgrade</code></span></p><p><span style="color: rgb(0,51,102);"><code># apt-get install tcpdump</code></span></p></td></tr></table><p> </p></div><div class="paragraph"><h1><span style="color: rgb(0,51,102);">Writing Bitbake Recipes</span></h1><hr /><p>In order to package your application and include it in the root filesystem image, you must write a BitBake recipe for it.</p><p>When starting from scratch, it is easiest to learn by example from existing recipes. </p><h5>Example HelloWorld recipe using autotools</h5><p>For software that uses autotools (./configure; make; make install), writing recipes can be very simple:</p><div><div class="syntaxhighlighter nogutter cpp"><p> </p><table class="confluenceTable"><tbody><tr><td class="confluenceTd"><div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="cpp plain">DESCRIPTION = </code><code class="cpp string">"Hello World Recipe using autotools"</code></div><div class="line number2 index1 alt1"><code class="cpp plain">HOMEPAGE = </code><code class="cpp string">"<a class="external-link" href="http://www.embedian.com/">http://www.embedian.com/"</a></code></div><div class="line number3 index2 alt2"><code class="cpp plain">SECTION = </code><code class="cpp string">"console/utils"</code></div><div class="line number4 index3 alt1"><code class="cpp plain">PRIORITY = </code><code class="cpp string">"optional"</code></div><div class="line number5 index4 alt2"><code class="cpp plain">LICENSE = </code><code class="cpp string">"GPL"</code></div><div class="line number6 index5 alt1"><code class="cpp plain">PR = </code><code class="cpp string">"r0"</code></div><div class="line number7 index6 alt2"><code class="cpp spaces"> </code> </div><div class="line number8 index7 alt1"><code class="cpp plain">SRC_URI = </code><code class="cpp string">"<a href="git://git@git.embedian.com/developer/helloworld-autotools.git;protocol=ssh;tag=v1.0">git://git@git.embedian.com/developer/helloworld-autotools.git;protocol=ssh;tag=v1.0</a>"</code></div><div class="line number9 index8 alt2"><code class="cpp plain">S = </code><code class="cpp string">"${WORKDIR}/git"</code></div><div class="line number10 index9 alt1"><code class="cpp spaces"> </code> </div><div class="line number11 index10 alt2"><code class="cpp plain">inherit autotools</code></div></div></td></tr></tbody></table><p> </p></div></div><p><span style="color: rgb(0,128,0);"><code>SRC_URI</code></span> specifies the location to download the source from. It can take the form of any standard URL using http://, ftp://, etc. It can also fetch from SCM systems, such as git in the example above.</p><p><span style="color: rgb(0,128,0);"><code>PR</code></span> is the package revision variable. Any time a recipe is updated that should require the package to be rebuilt, this variable should be incremented.</p><p><span style="color: rgb(0,128,0);"><code>inherit autotools</code></span> brings in support for the package to be built using autotools, and thus no other instructions on how to compile and install the software are needed unless something needs to be customized.</p><p><span style="color: rgb(0,128,0);"><code>S</code></span> is the source directory variable. This specifies where the source code will exist after it is fetched from SRC_URI and unpacked. The default value is <span style="color: rgb(0,128,0);"><code>${WORKDIR}/${PN}-${PV}</code></span>, where<span style="color: rgb(0,128,0);"> <code>PN</code></span> is the package name and <span style="color: rgb(0,128,0);"><code>PV</code></span> is the package version. Both <span style="color: rgb(0,128,0);"><code>PN</code></span> and <span style="color: rgb(0,128,0);"><code>PV</code></span> are set by default using the filename of the recipe, where the filename has the format <span style="color: rgb(0,128,0);"><code>PN_PV.bb</code></span>.</p><h5>Example HelloWorld recipe using a single source file</h5><p>This example shows a simple case of building a helloworld.c file directly using the default compiler (gcc). Since it isn’t using autotools or make, we have to tell BitBake how to build it explicitly.</p><div><div class="syntaxhighlighter nogutter cpp"><p> </p><table class="confluenceTable"><tbody><tr><td class="confluenceTd"><div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2"><code class="cpp plain">DESCRIPTION = </code><code class="cpp string">"HelloWorld"</code></div><div class="line number2 index1 alt1"><code class="cpp plain">SECTION = </code><code class="cpp string">"examples"</code></div><div class="line number3 index2 alt2"><code class="cpp plain">LICENSE = </code><code class="cpp string">"GPL"</code></div><div class="line number4 index3 alt1"><code class="cpp spaces"> </code> </div><div class="line number5 index4 alt2"><code class="cpp plain">SRC_URI = </code><code class="cpp string">"<a href="file://helloworld.c/">file://helloworld.c</a>"</code></div><div class="line number6 index5 alt1"><code class="cpp spaces"> </code> </div><div class="line number7 index6 alt2"><code class="cpp plain">S = </code><code class="cpp string">"${WORKDIR}"</code></div><div class="line number8 index7 alt1"><code class="cpp spaces"> </code> </div><div class="line number9 index8 alt2"><code class="cpp plain">do_compile() {</code></div><div class="line number10 index9 alt1"><code class="cpp spaces"> </code><code class="cpp plain">${CC} ${CFLAGS} ${LDFLAGS} helloworld.c -o helloworld</code></div><div class="line number11 index10 alt2"><code class="cpp plain">}</code></div><div class="line number12 index11 alt1"><code class="cpp spaces"> </code> </div><div class="line number13 index12 alt2"><code class="cpp plain">do_install() {</code></div><div class="line number14 index13 alt1"><code class="cpp spaces"> </code><code class="cpp plain">install -d ${D}${bindir}</code></div><div class="line number15 index14 alt2"><code class="cpp spaces"> </code><code class="cpp plain">install -m 0755 helloworld ${D}${bindir}</code></div><div class="line number16 index15 alt1"><code class="cpp plain">}</code></div></div></td></tr></tbody></table><p> </p></div></div><p>In this case, <span style="color: rgb(0,128,0);"><code>SRC_URI</code></span> specifies a file that must exist locally with the recipe. Since there is no code to download and unpack, we set <span style="color: rgb(0,128,0);"><code>S</code></span> to<code> <span style="color: rgb(0,128,0);">WORKDIR</span></code> since that is where helloworld.c will be copied to before it is built.</p><p><span style="color: rgb(0,128,0);"><code>WORKDIR</code></span> is located at <span style="color: rgb(0,51,102);"><code>${OETREE}/<build directory>/tmp/work/armv8a-poky-linux/<package name and version></code></span> for most packages. If the package is machine-specific (rather than generic for the armv8a architecture), it may be located in the smarcimx8mq4g-poky-linux subdirectory depending on your hardware (this applies to kernel packages, images, etc).</p><p><span style="color: rgb(0,128,0);"><code>do_compile</code></span> defines how to compile the source. In this case, we just call gcc directly. If it isn’t defined, <span style="color: rgb(0,128,0);"><code>do_compile</code></span> runs <span style="color: rgb(0,128,0);"><code>make</code></span> in the source directory by default.</p><p><span style="color: rgb(0,128,0);"><code>do_install</code></span> defines how to install the application. This example runs <span style="color: rgb(0,128,0);"><code>install</code></span> to create a bin directory where the application will be copied to and then copies the application there with permissions set to 755.</p><p><span style="color: rgb(0,128,0);"><code>D</code></span> is the destination directory where the application is installed to before it is packaged.</p><p><span style="color: rgb(0,128,0);"><code>${bindir}</code></span> is the directory where most binary applications are installed, typically <span style="color: rgb(0,128,0);"><code>/usr/bin</code></span>.</p><p>For a more in-depth explanation of BitBake recipes, syntax, and variables, see the <a class="external-link" href="http://docs.openembedded.org/usermanual/usermanual.html#chapter_recipes" rel="nofollow">Recipe Chapter</a> of the OpenEmbedded User Manual.</p><h1><span style="color: rgb(0,51,102);">Setup eMMC Manually</span></h1><hr /><p>Setting up eMMC usually is the last step at development stage after the development work is done at your SD card or NFS environments. From software point of view, eMMC is nothing but a non-removable SD card on board. For <em>SMARC-iMX8M</em>, the SD card is always emulated as /dev/mmcblk1 and on-module eMMC is always emulated as /dev/mmcblk0. Setting up eMMC now is nothing but changing the device descriptor. </p><p>This section gives a step-by-step procedure to setup eMMC flash. Users can write a shell script your own at production to simplify the steps.</p><p>First, we need to backup the final firmware from your SD card or NFS.</p><h3><span style="color: rgb(0,51,102);">Prepare for eMMC binaries from SD card (or NFS):</span></h3><p>Insert SD card into your Linux PC. For these instructions, we are assuming: DISK=/dev/mmcblk0, "lsblk" is very useful for determining the device id.</p><p>For these instruction, we are assuming: DISK=/dev/mmcblk0, "lsblk" is very useful for determining the device id.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre><span style="color: rgb(0,51,102);">$ export DISK=/dev/mmcblk0</span></pre></td></tr></table><p>Mount Partitions:</p><p><strong>On some systems, these partitions may be auto-mounted...</strong></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkdir -p /media/boot/</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkdir -p /media/rootfs/</code></span></div><div class="line number3 index2 alt2"> </div><div class="line number4 index3 alt1"><span style="color: rgb(128,0,0);"><code class="java keyword">for</code><code class="java plain">: DISK=/dev/mmcblk0</code></span></div><div class="line number5 index4 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}p1 /media/boot/</code></span></div><div class="line number6 index5 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}p2 /media/rootfs/</code></span></div><div class="line number7 index6 alt2"><code class="java plain"> </code></div><div class="line number8 index7 alt1"><span style="color: rgb(128,0,0);"><code class="java keyword">for</code><code class="java plain">: DISK=/dev/sdX</code></span></div><div class="line number9 index8 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}</code><code class="java value">1</code> <code class="java plain">/media/boot/</code></span></div><div class="line number10 index9 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}</code><code class="java value">2</code> <code class="java plain">/media/rootfs/</code></span></div></td></tr></table><p> </p><p><u><span style="color: rgb(0,51,102);"><strong>Copy Image to rootfs partition:</strong></span></u></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-fQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre><span style="color: rgb(0,51,102);">$ sudo cp -v Image /media/rootfs/home/root</span></pre></td></tr></table><p><u><span style="color: rgb(0,51,102);"><strong>Copy uEnv.txt to rootfs partition:</strong></span></u></p><p>Copy and paste the following contents to /media/rootfs/home/root ($ sudo vim /media/rootfs/home/root/uEnv.txt)</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code>optargs="video=HDMI-A-1:1920x1080-32@60 consoleblank=0"</code><br /><code>#optargs="video=HDMI-A-1:3840x2160-32@30 consoleblank=0"</code><br /><code>#optargs="video=HDMI-A-1:3840x2160-32@60 consoleblank=0"</code><br /><code>#console port SER3</code><br /><code>console=ttymxc0,115200 earlycon=ec_imx6q,0x30860000,115200</code><br /><code>#console port SER2</code><br /><code>#console=ttymxc1,115200 earlycon=ec_imx6q,0x30890000,115200</code><br /><code>#console port SER1</code><br /><code>#console=ttymxc2,115200 earlycon=ec_imx6q,0x30880000,115200</code><br /><code>#console port SER0</code><br /><code>#console=ttymxc3,115200 earlycon=ec_imx6q,0x30A60000,115200</code><br /><code>mmcdev=0</code><br /><code>mmcpart=1</code><br /><code>image=Image</code><br /><code>loadaddr=0x40480000</code><br /><code>fdt_addr=0x43000000</code><br /><code>mmcroot=/dev/mmcblk0p2 rw</code><br /><code>usbroot=/dev/sda2 rw</code><br /><code>mmcrootfstype=ext4 rootwait fixrtc</code><br /><code>netdev=eth0</code><br /><code>ethact=FEC0</code><br /><code>ipaddr=192.168.1.150</code><br /><code>serverip=192.168.1.53</code><br /><code>gatewayip=192.168.1.254</code><br /><code>mmcargs=setenv bootargs ${mcore_clk} console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}</code><br /><code>uenvcmd=run loadimage; run loadfdt; run mmcboot</code><br /><code># USB Boot</code><br /><code>#usbargs=setenv bootargs console=${console} root=${usbroot} rootfstype=${mmcrootfstype} ${optargs}</code><br /><code>#uenvcmd=run loadusbimage; run loadusbfdt; run usbboot</code></p></td></tr></table><p><u><span style="color: rgb(0,51,102);"><strong><br /></strong></span></u></p><p><u><span style="color: rgb(0,51,102);"><strong>Copy device tree blob to rootfs partition:</strong></span></u></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-fQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);"><code>$ sudo cp -v <device tree file> /media/rootfs/home/root/imx8mq-smarc.dtb</code></span></p></td></tr></table><p><u><span style="color: rgb(0,51,102);"><strong><br /></strong></span></u></p><p><u><span style="color: rgb(0,51,102);"><strong>Copy boot file to rootfs partition:</strong></span></u></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/kirkstone-release/<build dir>/tmp/deploy/images/<machine name>" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L2tpcmtzdG9uZS1yZWxlYXNlLzxidWlsZCBkaXI-L3RtcC9kZXBsb3kvaW1hZ2VzLzxtYWNoaW5lIG5hbWU-fQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);"><code>$ sudo cp -v imx-boot-smarcimx8mq4g-sd.bin-flash_evk /media/rootfs/home/root/flash.bin</code></span></p></td></tr></table><p> </p><p><u><span style="color: rgb(0,51,102);"><strong>Copy real rootfs to rootfs partition:</strong></span></u></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre><code><span style="color: rgb(0,51,102);">$ pushd /media/rootfs</span></code></pre><pre><code><span style="color: rgb(0,51,102);">$ sudo tar cvfz ~/smarcimx8mq-emmc-rootfs.tar.gz .</span></code></pre><pre><code><span style="color: rgb(0,51,102);">$ sudo mv ~/smarcimx8mq-emmc-rootfs.tar.gz /media/rootfs/home/root</span></code></pre><pre><code><span style="color: rgb(0,51,102);">$ popd</span></code></pre></td></tr></table><p>Remove SD card:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sync</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo umount /media/boot</code></span></div><div class="line number3 index2 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo umount /media/rootfs</code></span></div></td></tr></table><h3><span style="color: rgb(0,51,102);">Copy Binaries to eMMC from SD card:</span></h3><p>Insert this SD card into your SMARC-iMX8M device.</p><p>Now it will be almost the same as you did when setup your SD card, but the eMMC device descriptor is <span style="color: rgb(0,51,102);"><em>/dev/mmcblk0</em></span> now. Booting up the device.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre>$ export DISK=/dev/mmcblk0</pre></td></tr></table><p>Erase eMMC:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><span style="color: rgb(0,51,102);">$ <code class="java plain">sudo dd </code><code class="java keyword">if</code><code class="java plain">=/dev/zero of=${DISK} bs=1M count=</code><code class="java value">160</code></span></p></td></tr></table><p>Create Partition Layout:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><code><span style="color: rgb(0,51,102);">$ sudo sfdisk ${DISK} <<-__EOF__</span></code></div><div class="line number2 index1 alt1"><code><span style="color: rgb(0,51,102);"><code class="java plain">2M,</code><code class="java value">48M</code><code class="java plain">,</code><code class="java value">0x83</code><code class="java plain">,*</code></span></code></div><div class="line number3 index2 alt2"><code><span style="color: rgb(0,51,102);">50M,,,</span></code></div><div class="line number4 index3 alt1"><code><span style="color: rgb(0,51,102);">__EOF__</span></code></div></td></tr></table><p>Format Partitions:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre class="line number1 index0 alt2"><span style="color: rgb(0,51,102);">$ sudo mkfs.vfat -F 16 ${DISK}p1 -n boot</span></pre><pre class="line number3 index2 alt2"><span style="color: rgb(0,51,102);">$ sudo mkfs.ext4 ${DISK}p2 -L rootfs</span></pre></td></tr></table><p>Mount Partitions:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkdir -p /media/boot/</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mkdir -p /media/rootfs/</code></span></div><div class="line number5 index4 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}p1 /media/boot/</code></span></div><div class="line number6 index5 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo mount ${DISK}p2 /media/rootfs/</code></span></div></td></tr></table><h3><span style="color: rgb(0,51,102);">Install binaries for partition 1</span></h3><p>Copy uEnv.txt/Image/*.dtb to the boot partition</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><hr /><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo cp -v Image uEnv.txt /media/boot/</code></span></div></td></tr></table><h3><span style="color: rgb(0,51,102);">Install Kernel Device Tree Binary</span></h3><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre><span style="color: rgb(0,51,102);">$ sudo mkdir -p /media/boot/dtbs</span></pre><pre><span style="color: rgb(0,51,102);">$ sudo cp -v imx8mq-smarc.dtb /media/boot/dtbs/</span></pre></td></tr></table><h1><span style="color: rgb(0,51,102);">Install Root File System</span></h1><hr /><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre><span style="color: rgb(0,51,102);">$ sudo tar -zxvf smarcimx8mq-emmc-rootfs.tar.gz -C /media/rootfs</span></pre></td></tr></table><p><span style="color: rgb(0,51,102);"> </span></p><div><p>Unmount eMMC:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sync</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo umount /media/boot</code></span></div><div class="line number3 index2 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo umount /media/rootfs</code></span></div></td></tr></table><p>Flash boot file</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><div class="line number1 index0 alt2"><hr /></div><div class="line number2 index1 alt1"><code><span style="color: rgb(0,51,102);">$ </span><em>sudo dd if=flash.bin of=${DISK} bs=1024 seek=33</em></code></div></td></tr></table><div class="paragraph"><div class="paragraph"><div class="paragraph"><div><p> </p><p>Switch your Boot Select to eMMC (OFF ON ON) and you will be able to boot up from eMMC now.<br /><br /></p></div><div><h1><span style="color: rgb(0,51,102);">Setup eMMC Automatically</span> </h1><hr /><p>Boot up the module from SD card and run the following script. The Yocto images will be written into on-module eMMC.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p><code>$ <span style="color: rgb(0,51,102);">smarc-imx8mq-create-yocto-emmc.sh</span><span style="color: rgb(0,51,102);"> /dev/mmcblk0 >/dev/null 2>&1</span></code></p></td></tr></table><p> Shutdown the device. <span style="color: rgb(0,51,102);">Set </span><em>TEST#</em><span style="color: rgb(0,51,102);"> pin floating and set the </span><em>BOOT_SEL</em><span style="color: rgb(0,51,102);"> to OFF ON ON. The module will boot up from on-module eMMC.</span><span style="color: rgb(0,51,102);"> </span></p><p><span style="color: rgb(0,51,102);"> </span></p><div><h1><span style="color: rgb(0,51,102);">Video Decoding</span> </h1></div><hr /><p><span style="color: rgb(0,51,102);"> </span><span style="color: rgb(0,0,0);">For playing video, we can use three solutions to support it. </span></p><p><span style="color: rgb(0,51,102);"> </span><span style="color: rgb(0,0,0);">a) # gplay-1.0 <video file></span></p><p><span style="color: rgb(0,51,102);"> </span><span style="color: rgb(0,0,0);">b) # gst-launch-1.0 playbin uri=file://<video absolute path></span></p><p><span style="color: rgb(0,51,102);"> </span><span style="color: rgb(0,0,0);">c) ( i ) if video container on .mp4 format</span></p><p style="margin-left: 30.0px;"><span style="color: rgb(0,51,102);"> </span><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"># </span></span>gst-launch-1.0 filesrc location=<file name.mp4> typefind=true ! video/quicktime ! qtdemux ! queue max-size-time=0 ! vpudec ! queue max-size-time=0 ! kmssink force-hantrope=true sync=false &</p><p style="margin-left: 30.0px;">( ii ) if video container on .ts format</p><p style="margin-left: 30.0px;"><span style="color: rgb(0,51,102);"> </span># gst-launch-1.0 filesrc location=<file name.ts> typefind=true ! video/mpegts ! tsdemux ! queue max-size-time=0 ! vpudec ! queue max-size-time=0 ! waylandsink</p></div><hr /><p>version 1.0a, 08/08/2023</p><p>Last updated 2023-08-08</p></div></div></div></div></div></div></div></div></div></div></div><p style="margin-top: 10.0px;"> </p>
If you are unable to use this CAPTCHA please
contact your administrator
for assistance.
Attachments
Labels
Location
Edit
Preview
Save
Cancel
Next hint