GrabDuck

HummingBoard - Tizen Wiki

:

HummingBoard is an ARM development board with Freescale i.MX6 (ARMv7 architecture) manufactured by SolidRun. The following models of the board are available: HummingBoard-i1, HummingBoard-i2, and HummingBoard-i2eX.

The specifications of HummingBoard models are similar to the series of small computers Cubox-i which are also produced by SolidRun.

Wayland and its reference implementation of a compositor Weston are used in Tizen IVI and Tizen:Common.

Devices with Freescale i.MX6 ARM SoC support hardware acceleration which is required by Crosswalk for running HTML5 applications. Please note that hardware acceleration is also required for running QML applications.

The following article describes how to build Wayland and Weston manually from scratch on a Tizen device with Freescale i.MX6 ARM SoC.

This tutorial is based on the procedure for building Tizen:Common for RaspberryPi 2. It was been tested on Debian GNU/Linux 8.0 (Jessie), Ubuntu 14.04 LTS (Trusty Tahr), Ubuntu 14.10 (Utopic). Follow the steps below to build Tizen:Common for HummingBoard and Cubox-i with the following features:

  • Linux kernel 3.14.14
  • Wayland/Weston 1.6 with enabled hardware graphics acceleration

Prepare

  • Ensure that the following packages are installed on the host system
sudo apt-get install git python gcc g++ diffstat make gawk chrpath wget texinfo gettext
  • Create a local copy of the Tizen:Common Yocto distribution:
git clone https://github.com/konsulko/tizen-distro.git
cd tizen-distro
git clone -b av https://github.com/konsulko/meta-fsl-arm.git
git clone -b dizzy git://github.com/konsulko/meta-fsl-arm-extra.git

Configure

  • Initialize the build environment
source ./tizen-common-init-build-env build
    • For Tizen:Common stripped image, ready for IVI HMI
source ./open-ivi-init-build-env build-ivi

conf/local.conf

Apply the following changes to conf/local.conf:

  • Change machine to cubox-i:
MACHINE ??= "cubox-i"
  • Optionally change the following settings to optimize the build depending on the hardware specifications of your build system:
PARALLEL_MAKE ?= "-j 8"
BB_NUMBER_THREADS ?= "8"
  • Append the following additional configurations:
PACKAGE_CLASSES ?= "package_rpm"
ACCEPT_FSL_EULA = "1"
LICENSE_FLAGS_WHITELIST = "commercial non-commercial"
  • Remove X11 and rely only on Wayland and Weston
DISTRO_FEATURES_remove = "x11"
PREFERRED_VERSION_rpm = "4.11.0.1"
PREFERRED_VERSION_rpm-native = "4.11.0.1"
RPMROOTFSDEPENDS_remove = "rpmresolve-native:do_populate_sysroot"
  • Remove IrDA (because its installation depends on system V)
MACHINE_FEATURES_remove = "irda"
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
  • Optionally enable test suites for QA:
IMAGE_INSTALL_append = " common-suite-launcher common-sanity-suite common-graphics-suite"
  • Optionally add pulseaudio:
IMAGE_INSTALL_append = " pulseaudio pulseaudio-module-augment-properties pulseaudio-config pulseaudio-module-bluetooth "
IMAGE_INSTALL_append = " ofono ofono-test "
IMAGE_INSTALL_append = " firmware-imx gstreamer1.0 gstreamer1.0-plugins-imx-meta \
                        gstreamer1.0-plugins-base-meta gstreamer1.0-plugins-good-meta \
                        gstreamer1.0-plugins-bad-meta gstreamer1.0-plugins-good \
                        gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
                        gstreamer1.0-libav gstreamer1.0-plugins-base-playback \
                        gstreamer1.0-meta-base \
                        gstreamer1.0-meta-video \
                        gstreamer1.0-meta-audio \
                        gstreamer1.0-meta-debug \
                        gstreamer1.0-plugins-imx gstreamer1.0-plugins-ugly-meta \
                        gstreamer1.0-plugins-base \
                        "

COMMERCIAL_AUDIO_PLUGINS ?= " \
gst-plugins-ugly-mad \
gst-plugins-ugly-mpegaudioparse \
"
COMMERCIAL_VIDEO_PLUGINS ?= " \
gst-plugins-ugly-mpeg2dec \
gst-plugins-ugly-mpegstream \
gst-plugins-bad-mpegvideoparse \
gst-fsl-plugin \
"

CORE_IMAGE_EXTRA_INSTALL += " \
gst-plugins-base-videotestsrc \
gst-plugins-bad-fbdevsink \
alsa-utils \
gst-plugins-good-isomp4 \
"

