This document provides instructions for advanced users how Embedian offers patches and builds a customized version of u-boot and linux kernel for Embedian's SMARC-FiMX6 product platform and how to install the images to bring the evaluation board up and running.
Our aim is to fully support our hardware through device drivers. We also provide unit tests so that testing a board is easy and custom development can start precisely.
SMARC-FiMX6 at Embedian
SBC-SMART-BEE (module and carrier board) at Embedian
SBC-SMART-MEN (module and carrier board) at Embedian
EVK-STD-CARRIER (universal carrier board for all SMARC modules) at Embedian
This is a pre-built (32bit) version of Linaro GCC that runs on generic linux, so 64bit users need to make sure they have installed the 32bit libraries for their distribution.
debian based | extra | pkgs: (sudo apt-get update ; sudo apt-get install xyz) |
---|---|---|
Ubuntu 12.04 |
| ia32-libs |
Debian 7 (Wheezy) | sudo dpkg --add-architecture i386 | libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386 |
Ubuntu 12.10 -> 14.04 |
| libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386 |
Red Hat/Centos/Fedora |
| libstdc++.i686 ncurses-devel.i686 zlib.i686 |
Red Hat based (rpm) | extra | pkgs: (yum install xyz) |
Red Hat/Centos/Fedora |
| libstdc++.i686 ncurses-devel.i686 zlib.i686 |
Ubuntu 12.04 |
| ia32-libs |
Ubuntu 12.10 -> 14.04 |
| libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386 |
To build Embedian’s SMARC-FiMX6 u-boot and linux kernel, you will need to install the Linaro arm compiler that is the same as that we build for SMARC-T335X:
$ sudo tar -C /opt -xJf gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux.tar.xz $ export CC=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf- |
Test:
If this test fails, verify that you have the 32bit libraries installed on your development system.
$ ${CC}gcc --version |
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.
First, we need to check for existing ssh keys on your computer. Open up Git Bash and run:
$ cd ~/.ssh $ ls # Lists the files in your .ssh directory |
Check the directory listing to see if you have a file named either id_rsa.pub
or id_dsa.pub
. If you don't have either of those files go to step 2. Otherwise, you already have an existing keypair, and you can skip to step 3.
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.
$ 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 |
Now you need to enter a passphrase.
Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again] |
Which should give you something like this:
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 |
Copy the key to your clipboard.
$ 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 |
Go to Embedian Git Server. At Profile Setting --> SSH Keys --> Add SSH Key
Paste your public key and press "Add Key" and your are done.
Clone the U-Boot source code from Embedian Git Server.
Download:
$ git clone git@git.embedian.com:developer/smarc-t335x-uboot.git smarcfimx6-uboot $ cd smarcfimx6-uboot $ git checkout smarc-imx_v2014.04_3.14.28_1.0.0_ga |
Configure and Build:
$ make ARCH=arm CROSS_COMPILE=${CC} distclean $ make ARCH=arm CROSS_COMPILE=${CC} smarcfimx6_quad_1g_ser3_config $ make ARCH=arm CROSS_COMPILE=${CC} |
Note1: If the board is SMARC-FiMX6-Q-2G or SMARC-FiMX6-D-2G, use If the board is SMARC-FiMX6-Q-1G or SMARC-FiMX6-D-1G, use If the board is SMARC-FiMX6-U-1G, use If the board is SMARC-FiMX6-S, use Note 2: "ser3" stands for console debug port. In this example, we uses SER3 as debug port. If user uses SER0 as your debug port, make change to "ser0" instead. Same as SER1 and SER2. |
Download:
For 3.14.28 (Based on Freescale imx_3.14.28_1.0.0_ga official release):
$ git clone git@git.embedian.com:developer/smarc-fsl-linux-kernel.git $ cd smarc-fsl-linux-kernel $ git checkout smarc-imx_3.14.28_1.0.0_ga |
Configure and Build:
$ make ARCH=arm CROSS_COMPILE=${CC} distclean $ make ARCH=arm CROSS_COMPILE=${CC} smarcfimx6_defconfig $ make ARCH=arm CROSS_COMPILE=${CC} zImage modules imx6q-smarcfimx6.dtb imx6dl-smarcfimx6.dtb |
Note1: If the board is Dual or Quad core, the device tree blob is imx6q-smarcfimx6.dtb. If the board is Dual Lite or Solo core, the device tree blob is imx6dl-smarcfimx6.dtb |
Ubuntu 14.04:
User | Password |
---|---|
root | root |
ubuntu | temppwd |
Ubuntu 14.04 Download:
$ wget -c ftp://ftp.embedian.com/public/dev/minfs/trusty/imx6-ubuntu1404.tar.gz |
Verify:
$ md5sum imx6-ubuntu1404.tar.gz |
Yocto Build Root File System:
User | Password |
---|---|
root | N/A |
Find the yocto pre-built root file systems here at Embedian's ftp site based on your module CPU variants.
For these instruction, we are assuming: DISK=/dev/mmcblk0, "lsblk" is very useful for determining the device id.
$ export DISK=/dev/mmcblk0 |
Erase SD card:
$ |
Create Partition Layout:
$ sudo sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__ 1 , 48 , 0x83 ,* ,,,- __EOF__ |
Format Partitions:
for : DISK=/dev/mmcblk0 $ sudo mkfs.vfat -F 16 ${DISK}p1 -n boot $ sudo mkfs.ext4 ${DISK}p2 -L rootfs for : DISK=/dev/sdX $ sudo mkfs.vfat -F 16 ${DISK} 1 -n boot $ sudo mkfs.ext4 ${DISK} 2 -L rootfs |
Mount Partitions:
On some systems, these partitions may be auto-mounted...
$ sudo mkdir -p /media/boot/ $ sudo mkdir -p /media/rootfs/ for : DISK=/dev/mmcblk0 $ sudo mount ${DISK}p1 /media/boot/ $ sudo mount ${DISK}p2 /media/rootfs/ for : DISK=/dev/sdX $ sudo mount ${DISK} 1 /media/boot/ $ sudo mount ${DISK} 2 /media/rootfs/ |
Copy u-boot.bin to the boot partition
$ sudo cp -v u-boot.bin /media/boot/ |
Create "uEnv.txt" boot script: ($ vim uEnv.txt)
optargs="video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 consoleblank=0" |
Copy uEnv.txt to the boot partition:
$ sudo cp -v ~/uEnv.txt /media/boot/ |
Copy zImage to the boot partition:
$ sudo cp -v arch/arm/boot/zImage /media/boot |
$ sudo mkdir -p /media/boot/dtbs $ sudo cp -v arch/arm/boot/dts/imx6q-smarcfimx6.dtb arch/arm/boot/dts/imx6dl-smarcfimx6.dtb /media/boot/dtbs |
Yocto Pre-Built Rootfs:
$ sudo tar xvfz <filename.tar.gz> -C /media/rootfs |
Ubuntu 14.04:
$ sudo tar xvfz imx6-ubuntu1404.tar.gz -C /media/rootfs |
$ sudo make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules_install |
|
Networking:
Edit: /etc/network/interfaces
$ sudo vim /media/rootfs/etc/network/interfaces |
Add:
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp |
Remove SD card:
$ sync $ sudo umount /media/boot $ sudo umount /media/rootfs |
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 SMARC-FiMX6, 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.
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.
First, we need to backup the final firmware from your SD card or NFS.
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.
For these instruction, we are assuming: DISK=/dev/mmcblk0, "lsblk" is very useful for determining the device id.
$ export DISK=/dev/mmcblk0 |
Mount Partitions:
On some systems, these partitions may be auto-mounted...
$ sudo mkdir -p /media/boot/ $ sudo mkdir -p /media/rootfs/ for : DISK=/dev/mmcblk0 $ sudo mount ${DISK}p1 /media/boot/ $ sudo mount ${DISK}p2 /media/rootfs/ for : DISK=/dev/sdX $ sudo mount ${DISK} 1 /media/boot/ $ sudo mount ${DISK} 2 /media/rootfs/ |
Changing Device descriptor from U-Boot:
There is only one line needed to be changed from original u-boot.
At include/configs/smarcfimx6.h, find
#define CONFIG_SYS_MMC_ENV_DEV
Change from "0" to "2" and make again.
(Users can also checkout the smarc-emmc-imx_3.14.28_1.0.0_ga branch from Embedian u-boot git server by the following way.
$ git checkout smarc-imx_3.14.28_1.0.0_ga
$ make ARCH=arm CROSS_COMPILE=${CC} distclean
$ make ARCH=arm CROSS_COMPILE=${CC} smarcfimx6_quad_1g_ser3_config
$ make ARCH=arm CROSS_COMPILE=${CC}
)
The new u-boot.bin will be the one for eMMC use.
Copy u-boot.bin to rootfs partition:
$ sudo cp -v u-boot.bin /media/rootfs/home/root |
|
Copy zImage to rootfs partition:
$ sudo cp -v /media/boot/zImage /media/rootfs/home/root |
Copy uEnv.txt to rootfs partition:
Copy and paste the following contents to /media/rootfs/home/root ($ sudo vim /media/rootfs/home/root/uEnv.txt)
optargs="video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24,bpp=32 consoleblank=0" |
Copy device tree blob to rootfs partition:
$ sudo cp -v /media/boot/dtbs/imx6q-smarcfimx6.dtb /media/rootfs/home/root/imx6q-smarcfimx6.dtb |
Copy real rootfs to rootfs partition:
Yocto Built Root File Systems
$ pushd /media/rootfs $ sudo tar cvfz ~/smarcfimx6-emmc-rootfs.tar.gz . $ sudo mv ~/smarcfimx6-emmc-rootfs.tar.gz /media/rootfs/home/root $ popd |
Ubuntu 14.04 Root File Systems
$ sudo vim /media/rootfs/etc/udev/rules.d/70-persistent-net.rules Delete all contents starting with "SUBSYSTEM==" $ pushd /media/rootfs $ sudo tar cvfz ~/smarcfimx6-emmc-rootfs.tar.gz . $ sudo mv ~/smarcfimx6-emmc-rootfs.tar.gz /media/rootfs/home/root $ popd |
Remove SD card:
$ sync $ sudo umount /media/boot $ sudo umount /media/rootfs |
Insert this SD card into your SMARC-FiMX6 device.
Now it will be almost the same as you did when setup your SD card, but the eMMC device descriptor is /dev/mmcblk3 now.
$ export DISK=/dev/mmcblk3 |
Erase SD card:
$ |
Create Partition Layout:
$ sudo sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__ 1 , 48 , 0x83 ,* ,,,- __EOF__ |
Format Partitions:
$ sudo mkfs.vfat -F 16 ${DISK}p1 -n boot $ sudo mkfs.ext4 ${DISK}p2 -L rootfs |
Mount Partitions:
$ sudo mkdir -p /media/boot/ $ sudo mkdir -p /media/rootfs/ $ sudo mount ${DISK}p1 /media/boot/ $ sudo mount ${DISK}p2 /media/rootfs/ |
Copy u-boot.bin/uEnv.txt/zImage/*.dtb to the boot partition
$ sudo cp -v u-boot.bin zImage uEnv.txt /media/boot/ |
$ sudo mkdir -p /media/boot/dtbs $ sudo cp -v imx6q-smarcfimx6.dtb imx6dl-smarcfimx6.dtb /media/boot/dtbs |
$ sudo tar -zxvf smarcfimx6-emmc-rootfs.tar.gz -C /media/rootfs |
Unmount eMMC:
$ sync $ sudo umount /media/boot $ sudo umount /media/rootfs |
Switch your Boot Select to eMMC and you will be able to boot up from eMMC now.
version 1.0a, 3/23/2015
Last updated 2015-05-07