VAR-SOM-MX6 Yocto GS: Difference between revisions

From Variscite Wiki
No edit summary
No edit summary
Line 1: Line 1:
{{DocImage|category1=VAR-SOM-MX6|category2=}}
{{DocImage|category1=VAR-SOM-MX6|category2=Yocto}}
=VAR-SOM-MX6 - Yocto V4.1 Dora R2 =
=VAR-SOM-MX6 - Yocto V4.1 Dora R2 =
__toc__
__toc__

Revision as of 12:48, 19 January 2014

VAR-SOM-MX6 - Yocto V4.1 Dora R2

Introduction

This is the second release of VAR-SOM-MX6 - Yocto V4.1 Dora. We updated the kernel with features and cleanup update u-boot and added support for Bluetooth and camera on the Dual lite and Solo SOM versions.
We also added 2 packages that enable Eclipse/Yocto application debug. A debug application note will come soon.

Supported hardware and features

Feature
Description
Board support
VAR-DVK-MX6,VAR-SOM-MX6
CPU

i.MX6 Quad
i.MX6 Dual
i.MX6 Dual lite
i.MX6 Solo

Software platform

Yocto Dora release.
Freescale release version 4.1
Meta freescale community release for Dora

Nand Recovery NAND-recovery SD V22 - can be downloaded from FTP
NAND Flash size support
0.5,1.0,2.0 GB
SD-Card
+
Wired Network
10/100/1000 Mbps Ethernet
Wireless Network
802.11 b/g/n
Bluetooth
4.0
USB host
+
USB OTG
Host and Device
Uarts
x3, up to 3.6 Mbps. Minicom avilable to use with the port
RTC
+
Display HDMI 720P,1080P LVDS0 (On board LVDS to RGB bridge, EVK supports 800x480 resolution) LVDS1 external display
Audio Line IN/ Line out
Camera ov5640 camera sensor. CB402 board can be ordered seperately
SATA +

Variscite Yocto Dora release 2 for Freescale i.MX6 version 4.1.

Installing required packages

Follow the link below and install all the required packages on your machine.

www.yoctoproject.org/docs/latest/yocto-project-qs/yocto-project-qs.html

For example, if building machine is an Ubuntu machine:

sudo apt-get install gawk wget git-core diffstat unzip texinfo build-essential chrpath libsdl1.2-dev xterm

Variscite Yocto build is tested with Ubuntu 12.04 lts.

Get Yocto Dora for i.MX with Variscite SOM support

Method 1 recommended

$ cd ~
$ tar xvf var_yocto_rel_v3.2.tar.bz2

This will install an entire tree. No need to do any patch.

Method 2 using "Repo"

Install the `repo` utility:

$ mkdir ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH

In case of repo problems we uploaded a tested version into our ftp site. Use it please.

Get Yocto Dora from github.

$ cd ~
$ mkdir var-som-mx6-dora-v3
$ cd var-som-mx6-dora-v3
$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b dora
$ repo sync

Download var_yocto_v3.2.tar.bz2 from Variscite FTP.

$ tar xvf var_yocto_v3.2.tar.bz2
$ variscite/install


Setup and Customize your Yocto build

Setup the environment and build folder

MACHINE=varsommx6q . setup-environment build_mx6q

local.conf customizations

edit conf/local.conf

Set:

MACHINE options

Macine selection

MACHINE ??= 'varsommx6q'
Build for the Quad or The Dual MX6 SOC version
MACHINE ??= 'varsommx6dual'
Build for the Dual Lite MX6 SOC version
MACHINE ??= 'varsommx6solo'
Build for the Solo MX6 SOC version

Parallel build

Set the build parameters to fully utilize your host machine

BB_NUMBER_THREADS = '4'
PARALLEL_MAKE = '-j 6'

BB_NUMBER_THREADS should be your host machine number of threads minus 2 or same.

PARALLEL_MAKE should be the number of threads your host machine has plus two.

download directory.

Recommended to save download time and space.

DL_DIR = "/home/<uname>/yocto_dl"

Build your image

$ bitbake core-image-base
$ bitbake fsl-image-test
$ bitbake fsl-image-gui 


image name
description
core-image-base
A console-only image that fully supports the target device hardware.
fsl-image-test
Builds contents core-image-base plus Freescale test applications and multimedia components.
fsl-image-gui
Builds contents of core-image-sato with Freescale test applications and multimedia with hardware accelerated X11


The resulted images are in tmp/deploy/images/varsommx6q.
Looking at tmp/deploy/images/varsommx6q you will find 6 main files that are linked to the actual file

Image Name
How to use
fsl-image-gui-varsommx6q.ext3
Not in Use
fsl-image-gui-varsommx6q.sdcard

Flash into SD-card and use boot select to boot from.

