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 Rocko BSP Distribution</span></h1><p><span style="color: rgb(0,51,102);"><strong>Eric Lee</strong></span></p><p>version 1.0a, 1/29/2019</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.MX6 official Yocto Rocko BSP release for Embedian's <em>SMARC-FiMX6</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-FiMX6</em> specific development.</p></div><p><span style="color: rgb(0,51,102);"> </span></p><div class="paragraph"><pre>Freescale makes their i.MX series official bsp build scripts available via the following GIT repository:</pre><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><a href="git://git.freescale.com/imx/meta-fsl-bsp-release">git://git.freescale.com/imx/meta-fsl-bsp-release</a></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><a href="git://git.freescale.com/imx/fsl-arm-yocto-bsp.git">git://git.freescale.com/imx/fsl-arm-yocto-bsp.git</a></p></td></tr></table><p><span style="color: rgb(0,0,0);">It is this repository that actually pulls in the </span><span style="color: rgb(0,51,102);">fsl-bsp-release</span><span style="color: rgb(0,0,0);"> project to perform the Linux BSP builds for Freescale's i.MX6 ARM Cortext-A9 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:<span style="color: rgb(0,0,0);"> </span></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><span style="color: rgb(0,0,0);"> </span>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>.<span style="color: rgb(0,0,0);"> </span></p><h3><span style="color: rgb(0,51,102);">Step 2. Generate a new SSH key</span></h3><hr /><p><span style="color: rgb(0,0,0);"> </span>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 rsa -C "your_email@example.com" # Creates a new ssh key, using the provided email as a label # Generating public/private rsa key pair. # Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter] $ ssh-add id_rsa</pre></td></tr></table><p><span style="color: rgb(0,0,0);"> </span>Now you need to enter a passphrase.</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>Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again]</pre></td></tr></table><p><span style="color: rgb(0,0,0);"> </span>Which should give you something like this:</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>Your identification has been saved in /c/Users/you/.ssh/id_rsa. Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub. The key fingerprint is: 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com</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><span style="color: rgb(0,0,0);"> </span>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_rsa.pub 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>Go to <a href="http://git.embedian.com/">Embedian Git Server</a>. At <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-smarcfimx6-rocko</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-smarcfimx6-rocko<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 />| |-- site.conf <br />| |-- machine<br />| |-- imx6qp1gsmarc.conf<br />| |-- imx6qp2gsmarc.conf<br /><span style="color: rgb(0,51,102);">| |-- imx6q1gsmarc.conf</span><br /><span style="color: rgb(0,51,102);">| |-- imx6q2gsmarc.conf<br /><span style="color: rgb(0,51,102);">| |-- imx6u1gsmarc.conf<br /></span></span>| | `-- imx6solosmarc.conf<br />|-- README<br />|-- recipes-bsp <br />| |-- u-boot <br />| `-- u-boot-smarcfimx6_2017.03.bb<br /><span>| |-- pm-utils</span><br /><span>| `-- pm-utils_%.bbappend<br /></span></span></code><span style="color: rgb(0,51,102);"><code>|-- recipes-core<br />| |-- busybox<br />| `-- busybox_%.bbappend<br />| | |-- busybox<br />| | | |-- ftpget.cfg<br />| | | `-- defconfig<br />| |-- packagegroups<br />| `-- packagegroup-core-tools-testapps.bbappend<br />|-- recipes-multimedia</code></span><span style="color: rgb(0,51,102);"><br /><code>| |-- gst-plugins-good<br />| | |-- files<br /><span>| `-- increase_min_buffers.patch<br /><span>| |-- pulseaudio</span><br /><span>| | |-- pulseaudio<br /><span><span>| | | |-- default.pa<br /><span>| | | |-- init<br /><span>| | | |-- pulseaudio-bluetooth.conf<br /><span>| | | |-- pulseaudio.service<br /></span></span></span></span></span><span>| | | `-- system.pa</span><br /><span>| `-- pulseaudio_%.bbappend</span></span><span><br /></span></span>`-- recipes-kernel <br />| |-- linux <br /><span>| `-- linux-smarcfimx6_4.9.88.bb</span><br /></code></span></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-smarcfimx6-rocko</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 the <span style="color: rgb(0,51,102);"><strong><em>imx6qp1gsmarc|imx6qp2gsmarc|imx6q1gsmarc|imx6q2gsmarc|imx6u1gsmarc|imx6solosmarc</em></strong></span> 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 <strong><em>imx6qp1gsmarc|imx6qp2gsmarc|imx6q1gsmarc|imx6q2gsmarc|imx6u1gsmarc|imx6solosmarc</em></strong> 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);"> <strong><em>imx6qp1gsmarc|imx6qp2gsmarc|imx6q1gsmarc|imx6q2gsmarc|imx6u1gsmarc|imx6solosmarc</em></strong></span> platform. <span style="color: rgb(51,102,255);"> </span></p><p><span style="color: rgb(51,102,255);"><code>recipes-connectivity/connman/*</code></span></p><p style="margin-left: 30.0px;">This folder unmask connman service for<span style="color: rgb(0,51,102);"> <strong><em>imx6qp1gsmarc|imx6qp2gsmarc|imx6q1gsmarc|imx6q2gsmarc|imx6u1gsmarc|imx6solosmarc</em></strong></span> platform to make networking work.</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 the <strong><em>imx6qp1gsmarc|imx6qp2gsmarc|imx6q1gsmarc|imx6q2gsmarc|imx6u1gsmarc|imx6solosmarc</em></strong> 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 Freescale i.MX6 fsl-bsp-release, you first need an Ubuntu 16.04 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 16.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 build-essential chrpath libsdl1.2-dev xterm python-m2crypto bc </span></code><span style="color: rgb(0,51,102);">libsdl1.2-dev</span><span style="color: rgb(0,51,102);"> </span></p></td></tr></table><p><span style="color: rgb(0,0,0);">If you are using a 64-bit Linux, then you'd also need to install 32-bit support libraries, needed by the pre-built Linaro toolchain and other binary tools.</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 dpkg --add-architecture i386<br />$ sudo apt-get update<br />$ sudo apt-get install curl g++-multilib gcc-multilib lib32z1-dev libcrypto++9:i386 libcrypto++-<a href="http://devi386/">dev:i386</a> <a href="http://liblzo2-devi386/">liblzo2-dev:i386</a> libusb-1.0-0:i386 libusb-1.0-0-<a href="http://devi386/">dev:i386</a> <a href="http://uuid-devi386/">uuid-dev:i386</a></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"><p>If you saw error like the following after running "<span style="color: rgb(0,51,102);">sudo dpkg --add-architecture i386</span>"</p><pre><code>pkg: error: unknown option --add-architecture</code></pre><p>make sure the only file present in /etc/dpkg/dpkg.cfg.d/ is "multiarch"</p><pre><code>ls /etc/dpkg/dpkg.cfg.d/ </code></pre><p>if output is</p><pre><code>multiarch </code></pre><p>execute the following commands as it is else replace "multiarch" with the name of file present in that directory.</p><pre><code>$ sudo sh -c "echo 'foreign-architecture i386' > /etc/dpkg/dpkg.cfg.d/multiarch" </code></pre><p>The above command will add i386 architecture.</p></td></tr></table><p><span style="color: rgb(0,0,0);">You’ll also need to change the default shell to </span><span style="color: rgb(0,51,102);">bash</span><span style="color: rgb(0,0,0);"> from Ubuntu’s default </span><span style="color: rgb(0,51,102);">dash</span><span style="color: rgb(0,0,0);"> shell (select the </span><span style="color: rgb(0,51,102);"><No></span><span style="color: rgb(0,0,0);"> option):</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 dpkg-reconfigure dash</span></code></p></td></tr></table><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><span style="color: rgb(0,51,102);"><code>$ mkdir ~/bin<br />$ curl <span class="nolink"><span class="nolink"><span class="nolink"><a href="http://commondatastorage.googleapis.com/git-repo-downloads/repo">http://commondatastorage.googleapis.com/git-repo-downloads/repo</a></span></span></span> > ~/bin/repo<br />$ chmod a+x ~/bin/repo<br />$ PATH=${PATH}:~/bin </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 BSP Yocto Project Environment.</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"><pre>$ mkdir ~/smarc-fimx6-rocko-release</pre><pre>$ cd ~/smarc-fimx6-rocko-release</pre><pre>$ repo init -u <span class="nolink">https://source.codeaurora.org/external/imx/imx-manifest</span> -b imx-linux-rocko -m imx-4.9.88-2.0.0_ga.xml</pre><pre><span style="color: rgb(0,51,102);">$ repo sync</span></pre></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.<br /><br /></span></div><div class="paragraph"><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>$ wget ftp://ftp.embedian.com/public/dev/minfs/smarc-fimx6-bsp-release/fsl-smarcfimx6-rocko-setup-release.sh<br /><span style="color: rgb(0,51,102);">$ chmod 444 fsl-smarcfimx6-rocko-setup-release.sh<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);"><br /></span></a><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>d sources</span><br /><span style="color: rgb(0,51,102);">$ git clone git@git.embedian.com:developer/meta-smarcfimx6-rocko.git</span><br /><span style="color: rgb(0,51,102);">$ cd ~/smarc-fimx6-rocko-release</span><br /><span style="color: rgb(0,51,102);">$ DISTRO=fsl-imx-fb MACHINE=imxq1gsmarc source fsl-smarcfimx6-rocko-setup-release.sh -b imx6q-build-qt5fb </span></pre></td></tr></table><pre class="paragraph"><span style="color: rgb(0,0,0);"><br />This script will create and bring you to </span>~/smarc-fimx6-rocko-release/imx6q1g-build-qt5fb directory.<br /><br /></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>The last line of the above script</p><pre>$ DISTRO=<distro name> MACHINE=<machine name> source smarc-rocko-fsl-setup-release.sh -b <build dir></pre><ol><li><pre><distro name> </pre><ul><li><pre>fsl-imx-x11 - Only X11 graphics</pre></li><li><pre>fsl-imx-wayland - Wayland weston graphics</pre></li><li><pre>fsl-imx-xwayland - Wayland graphics and X11. X11 applications using EGL are not supported</pre></li><li><pre>fsl-imx-fb - Frame Buffer graphics - no X11 or Wayland</pre></li></ul></li><li><pre><machine name></pre><ul><li><pre>imx6qp1gsmarc - if your SMARC-FiMX6 is a quad plus core CPU and 1GB DDR3L memory</pre></li><li><pre>imx6qp2gsmarc - if your SMARC-FiMX6 is a quad plus core CPU and 2GB DDR3L memory</pre></li><li><pre>imx6q1gsmarc - if your SMARC-FiMX6 is a quad or dual core CPU and 1GB DDR3L memory</pre></li><li><pre>imx6q2gsmarc - if your SMARC-FiMX6 is a quad or dual core CPU and 2GB DDR3L memory</pre></li><li><pre>imx6u1gsmarc - if your SMARC-FiMX6 is a dual lite core CPU and 1GB DDR3L memory</pre></li><li><pre>imx6solosmarc - if your SMARC-FiMX6 is a solo core CPU and 512MB DDR3L memory</pre></li></ul></li></ol><p><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></p><p><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">In this document, we will use</span> <em>imx6q1gsmarc</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></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=<em>imx6q1gsmarc</em> bitbake -k fsl-image-qt5-validation-imx<em><br /></em>or<br />$ MACHINE=<em>imx6q1gsmarc</em> 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><span style="color: rgb(0,51,102);"><em><strong>fsl-image-validation-imx</strong></em></span> provides a gui image without QT5. </p><p><span style="color: rgb(0,51,102);"><em><strong>fsl-image-qt5-validation-imx </strong></em></span>provides a Qt5 image for X11, wayland or FB backends depending on your distro name.</p><pre> </pre><pre>If your machine name is imx6q1gsmarc and your gui image is without QT5 , the following command gives you as an example.</pre><pre> </pre><pre>$ MACHINE=imx6q1gmarc bitbake -k fsl-image-validation-imx</pre><pre> </pre><pre>The first build takes time. </pre></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);">~/</span>smarc-fimx6-rocko-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);">minicom</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"><pre>$ MACHINE=imx6q1gsmarc bitbake tcpdump <br />$ MACHINE=imx6q1gsmarc bitbake package-index</pre></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);">~/smarc-fimx6-rocko-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-FiMX6</em> specific version of the u-boot, zImage 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>u-boot.imx</code></span><span style="color: rgb(0,51,102);"> </span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">This u-boot bootloader binary for <em>SMARC-FiMX6</em></span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/</span>zImage</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 zImage for <em>SMARC-FiMX6</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>/imx6qp-smarcfimx6.dtb</span></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 device tree binary file for <em><span style="color: rgb(0,51,102);">SMARC-FiMX6 QuadPlus</span></em><span style="color: rgb(0,0,0);"> core.</span></span></span></span><span style="color: rgb(0,0,0);"> </span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/imx6qp-smarcfimx6-<resolution>.dtb</span></code></span><span style="color: rgb(0,51,102);"> </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 device tree binary file for <em><span style="color: rgb(0,51,102);">SMARC-FiMX6 QuadPlus</span></em><span style="color: rgb(0,0,0);"> core with LVDS output for specific display resolutions.</span></span></span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/imx6q-smarcfimx6.dtb</span></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 device tree binary file for <em><span style="color: rgb(0,51,102);">SMARC-FiMX6 Quad and Dual</span></em><span style="color: rgb(0,0,0);"> core.</span></span></span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/<span style="color: rgb(0,51,0);"><machine name>/imx6q-smarcfimx6-<resolution>.dtb</span></code></span><span style="color: rgb(0,51,102);"> </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 device tree binary file for <em><span style="color: rgb(0,51,102);">SMARC-FiMX6 Quad or Dual</span></em><span style="color: rgb(0,0,0);"> core with LVDS output for specific display resolutions.</span></span></span></span></p><p><span style="color: rgb(0,51,102);">deploy/images/</span><span style="color: rgb(0,51,0);"><machine name>/imx6dl-smarcfimx6.dtb</span><span style="color: rgb(0,51,102);"> </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 device tree binary file for <em><span style="color: rgb(0,51,102);">SMARC-FiMX6 Solo or Dual Lite</span></em><span style="color: rgb(0,0,0);"> core.</span></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>/imx6dl-smarcfimx6-<resolution>.dtb</span></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 device tree binary file for <em><span style="color: rgb(0,51,102);">SMARC-FiMX6 Solo or Dual Lite</span></em><span style="color: rgb(0,0,0);"> core with LVDS output for specific display resolutions.</span></span></span></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>/<span style="color: rgb(0,51,0);">fsl-image-validation-imx</span></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-FiMX6</em> platforms without QT5.</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-qt5-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-FiMX6</em> with QT5.</span></span></p><p><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"><span style="color: rgb(0,51,0);"><code><br />deploy/rpm/*</code></span></span></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,0,0);"><span style="color: rgb(0,51,102);"> </span>This folder contains all the packages used to construct the root file system images. They are in </span><span style="color: rgb(0,51,102);"><strong>rpm</strong></span><span style="color: rgb(0,0,0);"> format (similar format to Fedora packages) and can be dynamically installed on the target platform via a properly constructed </span><span style="color: rgb(0,51,102);"><em>feed</em></span><span style="color: rgb(0,0,0);"> file. Here is an example of the feed file (named </span><em><span style="color: rgb(0,51,102);">imx6q1g_qt5fb_update.repo</span></em><span style="color: rgb(0,0,0);">) that is used internally at Embedian to install upgrades onto a </span><em><span style="color: rgb(0,51,102);"><strong>imx6q1gsmarc</strong></span></em><span style="color: rgb(0,0,0);"> QT5 platform directly on framebuffer 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><span style="color: rgb(0,51,102);"><em>[noarch]</em></span><br /><span style="color: rgb(0,51,102);"><em>type = rpm-md</em></span><br /><span style="color: rgb(0,51,102);"><em>baseurl = <a href="http://www.embedian.com/smarcfimx7-yocto-morty-feed/imx7dsmarc/fb/qt5/all">http://www.embedian.com/smarcfimx6-yocto-rocko-feed/imx6q1gsmarc/fb/qt5/</a>noarch</em></span><br /><span style="color: rgb(0,51,102);"><em>[cortexa9hf_neon]</em></span><br /><span style="color: rgb(0,51,102);"><em>type = rpm-md</em></span><br /><span style="color: rgb(0,51,102);"><em>baseurl = <a href="http://www.embedian.com/smarcfimx7-yocto-morty-feed/imx7dsmarc/fb/qt5/cortexa7hf_vfp_neon">http://www.embedian.com/smarcfimx6-yocto-rocko-feed/imx6q1gsmarc/fb/qt5/cortexa9hf_neon</a></em></span><br /><span style="color: rgb(0,51,102);"><em>[cortexa9hf_neon_mx6qdl]</em></span><br /><span style="color: rgb(0,51,102);"><em>type = rpm-md</em></span><br /><span style="color: rgb(0,51,102);"><em>baseurl = <a href="http://www.embedian.com/smarcfimx7-yocto-morty-feed/imx7dsmarc/fb/qt5/cortexa7hf_vfp_neon_mx7d">http://www.embedian.com/smarcfimx6-yocto-rocko-feed/imx6q1gsmarc/fb/qt5/cortexa9hf_neon_mx</a>6qdl</em></span><br /><span style="color: rgb(0,51,102);"><em>[imxq1gsmarc]</em></span><br /><span style="color: rgb(0,51,102);"><em>type = rpm-md</em></span><br /><span style="color: rgb(0,51,102);"><em>baseurl = <a href="http://www.embedian.com/smarcfimx7-yocto-morty-feed/imx7dsmarc/fb/qt5/imx7dsmarc">http://www.embedian.com/smarcfimx6-yocto-rocko-feed/imx6q1gsmarc/fb/qt5/imx6q1gsmarc</a></em></span></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</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">16</code></span></p></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"><pre>$ sudo sfdisk ${DISK} <<-__EOF__<br />1M,48M,0x83,*<br />,,,-<br />__EOF__</pre></td></tr></table><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="title=sfdisk <\=2.25" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86dGl0bGU9c2ZkaXNrIDw9Mi4yNX0&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">$ sudo sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__<br />1,48,0x83,*<br />,,,-<br />__EOF__</pre></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"><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 Bootloader</span></h3><p style="margin-left: 30.0px;"><strong>If SPI NOR Flash is not empty</strong></p><p style="margin-left: 30.0px;">The <em>u-boot.imx</em> is pre-installed in SPI NOR flash at factory default. SMARC-FiMX6 is designed to always boot up from SPI NOR flash and to load zImage, device tree blob and root file systems based on the setting of <em>BOOT_SEL</em>. If users need to fuse their own u-boot or perform u-boot upgrade. This section will instruct you how to do that.</p><p style="margin-left: 30.0px;"> Copy u-boot.imx to the first boot partition of your SD card.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/smarc-fimx6-morty-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3NtYXJjLWZpbXg2LW1vcnR5LXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT4vfQ&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);"><code class="java plain">$ sudo cp -v u-boot.imx /media/boot/u-boot.imx</code></span></div></td></tr></table><p style="margin-left: 30.0px;">Fuse u-boot.imx to the SPI NOR flash.</p><p style="margin-left: 30.0px;">Stop at U-Boot command prompt (Press any key when booting up). Copy and Paste the following script under u-boot command prompt.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=u-boot command prompt" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT11LWJvb3QgY29tbWFuZCBwcm9tcHR9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><pre>U-Boot# mmc rescan; mmc dev; load mmc 0:1 0x10800000 u-boot.imx; sf probe; sleep 2; sf erase 0 0xc0000; sf write 0x10800000 0x400 86000</pre></td></tr></table><p style="margin-left: 30.0px;"><strong>If SPI NOR Flash is empty</strong></p><p style="margin-left: 30.0px;">In some cases, when SPI NOR 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-FiMX6</em> will always boot up from SD card. </p><p style="margin-left: 30.0px;"> Copy u-boot.imx to the SD card</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/smarc-fimx7-morty-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3NtYXJjLWZpbXg3LW1vcnR5LXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT4vfQ&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);"><code class="java plain">$ <em>sudo dd if=u-boot.imx of=${DISK} bs=512 seek=2</em></code> </span></div></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><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 u-boot to SPI NOR flash.</span></span></span></li><li><span style="color: rgb(0,0,0);">When <em>TEST#</em> pin of SMARC-FiMX6 is not shunt crossed, it will always boot up from SPI NOR flash. U-boot will read the <em>BOOT_SEL</em> configuration and determine where it should load zImage 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 /><pre>#####HDMI######<br />#optargs="video=<a href="http://mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32">mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32</a> consoleblank=0"<br />#####LVDS#####<br />#optargs="video=<a href="http://mxcfb0dev=ldb,if=RGB24,bpp=32">mxcfb0:dev=ldb,if=RGB24,bpp=32</a> consoleblank=0 fbmem=24M vmalloc=400M"<br />#####Parallel LCD Setting#####<br />#optargs="video=<a href="http://mxcfb0dev=lcd,CLAA-WVGA,if=RGB24,bpp=32">mxcfb0:dev=lcd,CLAA-WVGA,if=RGB24,bpp=32</a> consoleblank=0 fbmem=24M vmalloc=400M"<br />#####Parallel LCD to CH7055A (VESA Timing Format) Setting #####<br />#optargs="video=<a href="http://mxcfb0:dev=lcd,768x576M@75,if=RGB24,bpp=32">mxcfb0:dev=lcd,768x576M@75,if=RGB24,bpp=32</a> consoleblank=0"<br />#optargs="video=<a href="http://mxcfb0:dev=lcd,1280x1024M@60,if=RGB24,bpp=32">mxcfb0:dev=lcd,1280x1024M@60,if=RGB24,bpp=32</a> consoleblank=0"<br />#optargs="video=<a href="http://mxcfb0:dev=lcd,640x480M@60,if=RGB24,bpp=32">mxcfb0:dev=lcd,640x480M@60,if=RGB24,bpp=32</a> consoleblank=0"</pre><pre>console=ttymxc4,115200</pre><pre>mmcdev=0</pre><pre>mmcpart=1</pre><pre>image=zImage</pre><pre>loadaddr=0x12000000</pre><pre>fdt_addr=0x18000000</pre><pre>mmcroot=/dev/mmcblk1p2 ro</pre><pre>mmcrootfstype=ext4 rootwait fixrtc</pre><pre>netdev=eth0</pre><pre>ethact=FEC0</pre><pre>ipaddr=192.168.1.150</pre><pre>serverip=192.168.1.53</pre><pre>gatewayip=192.168.1.254</pre><pre>mmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}</pre><pre>uenvcmd=run loadzimage; run loadfdt; run mmcboot</pre></td></tr></table><p>Copy uEnv.txt to the boot partition:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-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 ~/uEnv.txt /media/boot/</pre></td></tr></table><h3><span style="color: rgb(0,51,102);">Install Kernel zImage</span></h3><p>Copy zImage to the boot partition:</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/smarc-fimx7-morty-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3NtYXJjLWZpbXg3LW1vcnR5LXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT4vfQ&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 zImage /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=~/smarc-fimx6-rocko-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3NtYXJjLWZpbXg2LXJvY2tvLXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT4vfQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><pre>$ sudo mkdir -p /media/boot/dtbs</pre><pre>$ sudo cp -v zImage-imx6q-smarcfimx6.dtb /media/boot/dtbs/imx6q-smarcfimx6.dtb</pre><pre>$ sudo cp -v zImage-imx6dl-smarcfimx6.dtb /media/boot/dtbs/imx6dl-smarcfimx6.dtb</pre><pre>$ sudo cp -v zImage-imx6qp-smarcfimx6.dtb /media/boot/dtbs/imx6qp-smarcfimx6.dtb</pre></td></tr></table><table class="wysiwyg-macro" data-macro-name="note" data-macro-parameters="title=Note, ~/smarcfimx6-rocko-release/<build dir>/tmp/deploy/images/<machine name>" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGU6dGl0bGU9Tm90ZSwgfi9zbWFyY2ZpbXg2LXJvY2tvLXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT59&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><ol><li>If you are using LVDS panel, copy the corresponding device tree blob into SD card as follows.</li></ol><pre><span style="color: rgb(0,51,102);"><strong><em>For WVGA (800x480) LVDS panel:</em></strong></span><br /> $ sudo cp -v imx6q-smarcfimx6-wvga.dtb /media/boot/dtbs/<span style="color: rgb(0,51,102);">imx6q-smarcfimx6.dtb</span><br /> <span style="color: rgb(0,51,102);">$ sudo cp -v imx6dl-smarcfimx6-wvga.dtb /media/boot/dtbs/</span><span style="color: rgb(0,51,102);">imx6dl-smarcfimx6.dtb</span></pre><pre><span style="color: rgb(0,51,102);"> </span>$ sudo cp -v imx6qp-smarcfimx6-wvga.dtb /media/boot/dtbs/<span style="color: rgb(0,51,102);">imx6qp-smarcfimx6.dtb</span></pre><pre><span style="color: rgb(0,51,102);"><br /></span></pre><pre><strong><em><span style="color: rgb(0,51,102);">For XGA (1024x768) LVDS panel:</span></em></strong><br /> $ sudo cp -v imx6q-smarcfimx6-xga.dtb /media/boot/dtbs/<span style="color: rgb(0,51,102);">imx6q-smarcfimx6.dtb</span><br /> <span style="color: rgb(0,51,102);">$ sudo cp -v imx6dl-smarcfimx6-xga.dtb /media/boot/dtbs/</span><span style="color: rgb(0,51,102);">imx6dl-smarcfimx6.dtb</span></pre><pre> $ sudo cp -v imx6qp-smarcfimx6-xga.dtb /media/boot/dtbs/<span style="color: rgb(0,51,102);">imx6qp-smarcfimx6.dtb</span></pre><pre> </pre><pre><span style="color: rgb(0,51,102);"><em><strong>For WXGA (1366x768) LVDS panel:</strong></em></span><br /> $ sudo cp -v imx6q-smarcfimx6-wxga.dtb /media/boot/dtbs/<span style="color: rgb(0,51,102);">imx6q-smarcfimx6.dtb</span><br /> <span style="color: rgb(0,51,102);">$ sudo cp -v imx6dl-smarcfimx6-wxga.dtb /media/boot/dtbs/</span><span style="color: rgb(0,51,102);">imx6dl-smarcfimx6.dtb</span></pre><pre> $ sudo cp -v imx6q-smarcfimx6-wxga.dtb /media/boot/dtbs/<span style="color: rgb(0,51,102);">imx6q-smarcfimx6.dtb</span></pre><pre><span style="color: rgb(0,51,102);"> </span></pre><pre><span style="color: rgb(0,51,102);"><em><strong>For 1080p (1920x1080) LVDS panel:</strong></em></span><br /> <span style="color: rgb(0,51,102);">$ sudo cp -v imx6q-smarcfimx6-1080p.dtb /media/boot/dtbs/</span>imx6q-smarcfimx6.dtb<br /> <span style="color: rgb(0,51,102);">$ sudo cp -v imx6dl-smarcfimx6-1080p.dtb /media/boot/dtbs/</span><span style="color: rgb(0,51,102);">imx6dl-smarcfimx6.dtb</span></pre><pre><span style="color: rgb(0,51,102);"> $ sudo cp -v imx6q-smarcfimx6-1080p.dtb /media/boot/dtbs/</span>imx6q-smarcfimx6.dtb</pre></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=~/smarc-fimx7-morty-release/<build dir>/tmp/deploy/images/<machine name>/" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3NtYXJjLWZpbXg3LW1vcnR5LXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT4vfQ&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-FiMX6</em> always boots up to SPI flash first. The firmware in SPI 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 u-boot.bin from the partition one of the device (could be SD card, eMMC, GBE,..etc) that you selected to memory.</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);">Feed Packages </span></h1><hr /><p><span style="color: rgb(0,0,0);">The following procedure can be used on a Embedian <em>SMARC-FiMX6</em> device to download and utilize the feed file show above to install the </span><em><span style="color: rgb(0,51,102);">tcpdump</span></em><span style="color: rgb(0,0,0);"> Ethernet packet analyzer 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"><pre><span style="color: rgb(0,51,102);">$ smart channel -y --add http://www.embedian.com/smarcfimx6-yocto-rocko-feed/imx6q_qt5fb_update.repo</span></pre><pre><span style="color: rgb(0,51,102);">$ smart update</span></pre><pre><span style="color: rgb(0,51,102);">$ smart install tcpdump</span></pre></td></tr></table><p><span style="color: rgb(0,0,0);"> </span></p><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/cortexa9hf-neon-poky-linux-gnueabi/<package name and version></code></span> for most packages. If the package is machine-specific (rather than generic for the cortexa9hf architecture), it may be located in the imxq1gsmarc-poky-linux-gnueabi 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</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-FiMX6</em>, the SD card is always emulated as /dev/mmcblk1 and on-module eMMC is always emulated as /dev/mmcblk3. 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 zImage to rootfs partition:</strong></span></u></p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=~/smarc-fimx6-rocko-release/<build dir>/tmp/deploy/images/<machine name>" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3NtYXJjLWZpbXg2LXJvY2tvLXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT59&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 zImage /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"><pre>#####HDMI######<br />#optargs="video=<a href="http://mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32">mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32</a> consoleblank=0"<br />#####LVDS#####<br />#optargs="video=<a href="http://mxcfb0dev=ldb,if=RGB24,bpp=32">mxcfb0:dev=ldb,if=RGB24,bpp=32</a> consoleblank=0 fbmem=24M vmalloc=400M"<br />#####Parallel LCD Setting#####<br />#optargs="video=<a href="http://mxcfb0dev=lcd,CLAA-WVGA,if=RGB24,bpp=32">mxcfb0:dev=lcd,CLAA-WVGA,if=RGB24,bpp=32</a> consoleblank=0 fbmem=24M vmalloc=400M"<br />#####Parallel LCD to CH7055A (VESA Timing Format) Setting #####<br />#optargs="video=<a href="http://mxcfb0:dev=lcd,768x576M@75,if=RGB24,bpp=32">mxcfb0:dev=lcd,768x576M@75,if=RGB24,bpp=32</a> consoleblank=0"<br />#optargs="video=<a href="http://mxcfb0:dev=lcd,1280x1024M@60,if=RGB24,bpp=32">mxcfb0:dev=lcd,1280x1024M@60,if=RGB24,bpp=32</a> consoleblank=0"<br />#optargs="video=<a href="http://mxcfb0:dev=lcd,640x480M@60,if=RGB24,bpp=32">mxcfb0:dev=lcd,640x480M@60,if=RGB24,bpp=32</a> consoleblank=0"</pre><pre>console=ttymxc4,115200</pre><pre>mmcdev=2</pre><pre>mmcpart=1</pre><pre>image=zImage</pre><pre>loadaddr=0x12000000</pre><pre>fdt_addr=0x18000000</pre><pre>mmcroot=/dev/mmcblk3p2 ro</pre><pre>mmcrootfstype=ext4 rootwait fixrtc</pre><pre>netdev=eth0</pre><pre>ethact=FEC0</pre><pre>ipaddr=192.168.1.150</pre><pre>serverip=192.168.1.53</pre><pre>gatewayip=192.168.1.254</pre><pre>mmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}</pre><pre>uenvcmd=run loadzimage; run loadfdt; run mmcboot</pre></td></tr></table><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=~/smarc-fimx6-rocko-release/<build dir>/tmp/deploy/images/<machine name>" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1-L3NtYXJjLWZpbXg2LXJvY2tvLXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT59&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 imx6q-smarcfimx6.dtb /media/rootfs/home/root/imx6q-smarcfimx6.dtb</span><br /><span style="color: rgb(0,51,102);">$ sudo cp -v imx6dl-smarcfimx6.dtb /media/rootfs/home/root/imx6dl-smarcfimx6.dtb </span></pre><pre><span style="color: rgb(0,51,102);"> </span></pre><pre><span style="color: rgb(0,51,102);">$ sudo cp -v imx6qp-smarcfimx6.dtb /media/rootfs/home/root/imx6qp-smarcfimx6.dtb </span></pre></td></tr></table><p><u><span style="color: rgb(0,51,102);"> </span></u></p><table class="wysiwyg-macro" data-macro-name="note" data-macro-parameters="title=~/smarcfimx6-rocko-release/<build dir>/tmp/deploy/images/<machine name>" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e25vdGU6dGl0bGU9fi9zbWFyY2ZpbXg2LXJvY2tvLXJlbGVhc2UvPGJ1aWxkIGRpcj4vdG1wL2RlcGxveS9pbWFnZXMvPG1hY2hpbmUgbmFtZT59&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><ol><li><pre>If you are using LVDS panel, copy the corresponding device tree blob into SD card as follows.</pre></li></ol><pre>For WVGA (800x480) LVDS panel:</pre><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6q-smarcfimx6-wvga.dtb /media/rootfs/home/root/imx6q-smarcfimx6.dtb</code></span><span style="color: rgb(0,51,102);"> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6dl-smarcfimx6-wvga.dtb /media/rootfs/home/root/imx6dl-smarcfimx6.dtb </code> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6qp-smarcfimx6-wvga.dtb /media/rootfs/home/root/imx6qp-smarcfimx6.dtb</code></span></p><pre><span style="color: rgb(0,51,102);"> </span></pre><pre><strong><em><span style="color: rgb(0,51,102);">For XGA (1024x768) LVDS panel:</span></em></strong></pre><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6q-smarcfimx6-xga.dtb /media/rootfs/home/root/imx6q-smarcfimx6.dtb</code></span><span style="color: rgb(0,51,102);"> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6dl-smarcfimx6-xga.dtb /media/rootfs/home/root/imx6dl-smarcfimx6.dtb </code> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6qp-smarcfimx6-xga.dtb /media/rootfs/home/root/imx6qp-smarcfimx6.dtb</code></span></p><pre> </pre><pre><span style="color: rgb(0,51,102);"><em><strong>For WXGA (1366x768) LVDS panel:</strong></em></span></pre><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6q-smarcfimx6-wxga.dtb /media/rootfs/home/root/imx6q-smarcfimx6.dtb</code></span><span style="color: rgb(0,51,102);"> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6dl-smarcfimx6-wxga.dtb /media/rootfs/home/root/imx6dl-smarcfimx6.dtb </code> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6qp-smarcfimx6-wxga.dtb /media/rootfs/home/root/imx6qp-smarcfimx6.dtb</code></span></p><pre> </pre><pre><span style="color: rgb(0,51,102);"><em><strong>For 1080p (1920x1080) LVDS panel:</strong></em></span></pre><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6q-smarcfimx6-1080p.dtb /media/rootfs/home/root/imx6q-smarcfimx6.dtb</code></span><span style="color: rgb(0,51,102);"> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6dl-smarcfimx6-1080p.dtb /media/rootfs/home/root/imx6dl-smarcfimx6.dtb </code> </span></p><p><span style="color: rgb(0,51,102);"><code> $ sudo cp -v imx6qp-smarcfimx6-1080p.dtb /media/rootfs/home/root/imx6qp-smarcfimx6.dtb</code></span></p></td></tr></table><p><u><span style="color: rgb(0,51,102);"><strong><br />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><span style="color: rgb(0,51,102);">$ pushd /media/rootfs</span></pre><pre><span style="color: rgb(0,51,102);">$ sudo tar cvfz ~/smarcfimx6-emmc-rootfs.tar.gz .</span></pre><pre><span style="color: rgb(0,51,102);">$ sudo mv ~/smarcfimx6-emmc-rootfs.tar.gz /media/rootfs/home/root</span></pre><pre><span style="color: rgb(0,51,102);">$ popd</span></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-FiMX6 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/mmcblk2</em></span> now.</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/mmcblk3</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">16</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"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java value">1</code><code class="java plain">,</code><code class="java value">48</code><code class="java plain">,</code><code class="java value">0x83</code><code class="java plain">,*</code></span></div><div class="line number3 index2 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">,,,-</code></span></div><div class="line number4 index3 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">__EOF__</code></span></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/zImage/*.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 zImage 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 imx6q-smarcfimx6.dtb imx6dl-smarcfimx6.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 smarcfimx6-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> </p><div class="paragraph"><div class="paragraph"><div class="paragraph"><div><p>Switch your Boot Select to eMMC and you will be able to boot up from eMMC now.</p></div><hr /><p>version 1.0a, 1/29/2019</p><p>Last updated 2019-01-29</p></div></div></div></div></div></div></div></div></div></div></div><pre style="white-space: pre-wrap;">fsl-smarcfimx6-rocko-setup-release.sh</pre>
If you are unable to use this CAPTCHA please
contact your administrator
for assistance.
Attachments
Labels
Location
Edit
Preview
Save
Cancel
Next hint