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
SMARC T4378 ProcessorSDK03000004
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 TI/Embedian’s Yocto BSP Distribution</span></h1><p><span style="color: rgb(0,51,102);"><strong>Eric Lee</strong></span></p><p>version 1.0a, 8/24/2016</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 TI's AM437X official BSP release for Embedian's <em>SMARC-T4378</em> product platform based on Processor SDK 04.01.00.06. 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-T4378</em> specific development.</p></div><p><span style="color: rgb(0,51,102);"> </span></p><div class="paragraph"><p>TI makes their Processor-SDK-04.01.00.06 Arago 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 class="nolink"><span class="nolink">http://arago-project.org/git/projects/oe-layersetup.git</span></span></code><a href="git://git.freescale.com/imx/meta-fsl-bsp-release"><br /></a></p></td></tr></table><div class="paragraph"><span style="color: rgb(0,0,0);"><br />If you’re interested in TI’s overall Processor SDK build and test process you should analyze the following repository:</span><span style="color: rgb(0,0,0);"> <br /><br /></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 class="nolink"><span class="nolink">http://arago-project.org/git/projects/tisdk-build-scripts.git</span></span></code></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);">oe-layersetup</span><span style="color: rgb(0,0,0);"> project to perform the Linux Processor-SDK builds for TI’s entire suite of ARM CortextA chips. In this document we are only concerned with the </span><span style="color: rgb(0,51,102);">oe-layersetup</span><span style="color: rgb(0,0,0);"> project.</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><span style="color: rgb(0,0,0);"> </span>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><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></p><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></p><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><span style="color: rgb(0,0,0);"> <br /></span>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> <span style="color: rgb(0,51,102);"><code>meta-smarct437x-sdk04010006</code></span> <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-smarct437x-sdk-04-01-00-06<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 />| | `-- smarct437x.conf<br />|-- README<br />|-- recipes-bsp <br />| |-- u-boot<br /><span>| |-- u-boot-smarc.inc</span><br />| `-- u-boot-smarct437x_2017.01-smarct437x.bb</span></code><span style="color: rgb(0,51,102);"><code><br />|-- recipes-core<br />| |-- busybox<br />| |-- busybox_1.23.1.bbappend<br />| | |-- busybox<br />| | | `-- defconfig</code></span><span style="color: rgb(0,51,102);"><br /><code>| |-- images <br />| | |-- meta-toolchain-smarc-tisdk.bb <br />| | |-- smarc-image.inc <br />| | |-- meta-toolchain-smarc-tisdk.inc<br />| | `-- smarct437x-rootfs-image.bb<br /><span>| `-- packagegroups</span><br />| |-- packagegroup-smarc-console.bb <br />| |-- packagegroup-smarc-tisdk-addons.bb<br />| `-- packagegroup-smarct437x-sdk.bb <br /><span>`-- recipes-kernel</span> <br />| |-- linux <br />| |-- cmem.inc<br />| |-- ti-uio.inc<br />| |-- setup-defconfig.inc <br />| |-- copy-defconfig.inc<br />| |-- linux-smarct437x-staging_4.9.bb <br />| `-- linux-smarct437x-staging-4.9<br />| | '-- defconfig<br /><span>| |-- files </span><br /><span>| |-- configs<br /></span><span>| | '-- empty<br /></span><span>| |-- dra7xx<br /></span><span>| | |-- am572x-pru-uio.dtsi<br /><span>| | |-- cmem-dra71x.dtsi</span><br /><span>| | |-- cmem.dtsi</span><br /><span>| | |-- cmem-am571x.dtsi<br /></span></span><span>| | '-- cmem-dra72x.dtsi<br /><span>| |-- k2e</span><span><br />| | |-- cmem.dtsi<br /></span><span>| | '-- k2e-uio.dtsi<br /></span></span><span>| |-- k2g</span><span><br /></span><span>| | '-- cmem.dtsi<br /></span><span>| |-- k2hk</span><span><br />| | |-- cmem.dtsi<br /></span><span>| | '-- k2hk-uio.dtsi<br /><span>| |-- k2l-evm</span><span><br />| | |-- cmem.dtsi<br /></span><span>| | '-- k2l-uio.dtsi<br /></span></span><span>| |-- keystone</span><span><br /></span><span>| | '-- keystone-uio.dtsi<br /></span><span>| |-- ti33x</span><span><br /></span><span>| | '-- am335x-pru-uio.dtsi<br /><span>| `-- ti43x</span><br /></span><span>| | '-- </span><span>am437x-pru-uio.dtsi</span><br />| |-- linux-libc-headers<br />| `-- cryptodev-module_%.bbappendd<br /><span>| `-- kselftests<br /></span><span>| | '-- kselftests_4.9.bb</span></code></span></p></td></tr></table><p> </p><p><strong><span style="color: rgb(0,51,102);"><span style="color: rgb(82,123,189);">Notes on </span><em>meta-smarct437x-sdk-04-01-00-06</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 <em><strong>smarct437x</strong></em> platform and backup repository in Embedian. These select the associated kernel, kernel config, u-boot, u-boot config, and UBI 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><strong>smarct437x</strong></em> platform.</p><p><span style="color: rgb(51,102,255);"><code>recipes-core/busybox/*</code></span></p><p style="margin-left: 30.0px;">This recipe modifies TI’s BusyBox configuration to remove telnet from the image.</p><p><span style="color: rgb(51,102,255);"><code>recipes-core/images/*</code></span></p><p style="margin-left: 30.0px;">These recipes are used to create the final target images for the devices. When you run Bitbake one of these recipes would be specified. For example, to build the root file system for the <strong><em><span style="color: rgb(0,51,102);">smarct437x</span></em> </strong>platform:</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 style="margin-left: 30.0px;"><code><span style="color: rgb(0,51,102);">MACHINE=smarct437x bitbake -k smarct437x-rootfs-image</span></code></p></td></tr></table><div class="paragraph"><span style="color: rgb(51,102,255);"><br />recipes-kernel/linux/*</span></div><p style="margin-left: 30.0px;">Contains the recipes needed to build the <em><strong>smarct437x</strong></em> 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 TI AM437X Processor-SDK-04.01.00.06, <span>you first need an Ubuntu 14.04LTS or 16.04LTS installation. B</span>ecause of support for 32-bit host is dropped as Linaro toolchain is available only for 64-bit machines., an x86_64 ubuntu 14.04 is highly recommended. 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 14.04LTS 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 python-m2crypto bc dos2unix socat libsdl1.2-dev</span></code></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><span style="color: rgb(0,0,0);"> </span><span style="color: rgb(0,0,0);">To build TI’s am437x Processor-SDK-04.01.00.06 you will need to install the Linaro arm compiler that TI used for the release:</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>$ wget -c <span class="nolink">http://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/arm-linux-gnueabihf/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz</span></code></span></p><p><span style="color: rgb(0,51,102);"><code>$ sudo tar -C /opt -xJf gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz</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);">Add the following </span><code>PATH</code><span style="color: rgb(0,0,0);"> definition to the </span><code><span style="color: rgb(0,51,102);">.bashrc</span></code><span style="color: rgb(0,0,0);"> file in your </span><span style="color: rgb(0,51,102);"><code>$HOME</code></span><span style="color: rgb(0,0,0);"> directory:</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);">$ export PATH=/opt/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin:$PATH</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);">Next clone and intialize TI’s am437x SDK build process:</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);">$ git clone <span class="nolink">https://git.ti.com/git/arago-project/oe-layersetup.git</span></span><span style="color: rgb(0,51,102);"> smarct4x-sdk-04.01.00.06</span></code><br /><code><span style="color: rgb(0,51,102);">$ cd smarct4x-sdk-04.01.00.06 </span></code><br /><code><span style="color: rgb(0,51,102);">$ git checkout -b smarct4x-processor-sdk-04.01.00.06 acbcedb4911f3e6804610c757f56b7dfd4e31086 </span></code><br /><code><span style="color: rgb(0,51,102);">$ ./oe-layertool-setup.sh -f configs/processor-sdk/processor-sdk-04.01.00.06-config.txt</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);">Add the Embedian’s </span><em><code><span style="color: rgb(0,51,102);">meta-smarct437x-sdk-04.01.00.06</span></code></em><span style="color: rgb(0,0,0);"> layer to the build process</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);">$ cd ~/smarct4x-sdk-04.01.00.06/sources </span><br /><span style="color: rgb(0,51,102);">$ git clone git@git.embedian.com:developer/meta-smarct437x-sdk04010006.git</span><br /><span style="color: rgb(0,51,102);">$ cd ~/smarct4x-sdk-04.01.00.06/build</span><span style="color: rgb(0,51,102);"><br /></span></code></p></td></tr></table><div class="paragraph"><span style="color: rgb(0,0,0);"><br /></span></div><pre class="paragraph">Edit the ~/smarct4x-sdk-04.01.00.06/build/conf/bblayers.conf<span style="color: rgb(0,0,0);"> file to include the <em><span style="color: rgb(0,51,102);">meta-smarct437x-sdk04010006</span></em></span><span style="color: rgb(0,0,0);"> layer in the layer list. It should look something like this (the example reflects the absolute paths on my machine):</span></pre><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># This template file was created by taking the oe-core/meta/conf/bblayers.conf<br /># file and removing the BBLAYERS section at the end.</p><p># LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf<br /># changes incompatibly<br />LCONF_VERSION = "7"</p><p>BBPATH = "${TOPDIR}"<br />BBFILES ?= ""</p><p><code># Layers configured by oe-core-setup script</code><br /><code>BBLAYERS += " \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-smarct437x-sdk04010006 \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-processor-sdk \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-arago/meta-arago-distro \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-arago/meta-arago-extras \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-browser \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-openamp \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-qt5 \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-openembedded/meta-networking \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-openembedded/meta-ruby \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-openembedded/meta-python \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-openembedded/meta-oe \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-openembedded/meta-gnome \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-ti \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-linaro/meta-linaro-toolchain \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/meta-linaro/meta-optee \</code><br /><code>/home/eric/smarct4x-sdk-04.01.00.06/sources/oe-core/meta \</code></p><pre><code>"</code></pre></td></tr></table><p> </p></div><div class="paragraph"><h1><span style="color: rgb(0,51,102);">Building the target platforms</span></h1><hr /><p><span style="color: rgb(0,0,0);">To build the Embedian SMARC-T437X developer board images, respectively, use the following commands:</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);">$ cd ~/smarct4x-sdk-04.01.00.06/build<br />$ source conf/setenv <br />$ MACHINE=smarct437x bitbake -k smarct437x-rootfs-image <br /></span></code></p></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><span style="color: rgb(0,0,0);">The first clean build might take more than 10 hours. If you met errors during the building process, let it finish and usually build again should be fine.</span></li></ol></td></tr></table><div class="paragraph"><p> </p><p>Once it done, you can find all required images under <code><span style="color: rgb(0,51,102);">~/smarct4x-sdk-04.01.00.06/build/arago-tmp-external-linaro-toolchain/deploy/images/smarct437x/</span></code></p><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"><p><code><span style="color: rgb(0,51,102);">$ MACHINE=smarct437x bitbake minicom <br />$ MACHINE=smarct437x bitbake package-index</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);">Once the build(s) are completed you’ll find the resulting images, feeds and licenses in folder </span><code><span style="color: rgb(0,51,102);">~/smarct4x-sdk-03.00.00.04/build/arago-tmp-external-linaro-toolchain/deploy/</span></code></div><p><span style="color: rgb(0,51,102);"><code><span style="color: rgb(0,51,0);">deploy/images/smarct437x/*</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 SMARC-T437X specific version of the am437x SDK. Specifically the images are:</span></span><span style="color: rgb(0,51,102);"> </span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/smarct437x/u-boot.img</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 SMARC T437X</span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/smarct437x/MLO.byteswap</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 "Stage 1 SPI NOR flash Boot Loader" for SMARC-T437X. Its purpose is load </span><span style="color: rgb(34,34,34);">the Stage 2 Boot Loader (u-boot.img).</span></span></span></p><p><span style="color: rgb(0,51,102);"><code>deploy/images/smarct437x/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 SMARC-T437X.</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/smarct437x/zImage-am437x-smarct437x.dtb</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 SMARC-T437X.</span></span></span><span style="color: rgb(0,0,0);"> </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/smarct437x/smarct437x-rootfs-image-smarct437x*</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 SMARC-T437X platforms.</span></span></p><p style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"><br /></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>deploy/ipk/*</code></span></span></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(0,51,102);"> </span>This folder contains all the packages used to construct the root file system images. They are in <em><span style="color: rgb(0,51,102);"><strong>opkg</strong></span></em> format (similar format to Debian packages) and can be dynamically installed on the target platform via a properly constructed <span style="color: rgb(0,51,102);"><em>feed</em></span> file. Here is an example of the feed file (named base-feeds<span style="color: rgb(0,51,102);">.conf</span>) that is used internally at Embedian to install upgrades onto a <em><span style="color: rgb(0,51,102);"><strong>smarct437x</strong></span></em> platform without reflashing the file system:</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><span style="color: rgb(0,51,102);"><code>src/gz smarct335x <a href="http://www.embedian.com/core-sdk/smarct437x/processor-sdk-03.00.00.04/deploy/ipk/al">http://www.embedian.com/core-sdk/smarct437x/processor-sdk-03.00.00.04/deploy/ipk/al</a><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></code></span></p><p><span style="color: rgb(0,51,102);"><code>src/gz <span style="color: rgb(0,51,102);">armv7ahf-neon</span> <span class="nolink"><span class="nolink"><a href="http://www.embedian.com/core-sdk/smarct437x/smarct4x-">http://www.embedian.com/core-sdk/smarct437x/smarct4x-</a></span></span>processor-sdk-03.00.00.04/deploy/ipk/<span style="color: rgb(0,51,102);">armv7ahf-neon</span></code></span></p><p><span style="color: rgb(0,51,102);"><code>src/gz smarct437x <span class="nolink"><span class="nolink"><a href="http://www.embedian.com/core-sdk/smarct437x/smarct4x-processor">http://www.embedian.com/core-sdk/smarct437x/smarct4x-processor</a></span></span>-sdk-03.00.00.04/deploy/ipk/smarct437x</code></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><p> </p><div class="paragraph"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"> </span><span style="color: rgb(0,51,0);"><code>deploy/sdk/<span style="color: rgb(0,51,0);">arago-2017.06-armv7a-linux-gnueabi-tisdk.sh</span></code></span></span></div><div class="paragraph" style="margin-left: 60.0px;"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);">The installer for ARM toolchain that was created for the target platform. In Embedian’s case that means that the headers for the Boost libraries are baked into the tools. (Generate by meta-toolchain-smarc-tisdk image)</span></span></div></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"><p><code><span style="color: rgb(0,51,102);">$ export DISK=/dev/mmcblk0</span></code></p></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><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.27.1</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"><div class="line number1 index0 alt2"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo sfdisk ${DISK} <<-__EOF__</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java value">1M</code><code class="java plain">,</code><code class="java value">48M</code><code class="java plain">,</code><code class="java value">0xE</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><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"><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">0xE</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"><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><p><strong><br /></strong></p><p><strong>Install Bootloader<br /></strong></p><p style="margin-left: 30.0px;"><strong>If SPI NOR Flash is not empty</strong></p><p style="margin-left: 30.0px;">The MLO.byteswap and u-boot.img is pre-installed in SPI NOR flash at factory default. SMARC-T4378 is designed to always boot u-boot from SPI NOR flash and to load zImage and root file systems based on the setting of BOOT_SEL. 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 MLO.byteswap/u-boot.img to the first boot partition of your SD card.</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=build/arago-tmp-external-linaro-toolchain/deploy/images/smarct437x" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1idWlsZC9hcmFnby10bXAtZXh0ZXJuYWwtbGluYXJvLXRvb2xjaGFpbi9kZXBsb3kvaW1hZ2VzL3NtYXJjdDQzN3h9&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 MLO.byteswap /media/boot/</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo cp -v u-boot.img /media/boot/spi-u-boot.img</code> </span></div></td></tr></table><p style="margin-left: 30.0px;">Fuse MLO.byteswap/u-boot.img to the SPI NOR flash.</p><p style="margin-left: 30.0px;">Stop at U-Boot command prompt (Press any key when booting up).</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"><div class="line number1 index0 alt2"><hr /><span style="color: rgb(0,51,102);"><code class="java plain">U-Boot# sf probe<br />U-Boot# sf erase 0 400000<br />U-Boot# mmc rescan<br />U-Boot# fatload mmc 0 ${loadaddr} MLO.byteswap<br />U-Boot# sf write ${loadaddr} 0 ${filesize} </code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">U-Boot# fatload mmc 0 ${loadaddr} spi-u-boot.img<br />U-Boot# sf write ${loadaddr} 0x20000 ${filesize}</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"><p>MLO.byteswap and u-boot.img are from <span style="color: rgb(0,51,102);">smarct437x_evm_spi_uart3_defconfig</span></p></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, SMARC-T437X will always boot up from SD card. </p><p style="margin-left: 30.0px;">Copy MLO/u-boot.img to the boot partition</p><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=build/arago-tmp-external-linaro-toolchain/deploy/images/smarct437x" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1idWlsZC9hcmFnby10bXAtZXh0ZXJuYWwtbGluYXJvLXRvb2xjaGFpbi9kZXBsb3kvaW1hZ2VzL3NtYXJjdDQzN3h9&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 MLO /media/boot/</code></span></div><div class="line number2 index1 alt1"><span style="color: rgb(0,51,102);"><code class="java plain">$ sudo cp -v u-boot.img /media/boot/</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"><p><em>MLO</em> and <em>u-boot.img</em> will be from <span style="color: rgb(0,51,102);"><em>smarct437x_evm_uart3_defconfig</em>. Modify the config file under <em>sources/meta-smarct437x-sdk-04-01-01-06/conf/machine/smarct437x.conf</em></span></p><p>UBOOT_MACHINE = "smarct437x_evm_spi_uart3_defconfig"<br /># If Test# pin is shunt<br /># UBOOT_MACHINE = "smarct437x_evm_uart3_defconfig"</p><p> </p><p>Also modify <em>sources/meta-smarct437x-sdk-04-01-00-06/recipes-bsp/u-boot/u-boot-smarct437x_2017.01-smarct437x.bb</em></p><p># If TEST# pin is shunt #<br /># SPL_BINARY = "MLO"<br />SPL_BINARY = "MLO.byteswap"</p><p><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 make <span style="color: rgb(0,51,102);">smarct437x_evm_spi_uart3_defconfig <span style="color: rgb(0,0,0);">again fuse your u-boot to SPI NOR flash.</span></span></span></p></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>optargs="consoleblank=0 mem=512M"<br />#u-boot eMMC specific overrides; Angstrom Distribution (SMARC-T437X) 2014-05-20<br />kernel_file=zImage<br />initrd_file=initrd.img</p><p>loadaddr=0x82000000<br />initrd_addr=0x88080000<br />fdtaddr=0x88000000<br />fdtfile=am437x-smarct437x.dtb </p><p>initrd_high=0xffffffff<br />fdt_high=0xffffffff</p><p>loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${kernel_file}<br />loadinitrd=load mmc ${mmcdev}:${mmcpart} ${initrd_addr} ${initrd_file}; setenv initrd_size ${filesize}<br />loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} /dtbs/${fdtfile}<br />#</p><p>##Un-comment to enable systemd in Debian Wheezy<br />#optargs=quiet init=/lib/systemd/systemd</p><p>console=ttyS4,115200n8<br />mmcroot=/dev/mmcblk1p2 ro<br />mmcrootfstype=ext4 rootwait fixrtc</p><p>mmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}</p><p>#zImage:<br />uenvcmd=run loadimage; run loadfdt; run mmcargs; bootz ${loadaddr} - ${fdtaddr}</p><p>#zImage + uInitrd: where uInitrd has to be generated on the running system.<br />#boot_fdt=run loadimage; run loadinitrd; run loadfdt<br />#uenvcmd=run boot_fdt; run mmcargs; bootz ${loadaddr} ${initrd_addr}:${initrd_size} ${fdtaddr}</p><p>###Begin Rootfs from NFS<br />#serverip=192.168.1.51<br />#rootpath=/srv/nfs/smarct335x/ubuntu1204/<br />#nfsopts=nolock,acdirmin=60<br />#netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp<br />##netboot=echo Loading kernel from SDCARD and booting from NFS ...; run loadimage; run netargs; bootz ${loadaddr} - ${fdtaddr}<br />##uenvcmd=run netboot<br />###End Rootfs from NFS</p><p>###Begin Load kernel from TFTP<br />#netmask=255.255.255.0<br />#ipaddr=192.168.1.65<br />#serverip=192.168.1.51<br />#netboot=echo Loading kernel and device tree from TFTP and booting from NFS ...; setenv autoload no; tftp ${loadaddr} ${kernel_file}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootz ${loadaddr} - ${fdtaddr}<br />#uenvcmd=run netboot<br />###End Load kernel from TFTP</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>If you use SMARC-T4378-800, mem=512M in optargs. Otherwise, mem has to change to 1024M in optargs.</li><li>mmcroot=/dev/mmcblk1p2 when SDMMC eMMC is not present on carrier board. If there is an eMMC present on carrier board. SD card will be emulated as /dev/mmcblk2 and mmcroot=/dev/mmcblk2p2.</li></ol></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=build/arago-tmp-external-linaro-toolchain/deploy/images/smarct437x" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1idWlsZC9hcmFnby10bXAtZXh0ZXJuYWwtbGluYXJvLXRvb2xjaGFpbi9kZXBsb3kvaW1hZ2VzL3NtYXJjdDQzN3h9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><p><code><span style="color: rgb(0,51,102);">$ sudo cp -v zImage /media/boot</span></code></p></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=build/arago-tmp-external-linaro-toolchain/deploy/images/smarct437x" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1idWlsZC9hcmFnby10bXAtZXh0ZXJuYWwtbGluYXJvLXRvb2xjaGFpbi9kZXBsb3kvaW1hZ2VzL3NtYXJjdDQzN3h9&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 mkdir -p /media/boot/dtbs</span></code></p><p><code><span style="color: rgb(0,51,102);">$ sudo cp -v zImage-am437x-smarct437x.dtb /media/boot/dtbs/am437x-smarct437x.dtb</span></code></p></td></tr></table><h1><span style="color: rgb(0,51,102);">Install Root File System and </span><span style="color: rgb(0,51,102);">Kernel Modules</span></h1><hr /><table class="wysiwyg-macro" data-macro-name="info" data-macro-parameters="icon=false|title=build/arago-tmp-external-linaro-toolchain/deploy/images/smarct437x" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2luZm86aWNvbj1mYWxzZXx0aXRsZT1idWlsZC9hcmFnby10bXAtZXh0ZXJuYWwtbGluYXJvLXRvb2xjaGFpbi9kZXBsb3kvaW1hZ2VzL3NtYXJjdDQzN3h9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><hr /><p><code><span style="color: rgb(0,51,102);">$ sudo tar Jxvf <a href="ftp://ftp.embedian.com/public/dev/minfs/arago/smarct437x-rootfs-image-smarct437x.tar.gz">smarct437x-rootfs-image-smarct437x.tar.</a>xz -C /media/rootfs</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>Kernel modules are built into root filesystems.</p></td></tr></table><p> </p><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 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. eMMC on module will be 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"><p><span style="color: rgb(0,51,102);">$ export DISK=/dev/mmcblk0</span></p></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><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" 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 cp -v /media/boot/zImage /media/rootfs/home/root</span></code></p></td></tr></table><p><u><span style="color: rgb(0,51,102);"><strong><br />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|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>optargs="consoleblank=0 mem=512M"<br />#u-boot eMMC specific overrides; Angstrom Distribution (SMARC-T437X) 2014-05-20<br />kernel_file=zImage<br />initrd_file=initrd.img</p><p>loadaddr=0x82000000<br />initrd_addr=0x88080000<br />fdtaddr=0x88000000<br />fdtfile=am437x-smarct437x.dtb </p><p>initrd_high=0xffffffff<br />fdt_high=0xffffffff</p><p>loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${kernel_file}<br />loadinitrd=load mmc ${mmcdev}:${mmcpart} ${initrd_addr} ${initrd_file}; setenv initrd_size ${filesize}<br />loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdtaddr} /dtbs/${fdtfile}<br />#</p><p>##Un-comment to enable systemd in Debian Wheezy<br />#optargs=quiet init=/lib/systemd/systemd</p><p>console=ttyS4,115200n8<br />mmcroot=/dev/mmcblk0p2 ro<br />mmcrootfstype=ext4 rootwait fixrtc</p><p>mmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=${mmcrootfstype} ${optargs}</p><p>#zImage:<br />uenvcmd=run loadimage; run loadfdt; run mmcargs; bootz ${loadaddr} - ${fdtaddr}</p><p>#zImage + uInitrd: where uInitrd has to be generated on the running system.<br />#boot_fdt=run loadimage; run loadinitrd; run loadfdt<br />#uenvcmd=run boot_fdt; run mmcargs; bootz ${loadaddr} ${initrd_addr}:${initrd_size} ${fdtaddr}</p><p>###Begin Rootfs from NFS<br />#serverip=192.168.1.51<br />#rootpath=/srv/nfs/smarct335x/ubuntu1204/<br />#nfsopts=nolock,acdirmin=60<br />#netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp<br />##netboot=echo Loading kernel from SDCARD and booting from NFS ...; run loadimage; run netargs; bootz ${loadaddr} - ${fdtaddr}<br />##uenvcmd=run netboot<br />###End Rootfs from NFS</p><p>###Begin Load kernel from TFTP<br />#netmask=255.255.255.0<br />#ipaddr=192.168.1.65<br />#serverip=192.168.1.51<br />#netboot=echo Loading kernel and device tree from TFTP and booting from NFS ...; setenv autoload no; tftp ${loadaddr} ${kernel_file}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootz ${loadaddr} - ${fdtaddr}<br />#uenvcmd=run netboot<br />###End Load kernel from TFTP</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>If you use SMARC-T4378-800, mem=512M in optargs. Otherwise, mem has to change to 1024M in optargs.</li><li>The uEnv.txt is exactly the same as that is created in SD card except the eMMC device descriptor now is mmcroot=/dev/mmcblk0p2.</li></ol></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" 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 cp -v /media/boot/dtbs/am437x-smarct437x.dtb /media/rootfs/home/root/am437x-smarct437x.dtb </span></code></p></td></tr></table><p><u><span style="color: rgb(0,51,102);"><strong>Copy final 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"><p><code><span style="color: rgb(0,51,102);">$ pushd /media/rootfs</span></code></p><p><code><span style="color: rgb(0,51,102);">$ sudo tar cvfz ~/smarct437x-emmc-rootfs.tar.gz .</span></code></p><p><code><span style="color: rgb(0,51,102);">$ sudo mv ~/smarct437x-emmc-rootfs.tar.gz /media/rootfs/home/root</span></code></p><p><code><span style="color: rgb(0,51,102);">$ popd</span></code></p></td></tr></table><p><br />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-T437X device (carrier board).</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.</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);">$ export DISK=/dev/mmcblk0</span></p></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"><div class="line number1 index0 alt2"><code class="java plain">$ sudo mkfs.vfat -F </code><code class="java value">16</code><span style="color: rgb(0,51,102);"> </span><code class="java plain">${DISK}p1 -n boot</code></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></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 <a href="http://u-boot.bin/uEnv.txt/zImage/*.dtb">uEnv.txt/zImage/*.dtb</a> 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"><p><code><span style="color: rgb(0,51,102);">$ sudo mkdir -p /media/boot/dtbs</span></code></p><p><code><span style="color: rgb(0,51,102);">$ sudo cp -v am437x-smarct437x.dtb /media/boot/dtbs</span></code></p></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"><p><code><span style="color: rgb(0,51,102);">$ sudo tar -zxvf smarct437x-emmc-rootfs.tar.gz -C /media/rootfs</span></code></p></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"><p>Switch your Boot Select to eMMC and you will be able to boot up from SPI NOR flash and import u-boot environmental parameters and load kernel zImage and device tree blob from eMMC now.<br /> </p></div></div></div></div></div></div></div></div></div><div class="paragraph"><div class="paragraph"><div class="paragraph"><div class="paragraph"><div class="paragraph"><div class="paragraph"><div class="paragraph"><div class="paragraph"><div class="paragraph"><h1><span style="color: rgb(0,51,102);">Feed Packages<br /></span></h1><hr /><p><span style="color: rgb(0,0,0);">The following procedure can be used on a Embedian <em>SMARC-T437X</em> device to download and utilize the feed file show above to install the </span><em><span style="color: rgb(0,51,102);">minicom</span></em><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><code><span style="color: rgb(0,51,102);"># vim /etc/opkg/base-feeds.conf</span></code></p><p><code><span style="color: rgb(0,51,102);">Only keep the following three lines:</span></code></p><p><code><span style="color: rgb(0,51,102);">src/gz all <span class="nolink">http://www.embedian.com/core-sdk/smarct437x/smarct4x-processor-sdk-04</span>.01.00.06/deploy/ipk/all</span></code><br /><code><span style="color: rgb(0,51,102);">src/gz <span style="color: rgb(0,51,102);">armv7ahf-neon</span> <span class="nolink"><span class="nolink">http://www.embedian.com/core-sdk/smarct437x/smarct4x-</span></span>processor-sdk-04.01.00.06/deploy/ipk/<span style="color: rgb(0,51,102);">armv7ahf-neon</span></span></code><br /><code><span style="color: rgb(0,51,102);">src/gz smarct437x <span class="nolink"><span class="nolink">http://www.embedian.com/core-sdk/smarct437x/smarct4x-processor</span></span>-sdk-04.01.00.06/deploy/ipk/smarct437x</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># opkg update </code></span></p><p><span style="color: rgb(0,51,102);"><code># opkg upgrade </code></span></p><p><span style="color: rgb(0,51,102);"><code># opkg install minicom</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><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>DESCRIPTION = "Hello World Recipe using autotools" HOMEPAGE = "http://www.embedian.com/" SECTION = "console/utils" PRIORITY = "optional" LICENSE = "GPL" PR = "r0" SRC_URI = "git://git@git.embedian.com/developer/helloworld-autotools.git;protocol=ssh;tag=v1.0" S = "${WORKDIR}/git" inherit autotools</pre></td></tr></table><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><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>DESCRIPTION = "HelloWorld" SECTION = "examples" LICENSE = "GPL" SRC_URI = "file://helloworld.c" S = "${WORKDIR}" do_compile() { ${CC} ${CFLAGS} ${LDFLAGS} helloworld.c -o helloworld } do_install() { install -d ${D}${bindir} install -m 0755 helloworld ${D}${bindir} }</pre></td></tr></table><p> </p><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);">${OETREE}/build</span><span style="color: rgb(0,0,128);"><span style="color: rgb(0,51,102);">/arago-tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/<package name and version></span></span> for most packages. If the package is machine-specific (rather than generic for the armv7ahf architecture), it may be located in the smarct437x-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 href="http://docs.openembedded.org/usermanual/usermanual.html#chapter_recipes">Recipe Chapter</a> of the OpenEmbedded User Manual.</p><hr /><p>-- End of Document --</p></div><p>version 1.0a, 8/24/2016</p><p>Last updated 2018-03-24</p></div></div></div></div><p><span style="color: rgb(0,51,102);"><br /></span></p><div class="paragraph"><span style="color: rgb(0,51,102);"><span style="color: rgb(0,0,0);"> </span></span></div></div></div></div></div></div></div>
If you are unable to use this CAPTCHA please
contact your administrator
for assistance.
Attachments
Labels
Location
Edit
Preview
Save
Cancel
Next hint