$ sudo dd if=tmp/deploy/images/varsommx6q/fsl-image-gui-varsommx6q.sdcard of=/dev/devxxx bs=1024k

devxxx = mmcblk0 or sdX. Do dmesg after you insert an SD-Card into your build system to figure out the device name

fsl-image-gui-varsommx6q.tar.bz2

Used to create an NFS root file system on the host.

$ sudo mkdir ../rootfs
$ sudo rm -rf ../rootfs/*
# sudo tar xvf tmp/deploy/images/varsommx6q/fsl-image-gui-varsommx6q.tar.bz2 -C ../rootfs

See apendix for setting an NFS server

fsl-image-gui-varsommx6q.ubi
u-boot.bin
uImage

The best practice is to use Variscite's NAND-recovery SD-Card. update the Yocto folder on the SD-Card
/opt/recover/Yocto and replace u-boot, uImage and the UBI files with the files on tmp/deploy/images.

You can also look at /sbin/nand-recovery.sh for the excat procedure to flash the nand.

U-Boot options

By default all images are built for NAND based U-Boot. If you want to change the setting to build SD-Card images, change the board file.

under ~/var_yocto/sources/meta-fsl-arm-extra/conf/machine you will find Variscite board definitions.

varsommx6q.conf
varsommx6solo.conf
varsommx6dual.conf

Edit you specifc board and change UBOOT_MACHINE according to the folowing table.

Definition
Built for
mx6q_var_som_config
VAR-SOM-MXQ/D,  boot from MMC
mx6solo_var_som_config
VAR-SOM-MXSolo, boot from MMC
mx6dl_var_som_config
VAR-SOM-MXDL,    boot from MMC
mx6q_var_som_nand_config
VAR-SOM-MXQ/D,  boot from NAND
mx6solo_var_som_nand_config
VAR-SOM-MXSolo, boot from NAND
mx6dl_var_som_nand_config
VAR-SOM-MXDL,    boot from NAND

Toolchain

Build the toolchain by:

$ bitbake meta-ide-support
$ bitbake meta-toolchain

The output will be located at tmp/deploy/sdk/. On a 64 bit Ubuntu you will get:

poky-eglibc-x86_64-meta-toolchain-cortexa9hf-vfp-neon-toolchain-1.5.sh.

Install the tools by running:

$ tmp/deploy/sdk/poky-eglibc-x86_64-meta-toolchain-cortexa9hf-vfp-neon-toolchain-1.5.1.sh

The toolchain name depend on your build machine and may change.

Build Linux out of Yocto tree

Prepare the Linux kernel

$ bitbake -c cleansstate linux-variscite
$ bitbake -c devshell linux-variscite 

This will open a new shell at ...tmp/work/varsommx6q-poky-linux-gnueabi/linux-variscite/3.0.35-r0/git#

Copy the Linux kernel to a new folder

$ mkdir ~/var-som-mx6-dora-v3/linux-imx
$ cp -a * ~/var-som-mx6-dora-v3/linux-imx
$ exit

change dir into the new Linux kernel folder

$ cd ~/var-som-mx6-dora-v3/linux-imx

Set the tools path:

$ export PATH=/opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin:/opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi:$PATH

Clean the Linux kernel:

$ make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- mrproper

Configure the Linux kernel:

$ make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- var_som_mx6_defconfig

Change configuration if required:

$ make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- menuconfig

Build the Linux kernel:

$ make -j6 ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- uImage
$ make -j6 ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- modules

The best practice of testing the new Linux kernel is using TFTP&NFS. Described in the apendix.

$ cp arch/arm/boot/uImage /tftpboot

Install the Linux modules into the rootfs file system

$ sudo make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- modules_install INSTALL_MOD_PATH=../rootfs

Build U-Boot out of Yocto tree

Prepare the U-Boot boot loader

$ bitbake -c cleansstate u-boot-variscite
$ bitbake -c devshell u-boot-variscite 

This will open a new shell at ...tmp/work/varsommx6q-poky-linux-gnueabi/linux-variscite/3.0.35-r0/git#

Copy the U-Boot boot loader to a new folder

$ mkdir ~/var-som-mx6-dora/uboot-imx
$ cp -a * ~/var-som-mx6-dora/uboot-imx
$ exit

change dir into the new u-boot folder

$ cd ~/var-som-mx6-dora/uboot-imx

set the tools path if required

$ export PATH=/opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin:/opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin/cortexa9hf-vfp-neon-poky-linux-gnueabi:$PATH

Clean the U-Boot

$ make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- mrproper

Configure the U-Boot boot loader

$ make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- mx6q_var_som_nand_config

Build the U-Boot boot loader

$ make -j6 ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- 

Use our NAND-recovery sd-card to burn your u-boot to the NAND-Flash.

In case you build an sd-card version use

sudo dd if=u-boot.bin of=/dev/mmcblk0 bs=512 seek=2 skip=2 conv=fsync

Set the /dev/mmcblk0 according to you host sd-card device.

Creating recovery SD-Card

Comment: we use Ubuntu 12.04 mount convention and a laptop media name. "/media/var_som_mx6_rf" and "/dev/mmcblk0" are widely used in this section.
You should be aware of this and change the media name to you host machine name.

Create a new folder:

$ mkdir ~/my_recovery_sd
$ cd ~/my_recovery_sd

Insert Variscite recovery SD-Card version 19 into your host machine.

Copy the recovery folder from the SD-Card into your local folder:

$ sudo cp -a /media/var_som_mx6_rf/opt/recovery ./
$ sudo cp /media/var_som_mx6_rf/sbin/nand-recovery.sh ./

Update your local folder with the files you created during the Yocto build:

$ sudo cp ~/var-som-mx6-dora/build_mx6q/tmp/deploy/images/varsommx6q/fsl-image-gui-varsommx6q.ubi recovery/Yocto/rootfs.ubi.img
$ sudo cp ~/var-som-mx6-dora/build_mx6q/tmp/deploy/images/varsommx6q/fsl-image-gui-varsommx6q.tar.bz2 recovery/Yocto/rootfs.tar.bz2
$ sudo cp ~/var-som-mx6-dora/build_mx6q/tmp/deploy/images/varsommx6q/uImage recovery/Yocto/uImage
$ sudo cp ~/var-som-mx6-dora/build_mx6q/tmp/deploy/images/varsommx6q/u-boot.bin recovery/Yocto/u-boot.bin 

Copy the SD-Card image from your Yocto build folder to the local recovery folder:

$ sudo cp ~/var-som-mx6-dora/build_mx6q/tmp/deploy/images/varsommx6dual/fsl-image-gui-varsommx6dual.sdcard ./

Build U-Boot for SD-Card. Follow the "Build U-Boot out of Yocto tree" section.

Configure U-Boot with:

$ make ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- mx6q_var_som_config

Build U-Boot:

$ make -j6 ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi- 

Copy U-Boot from your U-Boot build folder to the local recovery folder:

$ cp u-boot.bin ~/my_recovery_sd

From ~/my_recovery_sd folder

Unmount your SD-Card.

Build the SD-Card. First flash the SD-Card image and U-Boot.

$ sudo dd if=fsl-image-gui-varsommx6q.sdcard of=/dev/mmcblk0 bs=1M
$ sudo dd if=u-boot.bin of=/dev/mmcblk0 bs=512 seek=2 skip=2 conv=fsync
$ sync

Set the SD-Card label:

$ Sudo apt-get install gparted
$ sudo gparted
Set the label to var_som_mx6_rf

Mount the SD-Card. You can simply remove it and inster it again to your host machine.

Copy all files from the recovery folder on your host machibe into the SD-Card:

$ sudo cp -a recovery/ /media/var_som_mx6_rf/opt/
$ sudo cp nand-recovery.sh /media/var_som_mx6_rf/sbin/
$ sudo rm /media/var_som_mx6_rf/var/lib/alsa/asound.state 

If you want you can back up your new SD-Card image:

Un mount the SD-Card

$ sudo dd of=mx6qd-som-nand-recovery-sd.v19.img if=/dev/mmcblk0 bs=1M 


Comment:
I used "/dev/mmcblk0" as the SD-Card device name. You should replace it with your own SD-Card device name.

Appendix

Running Yocto rootfs on Variscite board using tftp & nfs

Host

Make sure you installed NFS server:

$ sudo apt-get install nfs-kernel-server
$ cd ~/var-som-mx6-dora-v3
$ sudo mkdir rootfs
$ cd rootfs
$ sudo tar xvf ../build_mx6q/tmp/deploy/images/vafsl-image-gui-varsommx6q.tar.bz2 
$ sudo gedit /etc/exports 

add:

/home/<uname>/var-som-mx6-dora-v3/rootfs *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)

exit & save

$ sudo /etc/init.d/nfs-kernel-server restart

Make sure you installed TFTP server:

$ sudo apt-get install xinetd tftpd tftp
Verify:
$ ls /usr/sbin/in.tftpd
$ sudo gedit /etc/xinetd.d/tftp
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}
$ sudo mkdir /tftpboot
$ sudo chmod -R 777 /tftpboot
$ sudo /etc/init.d/xinetd restart
$ cp ~/var-som-mx6-dora/buildmx6q/tmp/deploy/images/varsommx6q/uImage /tftpboot

Target

make sure you have a serial connection to the target.

reset and hold the space bar. This will brink you to u-boot prompt

$ setenv serverip 192.168.1.188
$ setenv ethaddr a8:cc:3d:d9:b8:f5
$ setenv kernel uImage
$ setenv nfsroot /home/<uname>/fsl-community-bsp/rootfs
$ setenv bootcmd run bootcmd_net
$ saveenv 

You are all set. Pushing reset on the VAR-SOM-MX6 board will run your Yocto result file system.

Useful Bitbake commands

http://elinux.org/Bitbake_Cheat_Sheet

https://community.freescale.com/docs/DOC-94953

i.MX Yocto Project: ltib versus bitbake:

https://community.freescale.com/docs/DOC-94874

Unit Testing

GPU

Play OpenGLES demo, from Linux shell type:

$ modprobe galcore
$ cd /opt/viv_samples/vdk/ && ./tutorial3 -f 1000

WLAN

List SSIDs, from Linux shell type:

$ ifconfig wlan0 up
$ iwlist wlan0 scan

Connecting to an encrypted network

Find your network from the above scan command.

wpa_passphrase <YourAP> <YourPassword> >wpa.conf
ps | grep wpa_supplicant
kill the wpa_supplicant process if exist.
wpa_supplicant -Dwext -iwlan0 -c./wpa.conf -B
udhcpc -iwlan0
ifconfig

Video playback

Play video file, from linux shell type:

$ gplay <file>

HDMI, LVDS , LCD boot arguments

All paramters are u-boot enviroment parameters.

Default:

U-Boot # setenv bootargs_base 'setenv bootargs console=ttymxc0,115200'

This will set the LCD to work.

HDMI 1080P:

U-Boot # setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB16 fbmem=48M vmalloc=400 mxc_hdmi.only_cea=1'

mxc_hdmi.only_cea=1 paramter is to work with dvi-hdmi adapter. If you connect it to a TV-HDMI this paramters is not required.

HDMI 720P:

U-Boot # setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24'

LVDS and LCD Dual display:

U-Boot # setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 ldb=dul0'

LVDS only display:

U-Boot # setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 ldb=sin1'

LVDS only display with screen paramters:

U-Boot # setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 ldb=sin1 video=mxcfb0:dev=ldb,800x600M@60,if=RGB24'

RTC

To set the RTC first set the date from Linux shell, type:

$ date 2013.08.27-15:43

Then set the real time clock from Linux shell, type:

$ hwclock --systohc

Power down your board wait 5 minutes and power up. Check your system with date and the time should be up to date.

Camera

$ modprobe ov5642_camera
$ modprobe mxc_v4l2_capture
$ /etc/rc5.d/S01xserver-nodm stop
$ gst-launch mfw_v4lsrc ! mfw_v4lsink

USB OTG as host

Plugin Disk on Key Keyboard or Mouse. It will work automaticly.

Use the file manager and the mouse to browse the file system.

You can open terminal and type in Linux commands.

USB OTG as device

Plug a cable to a A linux host.

Folow www.linux-usb.org/gadget/file_storage.html and build the backing_file.

On the Target:

modprobe g_file_storage file=./backing_file

On the Host:

use dmesg and find out your device for example /dev/sdb
sudo dd if=/dev/zero of=/dev/sdb bs=128k count=1000

3 ports USB Host

Plug a DiskOnKey, Mouse or Keyboard to any of the 3 ports.

canbus

  1. Patch the kernel. Download 0001-can-bus-enable.patch from our ftp site. Place it in VAR-MX6-yocto-dora-v3/sources/meta-fsl-arm-extra/recipes-kernel/linux/linux-variscite-3.0.35. Edit linux-variscite_3.0.35.bb change:
    # SRC_URI += "file://0001-file-rename.patch \
    #"
    into:
    SRC_URI += "file://0001-can-bus-enable.patch \
    "
  2. Add canutils. Edit VAR-MX6-yocto-dora-v3/sources/meta-fsl-demos/recipes-fsl/images/fsl-image-gui.bb. Add canutilis to the image build.
    IMAGE_INSTALL += " \
    ${SOC_IMAGE_INSTALL} \
    cpufrequtils \
    nano \
    packagegroup-fsl-gstreamer \
    packagegroup-fsl-tools-testapps \
    packagegroup-fsl-tools-benchmark \
    packagegroup-qt-in-use-demos \
    qt4-plugin-phonon-backend-gstreamer \
    qt4-demos \
    qt4-examples \
    fsl-gui-extrafiles \
    minicom \
    imx-kobs \
    tcf-agent \
    openssh-sftp-server \
    canutils \
    "
  3. Build and deploy your image.
  4. Connect 2 boards. Each board JP26 connect to the other with the right cable.

Set the 2 boards:

$ canconfig can0 bitrate 125000
$ ifconfig can0 up 

On board 1:

canecho can0 -v

On board 2:

cansend can0 -i0x100 11 22 33 44