Introduction
First of all exists two version of SABRE: Smart Device and Automotive Infotainment. Those information focus on the second, but can also be valid for the first device.This document is focused on QUAD IMX6 version. Dual and also Solo are similar.
Actually the SABRE AI Quick Start Guide is the main source for starting but this guide is not available online, now.
Preparing SD-CARD
The instruction for installing the image can be found in
chapter8 of
i.MX_6Dual6Quad_Sabre-AI_Linux_User_Guide.pdf,
contained in the L3.0.35_4.0.0_LINUX_DOCS
package.
Data file can be found on FreeScale website [1] under section Demo Images for i.MX 6Quad/Dual
Installing DEMO IMAGE
The last release is L3.0.35_4.0.0_DEMO_IMAGE
To install (flash on sd-card) u-boot:
sudo dd if=u-boot-mx6q-sabreauto.bin of=/dev/[device name] bs=512 seek=2 skip=2 conv=fsyncfor example
sudo dd if=u-boot-mx6q-sabreauto.bin of=/dev/sdc bs=512 seek=2 skip=2 conv=fsync(please, take care of the name of disk device)
and install the linux kernel (which one?) at 0x10000000
sudo dd if=uImage of=/dev/[device name] bs=512 seek=2048 conv=fsync
After, following instruction of pdf, it is necessary to create
the partition for the linux OS.
sudo mkfs.ext3 /dev/[partion]
Mount the source file system
sudo mount -o loop -t ext2 rootfs.ext2 <mount point>
mount the SD card, change dir inside the <mount point>
and copy all files.
sudo cp -av * <sd card>
Files involved in this stage were
L3.0.35_4.0.0_130424_images_MX6/u-boot-mx6q-sabreauto.bin
L3.0.35_4.0.0_130424_images_MX6/uImage
L3.0.35_4.0.0_130424_images_MX6/rootfs.ext2.gz
IMPORTANT NOTE: The SABRE AI release 1.1.0 shows a
unstable kernel at 1Ghz freqs, reporting frequent kernel
crash:
and bla bla bla... This problem seems solved in 4.0.0 release. With this version it is possible to reach 1Ghz clock. |
password: user
Installing UBUNTU ONEIRIC
The file system is bundled in the package L3.0.35_4.0.0_UBUNTU_RFS.Instead of expand rootfs of the demo image it is possible to extract the ubuntu_oneiric_4.0.0.tgz image on SD-Card.
Install additional package according to i.MX_6Dual6Quad_Sabre-AI_Linux_User_Guide.pdf
Installing LINARO 12.09
Using information in
http://boundarydevices.com/linaro-12-09-for-i-mx6/In testing, but it seems to work correctly.
Other Installation:
Here: http://boundarydevices.com/imx6-builds/
Boot using SD CARD
According to SABRE_AI_User_Guide_L3.0.35_1.1.0.pdf, locate the three dip switches and set up as follow:
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
D8 |
D9 |
D10 |
|
S1 |
X |
X |
X |
OFF |
ON |
X |
X |
X |
X |
X |
S2 |
X |
OFF |
ON |
OFF |
||||||
S3 |
OFF |
OFF |
ON |
OFF |
Insert the SD Card with OS in the SD/MMC slot on CPU board.
Booting Sequences
Debug Console Actually the RS232 connector J18 is the primary debug device. It is a 115200 serial connection (no HW/SW flow control).
uboot (4.0.0)
Now, hitting any key it is possible to configure uboot, as follow:
U-Boot 2009.08 (Apr 25 2013 - 01:15:30)
CPU: Freescale i.MX6 family TO1.2 at 792 MHz
Thermal sensor with ratio = 184
Temperature: 23 C, calibration data 0x58b4ef7d
mx6q pll1: 792MHz
mx6q pll2: 528MHz
mx6q pll3: 480MHz
mx6q pll8: 50MHz
ipg clock : 66000000Hz
ipg per clock : 66000000Hz
uart clock : 80000000Hz
cspi clock : 60000000Hz
ahb clock : 132000000Hz
axi clock : 264000000Hz
emi_slow clock: 132000000Hz
ddr clock : 528000000Hz
usdhc1 clock : 198000000Hz
usdhc2 clock : 198000000Hz
usdhc3 clock : 198000000Hz
usdhc4 clock : 198000000Hz
nfc clock : 24000000Hz
Board: i.MX6Q-SABREAUTO: unknown-board Board: 0x63012 [POR]
Boot Device: SD
I2C: ready
DRAM: 2 GB
MMC: FSL_USDHC: 0,FSL_USDHC: 1,FSL_USDHC: 2,FSL_USDHC: 3
In: serial
Out: serial
Err: serial
Net: got MAC address from IIM: 00:04:9f:20:76:bd
FEC0 [PRIME]
setenv loadaddr 0x10800000
setenv bootargs_base 'setenv bootargs console=ttymxc3,115200'
setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24'
setenv bootcmd_mmc 'run bootargs_base bootargs_mmc;mmc dev 2;mmc read ${loadaddr} 0x800 0x2000;bootm'
setenv bootcmd 'run bootcmd_mmc'
saveenv
run bootmcd
To limit cores speed use this line:
setenv bootargs_base 'setenv bootargs console=ttymxc3,115200 arm_freq=800'
To Disable LVDS:
setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait rw video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:off'
linux kernel (4.0.0)
MMC read: dev # 2, block # 2048, count 8192 ... 8192 blocks read: OK
## Booting kernel from Legacy Image at 10800000 ...
Image Name: Linux-3.0.35-2508-g54750ff
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3860824 Bytes = 3.7 MB
Load Address: 10008000
Entry Point: 10008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Check OS/Testing the system
# uname -a
Linux freescale 3.0.35-2310-gc27cb38 #1 SMP PREEMPT Tue Dec 18 17:23:15 CST 2012 armv7l GNU/Linux
Configure network manually
# ifconfig eth0 up# ifconfig eth0 <ip address>
# route add default gw <address>
# echo "nameserver <dns addres>" > /etc/resolv.conf
In Ubuntu is possible to disable Network Manager and modify network scripts.
Mount NFS file system
# mount -t nfs -o nolock <host>:<dir> nfsCPU Frequency
1. check CPU frequency
2. change CPU frequency# cat
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# echo 792000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
Enabling USB OTG
I do not know.
Anyway USB HOST is locate on USB1 J30. Mouse tested to work.
Keyboard in progress. [Release 1.1.0]
Distro/Cross Compile/ToolChain
FREESCALE LTIB 4.0.0
All information can be found on Setting_Up_LTIB_Host.pdf and seems that,
officially, only ubuntu 9.04 is supported, so a VM (es
VirtualBOX) is highly suggested.
Ubuntu 9.04 now is in http://old-releases.ubuntu.com so require
to set up sources.list and I had some trouble to install
texinfo. I tested both Ubuntu 10.04 or 11.10 (32 and 64 bit) and
they work fine.
It is important to read carefully the Setting_Up_LTIB_Host.pdf document. A copy of the
script for install all the package required by LTIB can be
downloaded from here
NOTE To install also X11 SDK the following package is required:
sudo apt-get install xsltproc
Download i.MX 6Quad and i.MX
6Dual Linux BSP Source Code Files (in this case L3.0.35_4.0.0_130424_source.tar.gz) extract it, and run install
About 4Gb of free space are required (6Gb for build GNOME)
After ltib complete building in the ltib folder there are
- rootfs [the complete file system, unstripped, contains
additional files]
- rootfs_image [a jffs2 image or better a ext2.gz]
uboot and linux kernel are in rootfs/boot, rootfs.ext2.gz have
to be ungizipped and installed according to section Installing DEMO IMAGE.
New Distro
Unfortunately on my distro, a Debian Jessie, LTIB cannot be
installed at this moment. Information on patch LTIB on recent distro can be found here
but seems that those are not enough for my Debian.
After ran ./ltib
command, the installation stopped with error:
Exiting on error or interrupt
Please see >> [...]/ltib/host_config.log for details
Some hint can be found here:
https://community.freescale.com/docs/DOC-1442 or here:
http://vijay496.blogspot.in/2012/03/ltib-for-ubuntu-1110-error-faced.html
1) I installed patch according to https://community.freescale.com/docs/DOC-93455
2) m4 have to be patched: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/sys-devel/m4/files/m4-1.4.16-no-gets.patch ./stdio.h:477:1: error: 'gets' undeclared here (not in a function)
3) I patched ./dist/lfs-5.1/wget/wget.spec adding --without-ssl
to ./configure line
4) mconf continue to be not possible to be found and the patch
not work:
$cmd .= "--force-debian " if $rpm =~ m/rpm-fs/ && `uname -a` =~ m/ubuntu/i;
or
$cmd .= "--force-debian " if $rpm =~ m/rpm-fs/ && `uname -a` =~ m/debian/i;
to ltib script (before $cmd .= "--define '_tmppath $cf->{tmppath}' ";)
Also on Ubuntu 12.04 the patch file seems to be not enough to
install LTIB and additional fixes are required.
Configure LTIB
Selection: imx6q
board: mx6q_sabreauto
u-boot: 2009.08 works (2012.10 cannot be found on bitshrine)
kernel: 3.0.35 works (3.5.7 cannot be found on bitshrine)
BOUNDARY DEVICE LTIB
http://boundarydevices.com/ltib-4-0-0-images/
is in testing. Use it with L3.0.35_4.0.0_DEMO_IMAGE uboot and
kernel.
UBUNTU ONEIRIC
Based on Linaro 11.10:
Welcome to Linaro 11.10 (development branch) (GNU/Linux 3.0.35-2508-g54750ff armv7l)
It is possible to build using gcc directly on board, but it is
not possible to cross-compile.
username: linaro
password: linaro
Yocto
Yocto works greatly.
I followed the instruction on https://community.freescale.com/docs/DOC-93844
to create environment for imx6qsabreauto.
I am using
umask 002
There are 3 images available for yocto IMX6:
- fsl-image-gui-sdk
- fsl-image-gui
- fsl-image-test
The image can be build using
# bitbake fsl-image-test
or
# bitbake fsl-image-gui
and I moved the built image on sd-card with
# dd if=<image.sdcard> of=<memory card>
U-Boot actually reports:
U-Boot 2012.10-00994-g7e6c682 (May 01 2013 - 21:52:59)
CPU: Freescale i.MX6Q rev1.2 at 792 MHz
Reset cause: POR
Board: MX6Q-Sabreauto revA
DRAM: 2 GiB
WARNING: Caches not enabled
MMC: FSL_SDHC: 0
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: FEC [PRIME]
Warning: FEC using MAC address from net device
To limit clock and setup HDMI
setenv mmcargs 'setenv bootargs console=${console},${baudrate} root=${mmcroot} arm_freq=800 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:off'
Username: root
Password: [no pwd, press only enter]
Test distro:
root@imx6qsabreauto:/# uname -a
Linux imx6qsabreauto 3.0.35-12.09.01+yocto+g0596856 #1 SMP PREEMPT Wed May 1 21:01:48 CEST 2013 armv7l GNU/Linux
The SDK fsl-image-gui-sdk
actually [8maj2013] not build due to some issue with cogl and
vivante gpu, in particular during mesa-demos building:
.../rootfs_builder/build/tmp/sysroots/imx6qsabreauto/usr/include/GL/osmesa.h:119:1: error: unknown type name 'GLAPI'
etc etc
To have an SDK try with
# bitbake meta-toolchain
and install it using the .sh script.
In this case you can test the environment with
# source /opt/poky/1.3.1/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi
# $CC --version
arm-poky-linux-gnueabi-gcc (GCC) 4.7.2
GCC Flags
yocto fsl set the default flags in ${CXX} to
-march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon -mtune=cortex-a9
gcc complete flags can be:
- for softfp system (or multilib)
-mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9
-mfpu=neon -mvectorize-with-neon-quad -mfloat-abi=softfp
-for hardfp system (or multilib)-mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9
-mfpu=neon -mvectorize-with-neon-quad
-mfloat-abi=hard
Using Vivante GPU with OpenCL
Tutorial here: https://community.freescale.com/docs/DOC-93984
I.MX_6DL_S_VIVANTE_VDK_TOOLS
Resources
[1]
FreeScale Website or https://community.freescale.com/docs/DOC-94809[2] http://boundarydevices.com/
[3] www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX6_SW
[4] www.cnx-software.com/2012/11/18/freescale-i-mx6-resources-development-boards-documentation-source-code-and-tools/
[5] www.eewiki.net/display/linuxonarm/i.MX6x+SABRE+Lite?focusedCommentId=13599622