conf/bblayers.conf

  • Append the following two lines to BBLAYERS and BBLAYERS_NON_REMOVABLE at conf/bblayers.conf (please note that the exact paths may vary depending on the installation directory):
  /media/storage/tizen-distro/meta-fsl-arm \
  /media/storage/tizen-distro/meta-fsl-arm-extra \
  • Optionally, append the following line at conf/bblayers.conf to provide Python recipes if want to build and run any test suites (please note that the exact paths may vary depending on the installation directory):
  /media/storage/tizen-distro/meta-openembedded/meta-python \
  • Optionally, append the following line at conf/bblayers.conf to provide netperf recipe if you want to build and run the test plan package group:
  /media/storage/tizen-distro/meta-openembedded/meta-networking \

After the modification the content of conf/bblayers.conf should be similar to (please note that the exact paths may vary depending on the installation directory):

# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "5"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /media/storage/tizen-distro/meta \
  /media/storage/tizen-distro/meta-fsl-arm \
  /media/storage/tizen-distro/meta-fsl-arm-extra \
  /media/storage/tizen-distro/meta-openembedded/meta-oe \
  /media/storage/tizen-distro/meta-openembedded/meta-multimedia \
  /media/storage/tizen-distro/meta-openembedded/meta-ruby \
  /media/storage/tizen-distro/meta-openembedded/meta-python \
  /media/storage/tizen-distro/meta-openembedded/meta-systemd \
  /media/storage/tizen-distro/meta-openembedded/meta-gnome \
  /media/storage/tizen-distro/meta-openembedded/meta-networking \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-adaptation/meta \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-adaptation/meta-oe \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-common-base \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-common-share \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-common-devtools \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-common-demo \
  "

BBLAYERS_NON_REMOVABLE ?= " \
  /media/storage/tizen-distro/meta \
  /media/storage/tizen-distro/meta-fsl-arm \
  /media/storage/tizen-distro/meta-fsl-arm-extra \
  /media/storage/tizen-distro/meta-openembedded/meta-oe \
  /media/storage/tizen-distro/meta-openembedded/meta-multimedia \
  /media/storage/tizen-distro/meta-openembedded/meta-ruby \
  /media/storage/tizen-distro/meta-openembedded/meta-python \
  /media/storage/tizen-distro/meta-openembedded/meta-systemd \
  /media/storage/tizen-distro/meta-openembedded/meta-gnome \
  /media/storage/tizen-distro/meta-openembedded/meta-networking \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-adaptation-oe-core \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-adaptation-meta-oe \
  /media/storage/tizen-distro/meta-tizen/meta-tizen-common-base \
  "

Build

Tizen:Common

  • Execute the following command to build Tizen:Common image with Wayland, Weston and Crosswalk:
bitbake tizen-common-crosswalk-imx6
  • If you prefer to build Tizen:Common without Crosswalk run:
bitbake tizen-common-imx6

Tizen:Common with IVI HMI

  • Execute the following command to build Tizen:Common stripped image with Wayland, Weston, Crosswalk and single user for IVI:
bitbake open-ivi-core
  • Execute the following command to build the same image with open source HTML5 HMI apps for IVI:
bitbake open-ivi-hmi

The build procedure might take up to several hours depending on the Internet connection and the performance of the build machine. Upon success the images will be located at: tmp-glibc/deploy/images/cubox-i/

Troubleshooting

Pam

  • On other distributions (which are different from Debian and Ubuntu) /tizen-distro/meta-tizen/meta-tizen-common-base/recipes-extended/pam/pam_git.bb may fail. In this case modify meta-tizen/meta-tizen-common-base/recipes-extended/pam/pam-extraconf.inc, apply the following change and restart the build:
@@ -23,7 +23,7 @@ RPROVIDES_${PN}-modules-extra += "pam-plugin-loginuid"
 
 RDEPENDS_${PN}_remove_class-native = "glibc-native"
 DEPENDS_remove_class-native = "net-tools-native"
-DEPENDS_append_class-target += "glib-2.0"
+DEPENDS_class-target += "glib-2.0"

Installing Tizen:Common Image

To boot and run Tizen:Common image that has been built with Yocto for HummingBoard you should copy it to a microSD. There are couple of ways to achieve this: using dd or using bmap.

Using dd

Replace X with the corresponding letter of the microSD card and execute the commands below with root privileges. The whole previous content of the microSD card will be wiped out.

sudo umount /dev/sdX*
sudo dd if=tmp-glibc/deploy/images/cubox-i/tizen-common-imx6-cubox-i.sdcard of=/dev/sdX
sync

Using bmaptool

Alternatively, you can use bmaptool to flash the image on microSD card. This tool is faster than dd, for example when you are flashing the image to a slow microSD card, bmaptool reduces the writing time from 20 minutes to approximately 4 minutes.

  • Make sure that bmaptool is present:
sudo apt-get install bmap-tools
  • Replace X with the corresponding letter of the microSD card and execute the commands below with root privileges.
