Linaro on Freescale i.MX6Q Sabre Lite Board
i.MX6x SABRE Lite Board is a low-cost development platform featuring the powerful i.MX 6Quad Application Processor. The hardware specifications for the Sabre Lite Board are the following:
- Quad-Core ARM® Cortex A9 processor at 1GHz per core
- 1GByte of 64-bit wide DDR3 @ 532MHz
- Three display ports (RGB, LVDS, and HDMI 1.4a)
- Two camera ports (1xParallel, 1x MIPI CSI-2)
- Multi-stream-capable HD video engine delivering H.264 1080p60 decode,1080p30 encode and 3-D video playback in HD
- Triple Play Graphics system consisting of a Quad-shader 3D unit, and a separate 2-D and separate OpenVG Vertex acceleration engine for superior 3D, 2D and user interface acceleration
- Serial ATA 2.5 (SATA) at 3Gbps
- Dual SD 3.0/SDXC card slots
- PCIe port (1 lane)
- Analog (headphone/mic) and Digital (HDMI) audio
- 10/100/Gb Ethernet
- 10-pin JTAG interface
- 3 High speed USB ports (2xHost, 1xOTG)
- 1xCAN2 port
- I2C
- General Purpose I/O for Device Control
Getting Started
Boot from SD
By default, the SabreLite boards come with u-boot which is loaded from the SPI NOR flash. These boards need to be reflashed with a small SD card loader to support boot from SD card. This small SD card loader will be flashed into the SPI NOR, the board will still boot from SPI NOR, but the loader will in turn request the BootROM to load the u-boot from SD card.
The respective binaries can be downloaded from the attachments of this page:
To update the SPI-NOR on the SABRE Lite board without the manufacturing tool, use the following procedure:
1. Write the iMX6DQ_SPI_to_uSDHC3.bin SD card loader onto a full size (not micro) SD card using:
sudo dd if=iMX6DQ_SPI_to_uSDHC3.bin of=/dev/sdx
This writes SD card loader at address 0 of the SD card.
Note: Use the uSDHC3 binary! The iMX6DQ_SPI_to_SD_loader_binaries_rev1.0.zip contains two binaries, one to use the micro SD slot SD4 on the top of the board, one to use the full size SD3 slot at the bottom of the board. As all Linaro images are built to use the SD3, use iMX6DQ_SPI_to_uSDHC3.bin.
2. Put this SD card into the slot for the full sized SD card (SD3 on the bottom of the board)
3. Power-up the SABRE Lite, press “space” to enter command mode in uBoot and enter the following commands:
MX6Q SABRELITE U-Boot > mmc dev 0 MX6Q SABRELITE U-Boot > mmc read 0x10800000 0 200 MX6Q SABRELITE U-Boot > sf probe 1 MX6Q SABRELITE U-Boot > sf erase 0 0x40000 MX6Q SABRELITE U-Boot > sf write 0x10800000 0 0x40000
4. done.
In case you somehow do not succeed with this procedure you will have to use the manufacturing tool from Freescale which can be downloaded from here:
There is a special profile for Linaro which should be added to the MFG tool profiles which is attached to this page:
In order to reflash the SPI-NOR. In that case please let me know and I can send you instructions how to program the new loader with the manufacturing tool.
Install linaro-image-tools and qemu-user-static
The tool to create a bootable image is called linaro-media-create, and is provided by package linaro-image-tools. linaro-media-create will use qemu to install and run code while building the image. You need to install the latest qemu-user-static package as well.
sudo add-apt-repository ppa:linaro-maintainers/tools sudo apt-get update sudo apt-get install linaro-image-tools sudo apt-get install qemu-user-static
Downloading Linaro Evaluation Builds (LEB)
To get the latest Ubuntu LEB snapshots (for Oneiric), one can download from:
If a full netbook experience is not necessary, one can download the Nano deveoper build to test some basic features in console command line mode. The Nano build can be downloaded from:
Downloading Hardware Pack
The releases of hardware pack for i.MX6Q SabreLite board can be obtained from:
Creating Your Own Bootable SD Card
Insert the SD card, check with command 'dmesg | tail' to see which device it's corresponding to. For example, assume it's /dev/sdc:
linaro-image-tools/linaro-media-create --mmc /dev/sdc --dev mx6qsabrelite --hwpack hwpack_linaro-lt-mx6_20yymmdd_armel_supported.tar.gz --binary linaro-o-ubuntu-desktop-tar-20yymmdd-0.tar.gz
Provide the sudo password when prompted and wait until finished.
Plug the SD card to the SabreLite board and power on.
In the headless configuration, just connect a serial adapter (115k, 8n1 no flow control) and plug in the SD card; it should then boot into Linaro.
Test, report and fix bugs
Test the generated image, and should you find any issues, file a bug on launchpad:
And follows by discussion and fixing of this bug.
Tips
Building the Kernel from source
The kernel source from the landing team is available at:
- git://git.linaro.org/bsp/freescale/linux-linaro.git
The branches for different kernel versions will be named like below:
- lt-3.2-imx6
And so on, the corresponding branches with debian packaging are named as:
- lt-3.2-imx6-ubuntu
One has to install the required packages before building:
sudo apt-get build-dep linux-image sudo apt-get install kernel-wedge sudo apt-get install gcc-arm-linux-gnueabi
To build a kernel package from the source, check out the lt-*-ubuntu branch on a temporary branch and one can do a cross building on a PC as below:
export $(dpkg-architecture -aarmel); export CROSS_COMPILE=arm-linux-gnueabi- git checkout -b tmp origin/lt-2.6.38-ubuntu fakeroot debian/rules clean fakeroot debian/rules binary-linaro-lt-mx6
or do a cross debuild as follows:
debuild -aarmel -eCROSS_COMPILE=arm-linux-gnueabi- -b -uc -us
After the building is finished, the binary kernel packages will be generated in the parent directory. And the generated kernel package can be copied to the target board and installed by the following command:
sudo dpkg --install linux-image-xxxx.deb
To go the simpler way for only building a uImage for testing, one can do:
mkdir ../build make ARCH=arm O=../build CROSS_COMPILE=arm-linux-gnueabi- lt-mx6_defconfig make ARCH=arm O=../build CROSS_COMPILE=arm-linux-gnueabi- uImage
Uploading the kernel to PPA
To upload the kernel to PPA, one needs to check out branch 'lt-3.2-imx6-ubuntu',
git checkout lt-3.2-imx6-ubuntu git clean -f -x -d fdr clean debuild -S -sa -I.git -I.gitignore -i'\.git.*'
'git clean' will try to remove any irrelevant files to prepare a clean upload, please make sure that any local changes been backed up before do so. 'fdr clean' will generate the necessary files (changelog and so on) for source package generation. And 'debuild -S' will prepare the source package for uploading, and exclude the unnecessary files (local .git files).
'debuild -S' will generate the source package signed with your GPG key ready for uploading in the directory one level above. dput is the command which does the actual uploading job. To make it easy for the command, one can put the PPA URL in the ~/.dput.cf file like below:
[fsl-lt-public] fqdn = ppa.launchpad.net method = ftp incoming = ~linaro-landing-team-freescale/public/ubuntu login = anonymous passive_ftp = 1 allow_unsigned_uploads = 0
And to actually upload the package, do:
dput fsl-lt-public ../linux-linaro-lt-mx6-<version>.changes
Change Kernel Command Line
To change the kernel command line, the best way is to modify the boot script source file 'boot.txt' on the 'boot' partition of the SD card, and generating the u-boot script file 'boot.scr' that u-boot understands. The following command will generate the boot.scr from boot.txt:
mkimage -A arm -T script -O linux -d boot.txt boot.scr
And if command mkimage is missing, one will need to install the package uboot-mkimage:
sudo apt-get install uboot-mkimage
Enable HDMI output
To enable HDMI output as primary display device, please input the following setting in cmdline:
video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24
"1920x1080M@60" is a basic video mode to tell hdmi driver, normally, hdmi driver will read EDID through DDC, and try to find a nearest one in it, if the monitor support cea 1080P60, then this mode will be choosen. If you want to set another mode for example cea 720P60, just input as "1280x720M@60".
Enable LVDS output
To enable LVDS output as primary display device, please input the following setting in cmdline:
video=mxcfb0:dev=ldb,LDB-XGA,if=RGB565
Dual display
By default, linux is setting primary display device as HDMI and second display device as LVDS or vice versa. If you want to control by yourself, please input the following setting in cmdline(for example, lvds as primary, hdmi as secondly):
video=mxcfb0:dev=ldb,LDB-XGA,if=RGB565 video=mxcfb1:dev=hdmi,1920x1080M@60,if=RGB24
Hardware Accelerated Graphics
Due to boot performance issue, the graphics kernel driver has been built as a module. As the graphics kernel driver module (i.e. galcore.ko) needs 128MB vmalloc space by default, it's recommended that the following be placed in the kernel command line:
vmalloc=192M
And the module won't be loaded automatically, as the modalias has changed after moving to device tree, one has to load the module manually before the graphics demos can be executed:
modprobe galcore
The graphics user space libraries are installed to /usr/lib, and the demo binaries are installed to /opt/viv_samples.
Hardware Accelerated Video
The video codecs from Freescale along with the gstreamer plugins are currently packaged in the private PPA until the freely redistribution issue could be solved. Provided that you have the permission to access Freescale Landing Team's private PPA, you can install the packages by the command line on the board:
sudo apt-get install imx-meta-mx6
Known issues
Bug 906316 - Sabrelite HDMI display being turned off after system is up Bug 918690 - Audio doesn't always work after reset and need power recycle Bug 919081 - Segmentation fault when running the graphics demos as normal user Bug 912907 - gpu-viv-bin-mx6q should use versoined SONAME
Boards/MX6QSabreLite (last modified 2013-06-20 03:35:41)