sudo umount /dev/sdX*
sudo bmaptool copy --nobmap tmp-glibc/deploy/images/cubox-i/tizen-common-imx6-cubox-i.sdcard /dev/sdX

Booting Tizen:Common

After booting Tizen:Common on HummingBoard you should see something similar to the photo below. The root password is root.

Common on HummingBoard-i2eX

Validating Hardware Graphics Acceleration

After booting the board you can validate that Weston has been loaded successfully with hardware graphics acceleration through its log at /run/display/weston.log. This is a sample output from HummingBoard-i2eX:

root@cubox-i:~# less /run/display/weston.log                                   
WARNING: terminal is not fully functional
Date: 1970-01-01 UTClog  (press RETURN)
[00:00:09.195] weston 1.6.0
               http://wayland.freedesktop.org/
               Bug reports to: https://bugs.freedesktop.org/enter_bug.cgi?produc
t=Wayland&component=weston&version=1.6.0
               Build: tizen_3.0_ivi_release-dirty Fixed weston transfromation pr
oblem (2015-01-08 18:51:08 +0200)
[00:00:09.195] OS: Linux, 3.14.14+g4a2f77e, #1 SMP Thu May 7 15:00:25 EEST 2015,
 armv7l
[00:00:09.195] warning: XDG_RUNTIME_DIR "/run/display" is not configured
correctly.  Unix access mode must be 0700 (current mode is 770),
and must be owned by the user (current owner is UID 115).
Refer to your distribution on how to get it, or
http://www.freedesktop.org/wiki/Specifications/basedir-spec
on how to implement it.
[00:00:09.197] Using config file '/etc/xdg/weston/weston.ini'
[00:00:09.199] Loading module '/usr/lib/weston/fbdev-backend.so'
[00:00:09.207] initializing fbdev backend
[00:00:09.211] compositor->use_gal2d=1
[00:00:09.212] Loading module '/usr/lib/weston/gal2d-renderer.so'
[00:00:09.241] param->device=/dev/fb0
[00:00:09.241] Creating fbdev output. /dev/fb0 x=0 y=0
[00:00:09.241] Opening fbdev frame buffer.

QA

Several test suites are available for Tizen:Common. For details please have a look at Common QA.

Make sure that you have enabled test suites in the image built with Yocto. Log in as root on the device and execute the following commands to run the tests:

  • Show a list of the available test suites
common-suite-launcher list
  • Run QA suites: common-sanity-suite and common-graphics-suite
common-suite-launcher launch --suites common-sanity-suite common-graphics-suite

If you are interested in building Tizen IVI using Yocto for HummingBoard or other devices with Freescale i.MX6 SoC please have a look at the following article.

Gstreamer

Playing Video

  • To play a video without sound execute:
gst-play-1.0 --interactive --audiosink fakesink --videosink=autodetect foo.mp4

To play a video with sound execute:

gst-play-1.0 --audiosink=alsasink --videosink=autodetect foo.mp4

Serial Connecion

It is possible to debug Tizen images on HummingBoard using 3.3V USB to serial cable, such as Olimex USB-Serial-Cable-F, connected to the UART of the board. Follow the instructions below to connect a cable to the board (do it on your own risk, no warranty is provided):

  • The RX line of the cable (GREEN wire if you are using Olimex USB-Serial-Cable-F) should go to pin 8 (TX line) of HummingBoard,
  • The TX line of the cable (RED wire if you are using Olimex USB-Serial-Cable-F) should go to pin 10 (RX line) of HummingBoard,
  • The BLUE wire if you are using Olimex USB-Serial-Cable-F should go to pin 6 (GND line which is also available on pins 9,14,20, and 25) of HummingBoard.
Plug the USB connector of the cable to your computer and use your favorite tool for serial communication, for example on Ubuntu and other Linux distributions you may use screen:
sudo screen /dev/ttyUSB0 115200

For more information and details check the article about serial console at SolidRun wiki.

Debugging Crosswalk Apps

Follow the steps below to enable remote debugging of Crosswalk applications:

  • Add a --remote-debugging-port=9222 option to the ExecStart= line in the Crosswalk service configuration file: /usr/lib/systemd/user/xwalk.service
  • Reboot the device
  • Launch Crosswalk application with option -d to enable remote debugging.

For more details please check Crosswalk remote debugging.

Temperature

Run the following command to retrieve the temperature of the SoC (in Celsius):

echo $((`cat /sys/class/thermal/thermal_zone0/temp|cut -c1-2`)).$((`cat /sys/class/thermal/thermal_zone0/temp|cut -c3-5`))

Runtime package management in Tizen on Yocto with Smart

Capture screenshot in Tizen device with Freescale i.MX6

Connecting to a Smartphone with Bluetooth and Making Phone Calls