Quantcast
Channel: Boundary Devices
Viewing all 391 articles
Browse latest View live

U-Boot on i.MX6

$
0
0
There are a lot of posts in this blog that describe the state of U-Boot for our i.MX6 boards, but most of them describe the history. They were designed to help the early adopters make transitions as we switched from the Freescale U-Boot 2009.08 to main-line and added display support.

Things have stabilized, and in this post, we’ll recap the current state of affairs to provide the new user a quick Getting started guide.

Here are some things you should know about the U-Boot that we ship with our i.MX6 boards:
  • Our boards boot to a serial EEPROM. The i.MX6 processor has a set of internal fuses that control the boot device, and we program these for SPI-NOR. There are a variety of ways to over-ride this, but we don’t recommend them except for very specific needs.
  • The primary U-Boot console is the serial port on a DB-9 labelled console. It’s configured for direct connection to common USB serial adapters (i.e. as DCE). The baud rate is 115200. 8 data bits, no parity, no flow control. If you hit the any key right after power-on, you’ll abort the automatic boot process and get a U-Boot prompt on the serial port.
  • Very new U-Boot images have support for USB keyboard. See this post for details. If you boot without a working 6x_bootscript on SD card or SATA, you’ll get a prompt on the display and USB keyboard in addition to the serial port.
  • Our images will boot from either SD card slot or SATA. The default bootcmd string is set to iterate through all of the boot media on your board, looking for the file 6x_bootscript in partition 1. If found, the script will be run (and won’t return if successful). Note that some userspaces may require the use of a certain boot media. Consult the corresponding documentation for details.
  • Our images will boot from FAT, ext2, ext3, or ext4 filesystems. The default bootcmd variable will try FAT first, then ext2 (which supports ext3 and ext4).
  • If you power-on a device with one of our displays connected, you should get an on-screen image. Display support has been in U-Boot for a while now, and you should see a display without any SD card present.
  • Our default bootcmd is set to run 6x_bootscript. To elaborate, we leave the precise boot instructions to the userspace image itself, since different distributions package things differently and require at least different kernel command-lines. We accomplish this by having a bootcmd which simply loads a distribution-specific startup script (6x_bootscript) from the first partition of either SD card or SATA drive.
  • We provide sample boot scripts for Android and typical non-Android use. You can find these in the directory corresponding to your board in files named 6x_bootscript*. These are just samples though. You will likely need to tailor then for your use in production, because
  • The default boot scripts try to detect your display. There are some notes in this post but from a high-level, suffice it to say that these boot scripts try to provide an easy out-of-the-box experience.
  • Boot scripts are compiled text files consisting of a series of U-Boot commands. The language supports the use of conditionals, so you can test for the presence of files, environment variables, and the like.
  • We have an online tool for compiling boot scripts here that takes care of the arcane mkimage command-line and removes carriage-returns, which the U-Boot hush parser doesn’t like.
  • Don’t assume that you need to re-compile and re-install U-Boot to match your userspace. We routinely boot Linaro, Buildroot, LTIB, Ubuntu, Debian, Timesys, Android, QNX, and Windows Embedded Compact 7 operating systems without re-programming U-Boot. You should only need to re-install U-boot to take advantage of a new feature or to fix a bug. The U in U-Boot stands for Universal and it comes pretty darn close. Many userspace builders will build a U-Boot image for you, but that’s primarily because other platforms are configured for boot to raw SD card and require it. Our boards don’t.
  • Use the 6x_upgrade script and the upgradeu environment variable if you do need an upgrade. You can copy 6x_upgrade and u-boot.imx to an SD card, and upgrade like this:
    U-Boot > run upgradeu
    ...
    check U-Boot
    320748 bytes read in 145 ms (2.1 MiB/s)
    read 0x4e4ec bytes from SD card
    SF: Detected SST25VF016B with page size 4 KiB, total 2 MiB
    probed SPI ROM
    byte at 0x1200000d (0xf0) != byte at 0x1240000d (0xfc)
    Total of 13 byte(s) were the same
    Need U-Boot upgrade
    Program in 5 seconds
    5
    4
    3
    2
    1
    erasing
    programming
    verifying
    Total of 320748 byte(s) were the same
    ---- U-Boot upgraded. reset
    
  • If you’re booting to SD card or SATA, you shouldn’t need to set any environment variables before booting. Our sample boot scripts configure most things automatically, and you should generally do the same. If you need to customize the boot environment (usually the bootargs variable), you’ll generally want to hack the boot script instead. This is easier to copy to other machines, and fits nicely into a source repository.
  • If you’re booting over NFS during development, you should hack your environment variables. See the notes below for typical usage.
  • Restore your factory defaults with clearenv.
    U-Boot > run clearenv
    
    Or better yet, use env default -f -a. We only learned of this nice feature recently, and will likely discard clearenv in the future.

    U-Boot > env default -f -a
    
  • Our U-Boot source code is on Github. We aim to have all of the code for our standard products in main-line U-Boot, but generally have at least a few patches in flight.
  • Our production branch contains the version that we’re currently shipping for new orders and is typically the most stable and recommended branch.
  • Our staging branch contains the version that we’re prepping for the next release. It may have some bugs, but also may have some new features of interest.


Boot flow

The process of booting an i.MX6 involves multiple steps:
  1. At power-on or reset, the processor starts executing code from on-chip ROM. This code reads the Boot Mode switches, and if they’re in the normal position (Boot from fuses), goes on to read the fuses to find out which media to search for a bootable image.
    In our case, it will see that we have the fuses programmed for serial EEPROM, and should find a U-Boot image at offset 0×400 in that device.
  2. The code in on-chip ROM will read the U-Boot preamble, configuring registers for DDR, then copy U-Boot into DDR and begin U-Boot execution.
  3. U-Boot will wait for bootdelay seconds for a user to abort the boot with a keystroke on the console (the serial port).
  4. If no keystroke is present, U-Boot will execute a set of commands stored in the environment variable bootcmd.
  5. As mentioned above, our default bootcmd is configured to iterate through all bootable media (SATA and both SD cards), looking for 6x_bootscript. If found, the commands inside are executed. In the normal case, these commands will never return because an O/S will be launched.

Unbricking

If step 1 above sees the Boot mode pins in the Serial Boot position, or doesn’t find a valid image in the serial EEPROM, the code in the on-chip ROM will enter serial download mode.

This mode allows a user to download a valid boot image over the USB OTG port, providing a robust means of recovery.

If you connect the USB OTG port to a Linux-based machine (including i.MX6 devices), you can see this in the output of lsusb:
~/$ lsusb
...
Bus 001 Device 009: ID 15a2:0054 Freescale Semiconductor, Inc. i.MX6Q SystemOnChip in RecoveryMode
We wrote a Linux-based tool called imx_usb that supports this protocol, so you can supply a U-Boot image to the device from the command-line like so:
~/imx_usb_loader$ sudo ./imx_usb u-boot.imx
The sudo is needed to provide access to the raw USB device, and the command-line parameter can be any fully-formed i.MX6 image. In the example above, we’re supplying the U-Boot binary.

You can find more details in the our post on un-bricking an i.MX6.

The Freescale Manufacturing tool does something similar in the first stage, but requires USB OTG support in U-Boot itself, and this is not yet supported in the main-line code base.

The notes below provide some additional details for advanced users. Most users can ignore them.

How to build

Assuming that you have a cross-compiler for armv7 named arm-none-linux-gnueabi-gcc, you can get and compile U-Boot like this:
~$ git clone git://github.com/boundarydevices/u-boot-imx6.git
...
Resolving deltas: 100% (156593/156593), done.
~$ cd u-boot-imx6
~/u-boot-imx6$ git checkout origin/production -b production
~/u-boot-imx6$ export ARCH=arm
~/u-boot-imx6$ export CROSS_COMPILE=arm-none-linux-gnueabi-
~/u-boot-imx6$ make nitrogen6q_config 
Configuring for nitrogen6q - Board: nitrogen6x, Options: IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6q.cfg,MX6Q,DDR_MB=1024
~/u-boot-imx6$ make all
Generating include/autoconf.mk
...
~/u-boot-imx6$ ls -l u-boot.imx 
-rw-rw-r-- 1 user group 312572 Nov 26 11:48 u-boot.imx
Key bits embedded in the snippet above include:
  • We selected nitrogen6x_config.
    This is used for both of our most popular boards, the Nitrogen6X and SABRE Lite.
  • We selected the production branch.
  • The output is in the file u-boot.imx
Refer to this post for more detail.

Basics of launching Linux

In order to boot Linux using U-Boot, you usually need only two things:
  • A working kernel, and
  • A filesystem containing init
But you’ll generally need a third:
  • A set of kernel parameters passed via the bootargs environment variable in U-Boot.
The kernel image is typically stored in a file named uImage and is most commonly stored in the /boot directory of a filesystem, but these are guidelines, not rules. The only important thing is that U-Boot is able to load the kernel into RAM.

The filesystem used at startup (generally referred to as the root filesystem) could be a typical ext2, ext3, ext4 filesystem on SD card or SATA, an accessible NFS share, or a RAM disk image. The only important piece is that you can tell the kernel how to find it at startup time.

Kernel startup is almost always invoked using the bootm command under U-Boot. The first parameter to bootm is the address of a kernel as shown in this example:

U-Boot > mmc dev 0
U-Boot > ext2load mmc 0 10800000 /boot/uImage
U-Boot > bootm 10800000
This simple example shows how to load /boot/uImage into memory address 0x10800000 and launch it.

But wait. We haven’t provided a filesystem reference in this example.

When you invoke bootm using a single parameter, you’ll need to specify the root filesystem indirectly through the bootargs environment variable as shown below. This example tells the kernel to wait for the root filesystem to become available, and that the root filesystem is the partition /dev/mmcblk0p1 (the first partition of the first SD card enumerated on the system).

U-Boot > setenv bootargs $bootargs rootwait root=/dev/mmcblk0p1
U-Boot > mmc dev 0
U-Boot > ext2load mmc 0 10800000 /boot/uImage
U-Boot > bootm 10800000
This is precisely what’s done in the default boot script board/boundary/nitrogen6x/6x_bootscript.txt.

To boot a RAM disk for the root filesystem, you add a second parameter to the bootm command with the load address of the RAM disk and omit the root= clause from bootargs. The following example illustrates this:

U-Boot > mmc dev 0
U-Boot > ext2load mmc 0 10800000 /boot/uImage
U-Boot > ext2load mmc 0 12800000 /boot/uramdisk.img
U-Boot > bootm 10800000 12800000
RAM disks are used in the default Android boot script (board/boundary/nitrogen6x/6x_bootscript_android.txt), but are also useful for other distributions. We used one to put together this image for exposing storage across USB.

Note that there is a third parameter for bootm that’s required for use of the main-line Linux kernel. It supplies something called a device tree, which is used to make the kernel a bit more generic. If you’re working with main-line, it’s likely that you have access to this, so we won’t go into the details here.

How to boot over NFS

Booting over NFS is a straightforward extension of this that simply replaces the root= clause in bootargs with root=/dev/nfs. It does require a couple of additional parameters to the kernel, though:
parametertypical value
nfsroothostip:/path/to/rootfs,options
ipdhcp
The first parameter, nfsroot= tells the kernel where to find a root filesystem and what options to pass to the NFS mount process. A typical value for the entire clause might be nfsroot=192.168.0.42:/home/user/imx-android,v3,tcp.

The second parameter, ip= is needed because the kernel needs to have an IP address in order to access the network. An IP address is normally done as a part of the userspace startup, but in the case of an NFS root, we can’t wait for that because of the chicken-and-egg problem.

Putting it all together, we can boot over NFS like this:
U-Boot > setenv bootargs $bootargs rootwait root=/dev/nfs
U-Boot > setenv bootargs $bootargs nfsroot=192.168.0.42:/home/user/imx-android,v3,tcp
U-Boot > setenv bootargs $bootargs ip=dhcp
U-Boot > mmc dev 0
U-Boot > ext2load mmc 0 10800000 /boot/uImage
U-Boot > bootm 10800000
Note that this example doesn’t completely boot over the network, though. The kernel is still loaded from an ext2/3/4 filesystem on partition 1 of the SD card. This brings up the next question:

Loading a file over TFTP

U-Boot contains a number of networking commands, and support for a number of protocols.

The most common are the dhcp and tftp commands, and we generally use the dhcp command to acquire an IP address and transfer a file in a single command like so:
U-Boot > dhcp 10800000 192.168.0.62:uImage
This command will acquire an IP address using DHCP, then request a file named uImage and load it into memory address 0x10800000.

When used in conjunction with the NFS boot arguments, this provides a single, relatively command line to be used for booting:
U-Boot > dhcp 10800000 192.168.0.62:uImage && bootm 10800000
You may now be understanding why I mentioned the saving of environment variables when booting NFS. There are a number of parameters to provide, including
  • the IP address of the TFTP server, and
  • the IP address and path to the NFS filesystem
If you’re going to save all of these, you might as well just over-write the bootargs variable entirely, and the bootcmd variable while you’re at it.

You can always run clearenv when you’re done.

Important clauses for bootargs:

To recap and expand on the notes above, here are a set of known variables that you might want to set in bootargs under U-Boot:
nametypical valueNotes
consolettymxc1,115200This tells the kernel to send kernel messages to /dev/ttymxc1, the serial console port. You almost always want this set during development, though you might consider turning it off in production, since it can slow the boot process.
enable_wait_modefalseThis variable controls the behavior of the idle loop in the Linux kernel and you may see system stalls without this value set.
root=/dev/mmcblk0p1
/dev/sda1
See notes above
video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24
mxcfb0:dev=ldb,LDB-XGA,if=RGB666
mxcfb0:dev=ldb,1024x600M@60,if=RGB666
mxcfb0:dev=lcd,CLAA-WVGA,if=RGB666
Defines the display(s). These should be numbered starting at mxcfb0 through mxcfb2 and will translate into a number of device nodes as described in this post.
consoleblank0This variable controls the amount of idle time before the console device goes to sleep. Use consoleblank=0 to disable blanking on idle.
vmalloc400MThis controls the amount of memory available to the kernel for dynamic allocation. You’ll normally want this to be 400M or so on a system running a graphical U/I with accelerated video and graphics.
fbmem28MThis controls the amount of memory allocated for each frame-buffer.
ipdhcp
192.168.0.44:::255.255.255.0
Refer to the documentation for details.
nfsroot192.168.0.62:/path/to/rootfsRefer to the documentation for details.
androidboot.consolettymxc1Tells Android about the console
androidboot.hardwarefreescaleAndroid needs this. Details elsewhere

Booting Yocto

Thanks largely to the efforts of the team at O.S. Systems, the current builds of Yocto using the meta-fsl repositories have a custom boot script that specifies partition 2 for the root filesystem instead of partition 1.

Their efforts show the right thing to do: have the boot script built as a part of the userspace, but not U-Boot itself.

Booting Windows Embedded Compact 7

Coming soon

Booting QNX

Details coming soon, but the general process involves the use of the gocommand:
mmc dev ${disk} && ext2load mmc ${disk} 10800000 /path/to/ifs.ifs && go 10800000

Booting Debian

Details coming soon, but also available on eewiki.

.


Boot to Qt

$
0
0

Qt blog

A couple of weeks ago, we found out about some work that the folks at Digia are doing for embedded developers.

Known as Boot To Qt, this upcoming offering does precisely what many of you need: it boots quickly into a Qt-based application.

More importantly, this commercial offering from Digia can provide your development team a quick and powerful development environment on day one. By development and deployment tools, Digia is aiming to have you building and running your application by lunch time.

If you’re using or planning to use Qt, you should really check this out. The team that brought you this best of breed C++ application framework, and the powerful QML user interface language are continuing to innovate.

After checking it out, please let us (and Digia) know your thoughts about this exciting initiative.

If you’re not using Qt, you should ask yourself “why not?”. As board manufacturers, we see a lot of projects come and go, and we’ve found one thing to be true:

Development teams that use Qt are much more likely to make it to market.


LTIB 4.0.0 images

$
0
0
We just uploaded a couple of images of the 4.0.0. release of kernel and LTIB from Freescale that include our latest kernel.

There are two images:
  • ltib4-with-x-20130618.tar.gz – This image was built with the FSL gnome release package configuration, which includes X-Windows, gstreamer-acceleration, and GPU acceleration.
  • ltib4-no-x-20130618.tar.gz – This image was built with gstreamer-acceleration and GPU acceleration, but without X-Windows.
The precise LTIB configuration is included in each image in the file ltib-4.0.0-config.tar.gz.

Each of the images can be extracted to a single-partition SD card formatted as ext2/3/4 like so (assuming that your SD card shows up as /dev/sdc):
~/$ echo ',,83,*' | sudo sfdisk /dev/sdc
~/$ sudo mkfs.ext3 -L ltib /dev/sdc1
~/$ udisks --mount /dev/sdc1
~/$ sudo tar zxvf ltib4-with-x-20130618.tar.gz -C /media/ltib/
~/$ sync && sudo umount /media/ltib
Each of these was built using the mx6qsabrelite configuration in LTIB, but the kernels were replaced and boot scripts added by overlaying the build output with this tarball, which is a recent build from our boundary-imx_3.0.35_4.0.0 kernel branch.

To test the gstreamer acceleration in each image, we used the gplay command-line player and placed a video fw.flv into the /root directory.
root@boundary:~/$ gplay fw.flv
To test the GPU acceleration, we exercised a number of the Vivante tutorials:
root@boundary:/opt/viv_samples/vdk/$ ./tutorial3_es20 -f 1000
Both images are configured with a single user: root (password “Boundary”), and are configured for DHCP on the ethernet port and to automatically start an SSH server.

Wi-Fi is configured in the kernel, and the firmware files for the TiWi device are present in the filesystems, so you can perform a first-pass test like so:
root@boundary:~/$ ifconfig wlan0 up
root@boundary:~/$ iwlist wlan0 scan
iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: E0:91:F5:CA:DE:FE
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=45/70  Signal level=-65 dBm  
                    Encryption key:on
                    ESSID:"mySSID"
                    ...
There are a bunch of new features in this release, including support for the Wayland X replacement, but we haven’t tested those. Our intent is to provide working images to test the kernel.

New U-Boot Production Version

$
0
0

We’ve recently updated the version of U-Boot that we’re shipping with new boards. Many new features have been added since our last production release including:

You can grab a set of prebuilt binaries and the latest upgrade script here:

The U-Boot files included use the suffix of the U-Boot config settings they were built with, which tells you what type of board they’re for. You can check out the code on the production branch on github.

To upgrade to the latest U-Boot, extract the files from the tarball link above to an SD card. Then you can rename the version you need to u-boot.imx and run upgradeu or you can use the upgrade script’s new feature to set what file it loads. For example, to load the U-Boot configured with nitrogen6q_config, ie 1GiB quad core, you’d use the command

U-Boot > bootfile=u-boot.nitrogen6q && run upgradeu

Qt4 Demo Image

$
0
0

Get it

We’ve created a qt4 demo image using Yocto to build the root filesystem. Grab the the file:

Extract it to an SD card and you’re good to go.

Notes

  • There is no hardware acceleration or OpenGL/ES libraries installed.
  • The root user has no password.

Build Process

The process is basically the one from this excellest post except that we don’t build fsl-image-gui and we copy over our 4.0.0 kernel+modules after it’s built. The bitbake commmand is:
$ bitbake qt4e-demo-image
The build will take several hours from scratch. Once it’s done, extract build/tmp/deploy/images/qt4e-demo-image-nitrogen6x.tar.bz2 to an SD card. Then follow the process described in this post. In this case all you need to copy from that tar file is the kernel and the kernel modules. This image already has the WiFi firmware and you should already have working U-Boot and U-Boot scripts.

MIPI camera support on i.MX6

$
0
0
This is a quick post regarding support for our MIPI 5MPixel camera module for our i.MX6 boards.

In brief, support is present in the kernel, but not enabled by default.

There are some resource conflicts between the MIPI module and our parallel camera module and since we’ve shipped many more of the parallel camera, and a kernel re-configuration and re-compile are needed to allow the MIPI module to function.

You’ll need to both disable the OV5642 driver and enable the OV5640_MIPI driver when using the MIPI module.

To make this easy, we’ve added a couple of configuration files for our non-Android boundary-imx_3.0.35_4.0.0 and Android boundary-jb4.2.2 kernel repository branches.

In addition, only a sub-set of capture-mode values are available under gstreamer. In particular, we’ve tested against mode 4 (720P30) and mode 5 (1080P30).

# gst-launch mfw_v4lsrc capture-mode=5 ! mfw_v4lsink
The biggest benefit to using the MIPI camera over the parallel camera is the increased throughput (the parallel camera only supports 1080P15 – 15 fps).

The biggest downside is that we haven’t (yet) implemented auto-focus for the OV5640.

Windows Embedded Compact 7 (CE7) support on Nitrogen6X and BD-SL-i.MX6

$
0
0
WindowsCE7 support has been available through Adeneo for the Nitrogen6X and BD-SL-i.MX6 boards for a while now.

In conjunction with Adeneo, we’ve taken that BSP and improved a few things:
  • Enhanced HDMI support,
  • Included Internet Explorer, and
  • Simplified the install process (only file copies are needed).


We have a binary that is free for evaluation, but requires a fee for production use.

Contact us at info@boundarydevices.com to arrange a download.

Android Jellybean on i.MX6 with no disclaimers

$
0
0
Jelly beansIn our last post about Jellybean on our i.MX6 boards, we had a big, bold disclaimer that this was alpha code.

We’ve now spent the time to walk through many of the details and are happy to release updates and images that bring the full Android Jellybean experience without the big fat warnings.

This release is now every bit as functional as our Ice cream sandwich releases and ready for serious field testing.


For the impatient

To enable quick testing without going through the build process, we’ve uploaded two SD card images to our Cloud storage site:

Note that even though it’s slower, there are a handful of benefits to using the .img file:
  • We’ve already run dexopt on the image. During the first boot of Android, the system will go through all of the installed packages, and this slows up the first boot dramatically.
  • We added some movie trailers, so the Gallery app comes up right away.
  • We disabled the screen blanking.
  • We added some desktop shortcuts.

Highlights

  • Browser performance has been fixed.
  • SATA is supported
  • Fully boots to either SD card
  • Both parallel and MIPI cameras are supported
  • Wi-Fi on Nitrogen6x is supported and enhanced from ICS
  • Resistive touch screen is supported
  • Dual-screen (LCD+HDMI) is now supported for all panels

Notable omissions

In the intro, we said there were no disclaimers, but there are still some things on the To-Do List:
  • Nitrogen6-Lite is not yet supported
  • Bluetooth is not yet functional on Nitrogen6X

Installing from the tar-ball

To install from the tar-ball, you’ll need to extract the image, then run the mksdcard.sh script to partition and format either a SATA drive or an SD card.

In general, the process goes like this:
~/$ mkdir android-jb
~/$ cd android-jb
~/android-jb$ sudo tar zxvf ~/Downloads/imx6-jb-20130626.tar.gz
~/android-jb$ sudo device/boundary/mksdcard.sh /dev/sdc nitrogen6x
The example above assumes that your SD card or SATA drive is connected to /dev/sdc. It’s also common for machines with built-in SD card readers to have them show up as /dev/mmcblk0 or /dev/sdd.

If you want to run from SATA, you can use our USB image, but the SATA drive won’t show up as a removable disk and you’ll need to add a parameter of --force to the command-line:
~/android-jb$ sudo device/boundary/mksdcard.sh /dev/sdc nitrogen6x --force
You’ll also want to be extra careful to make sure you have the right disk. Because mksdcard.sh will re-write the partition table of the device you point it at, this can and will trash your hard drive if not used properly.

Don’t say we didn’t tell you.

Installing from the .img file

Under Linux using dd

This is probably the easiest way to install, but won’t use the entire SD card or SATA drive because SD cards vary in size and we’ve configured the image at 3.8 GiB.

Using a 4+GB SD card that appears as /dev/sdc, you can install the image like this:
~/$ gunzip ~/Downloads/imx6-sdcard-20130626.img.gz
~/$ sudo umount /dev/sdc?
~/$ sudo dd if=~/Downloads/imx6-jbsdcard-20130628.img of=/dev/sdc
~/$ sync

Under Windows

To install the image under Windows, we reccommend using Alex Page’s nice USB Imaging Tool.

The following shows the process from the command-line if your SD card appears as drive H:.
C:\>usbitcmd l
USB Image Tool 1.58
COPYRIGHT 2006-2011 Alexander Beug

http://www.alexpage.de

  Device   | Friendly Name             | Volume Name | Volume Path | Size
 ------------------------------------------------------------------------------
      2500 | Generic- SD/MMC USB Devic | CE7         | H:\ |   3837 MB
C:\>
C:\>usbitcmd r 2500 imx6-jb-sdcard-20130628.img.gz /g /d
USB Image Tool 1.58
COPYRIGHT 2006-2011 Alexander Beug

http://www.alexpage.de

Restoring backup to "Generic- SD/MMC USB Device" (H:\)...ok
Note that you should use Windows Explorer to eject the card when complete, and that you may need the card to be formatted to allocate a drive letter.

Also note that usbitcmd must be run as Administrator, since it requires access to the entire drive.

Getting access to the sources

As discussed in this post, you’ll need to register and forward an SSH public key in order to get access to some of the closed-source bits of the Android build tree.

Once that’s done, retrieving the sources follows the standard Android process, using branch jb-1.1.0:
~/$ mkdir myandroid
~/$ cd myandroid
~/myandroid$ repo init \
    -u git://github.com/boundarydevices/imx-android-r13.4-ga.git \
    -b jb-1.1.0
~/myandroid$ repo sync
~/myandroid$ . build/envsetup.sh
~/myandroid$ lunch
         ---select Nitrogen6x eng or user---
~/myandroid$ m 2>&1 | tee build.out
If you already have a repo tree from us, you can simply sync and switch branches like so:
~/myandroid$ repo sync
~/myandroid$ repo init -b jb-1.1.0

Usage notes

Here are some things you should be aware of when using this image:
  • The /sdcard mount point doesn’t seem to mount on the first boot when installing from the tar-ball. There seems to be some amount of setup needed during that first boot cycle, so you’ll see a message about “No storage available” if you run the Gallery application during that boot cycle.
  • Similarly, the Gallery application seems to want a boot cycle after loading up videos through adb. In other Android releases, we’ve used third party tools to force a media scan at other times, but haven’t loaded that onto this release.
  • We’ve seen some intermittent issues with audio output that need closer scrutiny. In particular, it appears that a cold boot is sometimes needed to restore the proper function of the SGTL5000.

The details

For those interested in the details of what’s been changed from the Freescale release, and how we solved some of the issues encountered, the sections below will list each of the major hurdles and the details of the solution.

  • Wi-Fi state machine changed again
  • Browser performance sucked
  • SATA support wasn’t present
  • MIPI
  • init crashes during startup
  • Touch calibration wasn’t functional

Wi-Fi state machine changed

To describe this well, we need to start with a little background about the TiWi-BLE SDIO WiFi/BT modules we use on the Nitrogen6x. This highly integrated module is easy to integrate from a hardware standpoint, but we’ve struggled with one of the pins associated with WiFi.

The Wireless LAN Enable, or WL_EN pin is used to enable the internal Wi-Fi portion of the module, and in many O/S releases, we’ve simply asserted the signal at startup and left it alone.

The trouble is that the wl12xx device driver expects this to be available and to de-asserted when the network adapter is brought down and re-asserted when the device is brought up. In addition, the driver needs the signal to be asserted when the kernel module is loaded.

There’s code in the driver to allow a platform (a board) to over-ride this, but it doesn’t function properly.

The stock Android WiFi manager not only brings the adapter up and down, it also loads and unloads the kernel module, which causes a segmentation fault or kernel panic if the platform override is used.

In the ICS release, we thought we’d dealt with this once and for all by hacking up hardware/libhardware_legacy/wifi/wifi.c to assert and de-assert the WL_EN pin at the appropriate times.

This didn’t work with Jellybean.

In our first port, the WiFi device got stuck in scenarios where the WL_EN pin was de-asserted but the driver was still trying to communicate with the chip.

While digging through the details of the various call chains, we stumbled on the origin of the problem. The SDHCI spec seems to define a power control mechanism that’s called at precisely the right points. Unfortunately, the i.MX6 Secure Digital Host Controller doesn’t support it. Instead, we need to toggle a GPIO pin at those points.

So that’s what we did in this release. We implemented a platform-specific callback at the SD-card layer, and defined one for the Nitrogen6X.

Once that was done, things just worked, and we also found that the calibrator utility worked (an issue that’s been around a long time).


Browser performance sucked

The web browser performance of both ICS and JB on our boards has been pitiful until this release.

App not responding or ANR messages could be expected, even when loading pages without a lot of dynamic content and the reason(s) weren’t clear.

Once we dug into it though, a partial answer became immediately apparent: the problem stemmed from I/O. Specifically, SD card I/O.

We had several customers report that using a Class 10 SD card improved the situation, but our testing showed only moderate improvements.

Tracing the I/O, we found that the majority of activity was in /data/data/com.android.browser/cache and we saw dramatic improvements if we mounted this directory as a RAM disk, but we still found some slowness due to I/O in /data/data/com.android.browser/databases.

In this release, we’re mounting all of /data/data/com.android.browser/ as a 32MiB RAM disk, and things are very fast.

Note that this does have a down-side. Re-visiting a page after a system restart will be slower. The system will also prompt you about sharing your location and such-like on every boot. For our immediate purposes, this is a reasonable trade-off.


SATA support

The Linux kernel for i.MX6 has had functional SATA since the beginning of i.MX6-time, but we hadn’t booted an Android image over SATA until this release.

Under ICS, there were a bunch of hard-coded mount statements in init.rc, and under JB, the file fstab.boundary contained hard-coded references to the boot device.

On both platforms, the file /system/etc/vold.fstab contained references to which device should be used for storage of media content.

In this release of Jelly Bean, we’ve changed the fstab.boundary file to have symbolic boot device ($BD) references and added support for this to the mount_all command.

diff --git a/nitrogen6x/fstab.boundary b/nitrogen6x/fstab.boundary
index 977fc45..4f9e60a 100644
--- a/nitrogen6x/fstab.boundary
+++ b/nitrogen6x/fstab.boundary
 
-/dev/block/mmcblk0p1    ...
-/dev/block/mmcblk0p5    ...
-/dev/block/mmcblk0p4    ...
-/dev/block/mmcblk0p6    ...
-/dev/block/mmcblk0p7    ...
+$BD1    /boot    vfat   ...
+$BD5    /system  ext4   ...
+$BD4    /data    ext4   ...
+$BD6    /cache   ext4   ...
+$BD7    /device  ext4   ...
Note that this doesn’t complete the job of adding SATA support. If you’re booting SATA, you’ll also need to edit /system/etc/vold.fstab. More specifically, you’ll need to comment out this line:
dev_mount sdcard /mnt/sdcard 4 /devices/platform/sdhci-esdhc-imx.2/mmc_host/mmc1
and un-comment (remove the #-sign from) this line:
# dev_mount sdcard /mnt/sdcard 4 /devices/platform/ahci.0/host0/target0...
Refer to the comments in the vold.fstab file on Github to get a better understanding.

MIPI camera support

As briefly described our quick MIPI post, there are some resource conflicts that prevent us from supporting both our parallel OV5642 camera and OV5640 MIPI camera modules at the same time (with the same kernel). Until we have a more elegant solution, we’ve added support for the MIPI camera module through a kernel defconfig.

In this release of Android, we’ve extended this support to the build process through a compile command-line variable DEFCONF. By assigning this variable at build time (when invoking make or m, you can build your kernel with the MIPI configuration. In other words, if you do this:
~/myandroid$ m DEFCONF=nitrogen6x_mipi_defconfig 2>&1 | tee build.out
instead of this:
~/myandroid$ m 2>&1 | tee build.out
Your kernel will be built with MIPI support instead of the parallel camera.

The rest of Android is built to allow both cameras simultaneously, but we won’t be able to do that without a hardware spin and/or some additional kernel work.

init was crashing at startup

This was a weird one, and seems to have been around a while.

We were ready to ship a pre-release to a customer and found that an SD card that worked on one board didn’t work when prepping for shipment.

Was it the monitor? Was it the board?

After a bunch of swapping around parts, we found that it was actually a mouse used in our lab.

root@android:/sys/class/input # cat event1/device/name
Logitech USB-PS/2 Optical Mouse
Digging through the details of the crash, we found a buffer overrun in the file hardware/imx/libsensors/SensorBase.cpp that was crashing while looking for an accelerometer by screen-scraping /proc/bus/input/devices.

We fixed that bug, and also realized that we didn’t need that component anyway.

Belt and suspenders.


Touch calibration wasn’t functional

In our first release of Jelly Bean, we completely skipped a set of changes we made to the touch screen calibrator program.

In the ICS releases and in Froyo and Gingerbread before then, we added support for passing a touch screen device name to the Android startup program and executed it during boot.

We didn’t realize that this involved a change by Freescale that added support for the exec command.

A simple cherry-pick of these patches didn’t do the trick, so we bailed out a little bit.

Since our 800×480 panels can operate quite well with a single calibration value, and the tsc2004 touch controller used with that panel supports a kernel command-line parameter with the calibration, we added a default calibration parameter into the Jelly Bean boot script. Note that you can still over-ride this with the calibration environment variable.

We also added the ts_calibrator program into our build, along with all of our ts_calibrator patches, so you can still run calibration.

It just won’t happen automagically.

To run the calibration program by hand, you can do this from an Android shell:
root@android: / # stop
root@android: / # ts_calibrator
root@android: / # cat /data/system/calibration | busybox xargs echo
-67247,-764,272499173,324,69283,-8653010,65536
The output string is the set of calibration constants.

You can have this take effect immediately for testing by handing it to the driver like this:
root@android: / # echo -67247,-764,272499173,324,69283,-8653010,65536 \
                > /sys/module/tsc2004/parameters/calibration
The resulting string can be saved in U-Boot like this:
U-Boot > setenv calibration -67247,-764,272499173,324,69283,-8653010,65536
U-Boot > saveenv
While not as convenient as the automatic startup, this process works pretty well.

Windows users and unbricking an i.MX device

$
0
0
For a while now, we’ve been planning to update our imx_usb tool to fully support Windows through libusb and Cygwin, but it looks like that isn’t necessary.

We recently found out that Freescale has a tool called sb_loader that is a direct equivalent and is a Windows native program, so it doesn’t require Cygwin.

Freescale distributes this tool as a part of their Manufacturing Tool, that you can download from here: Note that the link above is a tar-ball though. Since Windows users don’t often have the tools needed to extract from that format, we’ve placed a copy on-line: Usage is pretty simple. If you invoke sb_loader with the -f flag, you can give it a file name to load, and it will load and execute the image on the connected device in the same way as imx_usb.
C:\downloads\sb_loader\sb_loader>sb_loader.exe -f u-boot.imx

Executed plugin successfully.
Succeed to download u-boot.imx to the device.
Run into the image successfully.
Refer to our unbricking post for more information about how to use this to re-program or restore an image into the on-board flash.

GPU acceleration on Freescale Ubuntu

$
0
0

After publishing the Freescale Ubuntu post there was some question about whether it has GPU acceleration. We had originally stated that it did because we didn’t look closely enough at /var/log/Xorg.0.log. We hadn’t tested any OpenGL ES programs and it turns out they didn’t work. Looking into it we found that there is no acceleration for X and X applications only fbdev. This seems to be a known problem with no known solution. You can find out more about it on the meta-freescale and yocto mailing lists.

We also found that the GPU libraries in the Oneiric image differed from both the LTIB tarball and the .deb file as shown by the following sha1sum hashes (last 6 digits shown):

FilenameLTIB tarball
and .deb package
Oneiric image
dri/vivante_dri.soa11bf9cc3238
libGLSLC.so9703a9ae9f4d
libVDK.sobd5372287983
libCLC.so866e636916c7
libGL.so.1.2fb7234cf2010
libGLESv1_CL.so.1.1.0b2ea11d2cbac
libOpenVG_355.so5ba4438fb7ff
libOpenVG_3D.soe70d45074c87
libOpenCL.so31562935612a
libGLES_CL.so7b86a7654b29
libGLES_CM.so94196d815f7d
libGLESv2.so.2.0.0b28cc7c8093c
libGLESv1_CM.so.1.1.0c3cce8491d1f
These files weren’t present in the Oneiric image at all:

  • libgc_wayland_protocol.so.0.0.0
  • libEGL-fb.so
  • directfb-1.4-0/gfxdrivers/libdirectfb_gal.so
  • libEGL-x11.so
  • libGAL-fb.so
  • libEGL-wl.so
  • libEGL-dfb.so
  • libVIVANTE-dfb.so
  • libGAL-x11.so
  • libVIVANTE-x11.so
  • libGAL-dfb.so
  • libVIVANTE-wl.so
  • libwayland-viv.so.0.0.0
  • libGAL-wl.so
  • libVIVANTE-fb.so

Finally, the file /usr/lib/libOpenVG.so is a symlink to libOpenVG_3D.so in the Oneiric image, but a file (copy of libOpenVG_3D.so) in the Debian package and LTIB tar-ball.

If we extracted the LTIB tarball over the rootfs or installed the DEB file the examples worked. The examples we used to test are included in the tarball in /opt/viv_samples and we also tested the samples in the GPU SDK. We’ve updated the Ubuntu image with the working libraries so you don’t have to go through this process.

Debian installer on i.MX6 boards

$
0
0
We’ve had a number of customers asking about Debian in recent weeks using instructions from either the ARMhf or eewiki sites.

On each of those sites, the folks are starting with relatively large images though.

One very nice feature of Debian is its’ support for a network install, which allows you to build up a system as you identify pieces needed for your application instead of trying to pull an image like our Freescale Ubuntu image apart.

In order to help you bootstrap such a system, we recently walked through the process using our Nitrogen6x board and will detail the steps below.

The starting point

To start with, we took the i.MX5 hardfloat network installer RAM-disk (file uInitrd) from here:

This 5MiB image contains everything needed to install on one of our boards except a kernel and boot script.

Kernel and boot script

Our standard boot script for non-Android use only loads a kernel and points the kernel at a root filesystem using either root=/dev/mmcblk0p1 (SD card boot) or root=/dev/sda1 (SATA).

To load the RAM disk, we had to add another command to load uInitrd, and we configured the console to use one of the display ports instead of the serial port. Since the Debian installer is semi-graphical, it’s much easier to navigate with a native display than through serial.

This was enough to boot the installation image, but a short way into the installation we found that the partition editor for the Debian installer wanted the Linux Logical Volume Manager (LVM) kernel component, so we added that.

The installer also whinged about wanting kernel module directories, so we hacked the RAM disk to install an almost empty set.

You can download the network installer package here: You can unzip it to a single-partition SD card and it will be immediately bootable.

As an alternative, you can also place the uImage and uInitrd on a TFTP server and boot over the network like this (assumes 720P video on HDMI and server IP address 192.168.0.44):
U-Boot > setenv bootargs enable_wait_mode=off 
U-Boot > setenv bootargs $bootargs video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24
U-Boot > dhcp 10800000 192.168.0.44:uImage
U-Boot > tftp 12800000 192.168.0.44:uInitrd
U-Boot > bootm 10800000 12800000
With no more than these components, the installer will run to completion with only a few complaints (missing kernel and boot loader, lack of RAID support).

If you simply follow the defaults, the installer will create three partitions:
  • A boot loader partition,
  • A root filesystem partition, and
  • A swap partition
The first was formatted as ext2 and is left empty by the installer, and the second is formatted as ext4 and contains the Debian root filesystem.

Post-installation fixup

If you’ve followed things to this point, you now have a Debian image with a root filesystem, but an empty boot partition. We’ll need to add a boot script, a kernel, and a set of loadable modules to complete the process.

You can use our overlay image to load a kernel on top of this, but the boot script contained in that image expects a single partition system (so root=/dev/mmcblk0p1 or root=/dev/sda1).

We created a boot script with this choice and packaged it with a recent kernel that you can download from here: If your SD card or SATA partitions are mounted in /media, you can probably copy them in more or less this fashion:

~/Downloads$ tar zxvf debian-overlay-20130718.tar.gz
~/Downloads$ cd debian-overlay
~/Downloads/debian-overlay$ sudo cp -ravf p1/* /media/boot/
~/Downloads/debian-overlay$ sudo cp -ravf p2/* /media/rootfs
I say more or less because the Debian installer generates UUIDs for the filesystem labels, and the clean /media/boot will be something more like /media/44fa3e18-b095-482a-a8de-85b19e708f7b.

You’ll also probably want a login (getty) on the serial console. To add that, you can append a line to /etc/inittab in the root filesystem:

T0:23:respawn:/sbin/getty -L ttymxc1 115200 vt100
Also, don’t forget to sync and umount the partitions before removing:

~/Downloads/debian-overlay$ sync && sudo umount /media/*
That should be enough to boot your device into a full-fledged Debian. You’ll have access to the package manager and can use it to configure your device from there.

Wrap up and commentary

This post is clearly just an entry point. As mentioned earlier, it was brought on by some customer requests, and part of the exercise was to put us in a better position to test things under Debian.

This isn’t a typical use-case for most of our customers because Debian is a native-compilation environment, but especially when used with a SATA drive, Debian has a lot going for it:

  • It’s very well supported and stable,
  • A tremendous number of packages are one apt-get away from being runnable. This can be incredibly useful when testing a component for inclusion in another toolset, and
  • Because many packages are difficult to cross-compile, using native compilation first can give insight into how things are supposed to work
We’ll follow up this initial post with some additional details about how you can enable the Freescale-specific bits like video and graphics acceleration on Debian in future posts.

Minor U-Boot Update

$
0
0

We’ve made a few minor changes since the last U-Boot update. Thanks to helpful people on the U-Boot mailing list we confirmed and fixed a problem that was due to faulty documentation.

As usual you can get the code from github and see the changes on the production branch.

You can grab the updated binaries here:

DVI Support on i.MX6 boards

$
0
0
At long last, DVI support is here for our i.MX6 boards.

When we built our very first SABRE Lite boards, one of the first things we tested was the HDMI video port, and at that time, most of the monitors we used for testing were natively DVI, not HDMI. All of the newer monitors were being used by our staff, and the ones available for testing were older monitors which only supported DVI.

Way back then, we weren’t booting Linux, and were running some bare metal code, and we found that the hot-plug detect code wasn’t working quite right. If we looked at the HDMI_PHY_STAT0 register, we could see that bits 7-4 (the RX_SENSE bits) would toggle along with connection to the monitor, but bit 1 (HPD) wouldn’t.

We updated the code to look at the others and didn’t look back until very recently. Along the way, we’ve told customers to just use HDMI instead, knowing that there was a software fix, but kicked the can down the road. Sorry about that.

We finally had a chance to investigate more fully, and to compare the operation of Freescale’s SABRE SDB board with ours. With a little nudge from RooT, we figured out that the core of the issue is a voltage dividing resistor we placed on the HPD signal to prevent 5V from hitting the CPU.

With the latest specs from Freescale, we found that this resistor could be bypassed (the pad is 5V-tolerant), but we also added some patches to allow the RX_SENSE bits to be used instead, providing a software solution.

The patches come in three parts:
  1. U-Boot patch to change the hdmidet command and internal HDMI detection to use the RX_SENSE bits, and
  2. A non-Android Linux patch to do the same, and
  3. A patch for the Android (Jellybean) kernel
Note that the U-Boot patch is only in our staging branch at the moment, and will be released to production in the next couple of weeks.

i.MX6 HDMI audio

$
0
0

In the past few weeks we’ve had a few customers report trouble with HDMI Audio.

After looking into it and talking with the Freescale developer about it, it looks like it boils down to the fact that audio on non-CEA modes is not officially supported. This is only a visible problem because we naively added non-CEA modes last year. This did make many more video modes available but audio for the new modes doesn’t work.

To address the problem, we’ve patched both the android and non-android kernel branches to add a kernel command-line parameter only_cea to the mxc_hdmi module. When it’s true we will only add CEA modes to the mode list. We’ll update our boot scripts to set only_cea by default but with an environment override. You can see the commits here:

For more details on the subject see this thread.

U-Boot 2013.07 release

$
0
0
Starting today, we’ll begin shipping a version of U-Boot based on main-line 2013.07.

This release is fairly close to main-line U-Boot, but adds support for our Nitrogen6_Lite and other custom boards.

New features include: You can grab a binary package that includes support for all of our boards here: If you extract the content to an SD card, you can upgrade like so:
U-Boot > bootfile=u-boot.nitrogen6q ; run upgradeu
Refer to this post for more detail.

Timesys Linux kernel 4.0.0

$
0
0
This post is just a quick note that we’ve been a bit behind Timesys.

They’ve been shipping a kernel and userspace based on the 4.0.0 code base since early August, and we’ve only just pulled it in to what we’re shipping.

Please visit the Timesys Nitrogen6x page for details of the demo package and Timesys tools for i.MX6.

i.MX6 kernel 4.1.0

$
0
0
If you’ve been watching our Github kernel repository, or if you’ve been following developments in the meta-freescale Yocto mailing list, you may have noticed a new branch named boundary-imx_3.0.35_4.1.0. This branch contains our patches on top of Freescale’s release last week.

We’ve spent enough time exercising this with each of our boards and peripherals to release this for prime-time, and will be using it as the basis for near-term development.

GPU and X-Windows

We’ll refer you to the Freescale documentation for the complete list of what’s changed, but the highlight for us are the bug fixes in GPU and X.

To that point, we put together an X-Windows based image using LTIB, and you can download it here: This is the first image we’ve produced that runs and accelerated glxgears right out of the box.

Nice job, Freescale!

Unfortunately, we ran into more than the usual number of snags building a non-X image with this release, and given the current state of the Yocto project, we’ve decided not to chase down the details.

Linaro Raring images with 4.1.0 kernels for i.MX6

$
0
0
We’ve just uploaded a handful of new images to our cloud storage that combine the latest Linaro builds with our latest kernel (3.0.35_4.1.0).

We did this for a few reasons:
  • The kernel used in previous Linaro images were woefully out of date, and
  • The Ubuntu release from Freescale is also getting really out of date. It’s based on the Oneiric (2011.10) release and will prompt immediate for an upgrade (which isn’t supported), and
  • Other platforms are in a period of transition, making it difficult to point customers at known, working filesystems to use with our latest kernel.
The process used to build these images is pretty simple, and largely outlined in this post.

In short, we simply extracted the root filesystems from the Linaro 13.08 Raring packages and overlaid them with our latest kernel and boot script: We also installed the GPU binaries, but they’re currently only configured for Frame-buffer access. The Vivante demos are available in /opt/viv_samples/vdk.

You can read more about the Freescale 3.0.35_4.1.0 release here: The images are available here:
NameSizeDownload
alip341linaro-raring-alip-20130926.tar.gz
developer205linaro-raring-developer-20130926.tar.gz
server199linaro-raring-server-20130926.tar.gz
nano126linaro-raring-nano-20130926.tar.gz

Yocto Dora release (for i.MX6)

$
0
0
yocto-dora-screenshot In case you missed it, the Yocto Dora branch arrived late on Friday night. Please join me in thanking Otavio and the meta-freescale team for working late and getting this done.

The Dora branch contains support for our latest kernel directly, so you can follow Daiane’s excellent instructions for how to build and simply replace dylan with dora in Step 1 (Download the Source Code).

We built an image over the weekend and have been testing a build of fsl-image-gui today. It’s performing quite well, and contains support for both GPU X acceleration and GStreamer video acceleration.

The steps to build were simple:
~/$ mkdir yocto && cd yocto
~/yocto$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b dora
~/yocto$ repo sync
~/yocto$ MACHINE=nitrogen6x . setup-environment build
~/yocto/build$ bitbake fsl-image-gui
... long time passes
~/yocto/build$ ls -lh tmp/deploy/images/nitrogen6x/
...
-rw-r--r-- 1 user group 996M Sep 28 14:55 fsl-image-gui-nitrogen6x-20130928181014.rootfs.sdcard
...
Installing to SD card is also very straightforward. Assuming your SD card shows up as /dev/sdc, you can use these commands to write it:
~/yocto/build$ sudo umount /dev/sdc*
~/yocto/build$ sudo dd if=tmp/deploy/images/nitrogen6x/fsl-image-gui-nitrogen6x-20130928181014.rootfs.sdcard of=/dev/sdc
To make things easy for you, we’ve uploaded an image to our Cloud storage site: This image should be usable directly using dd under Linux as shown above, or by using Alex Page’s USB Image Creator under Windows.

Note that the Yocto build process generates a small partition for the root filesystem in partition 2, and you might want to use resize2fs to expand it to use the rest of your SD card.

i.MX6 3.5.7 alpha release

$
0
0
If you monitor our Github kernel repository, you may have noticed a branch for kernel version 3.5.7 (boundary-imx_3.5.7_1.0.0).

Freescale released an alpha version of 3.5.7 a while back, and we’ve added support for Nitrogen6Q and BD-SL-i.MX6 boards, and have been working through the details to test the functionality.

This is a work-in-progress, since the conversion to Device Tree involves almost every part of the Linux kernel and each of the processor and board’s peripherals.

We’ve been tracking our progress using this blog post, and you’ll see that while there is a substantial amount of functionality, some key pieces are missing. The biggest of these is support for our Nitrogen6 Lite board and variants of Nitrogen6x running Dual or Single-core processors and support for PCIe and camera inputs.

Since Freescale just released a 3.10-alpha kernel, we’ll be switching our efforts to this version, and think it’s time to announce the 3.5.7 code base and publicize the current status.

We do have some customers who have been testing 3.5.7, and for those familiar with DT who don’t need un-tested features, this code base has proven stable, if not as widely tested as the 3.0.35_4.1.0.

Please kick the tires if you have some time, and as always, let us know your results.

If your project is close to completion and you’re looking for a production-ready kernel, please continue to use 3.0.35_4.1.0.
3.5.7 3.5.7 3.5.7
Function 4.0.0 kernel SABRE Lite Nitrogen6Q Nitrogen6-Lite
Boots Yes Yes Yes not yet
Peripherals
SD Card Yes Yes Yes not yet
Ethernet 600Mbps up/down Functional 370-400 up/490 down Functional 470 down/520 up not yet
USB Host Yes Usb stick, mouse, keyboard Usb stick fine not yet
USB Slave Yes g_ether 115Mbps up/130M down g_ether fine not yet
USB OTG Yes Usb stick fine Usb stick fine not yet
Audio out Yes Yes Yes not yet
Microphone Yes Unknown Yes not yet
GPIO Buttons Yes Yes Search == KEY_POWER Yes Search == KEY_POWER not yet
SATA Yes Yes Yes not yet
PCIe Yes not yet not yet not yet
Wi-Fi Yes N/A Yes not yet
BT Yes N/A Yes not yet
SPI-NOR Yes Yes Yes not yet
Displays
Freescale LVDS Yes yes yes not yet
1024×600 LVDS Yes Yes Yes not yet
800×480 RGB Yes Yes Yes not yet
HDMI Yes yes yes not yet
Composite video out Yes Unknown Unknown not yet
Backlights
LVDS Yes Yes Yes not yet
RGB Yes Yes Yes not yet
Touch screens
eGalax (Hannstar) Yes Works Works not yet
ft5x06 (7″ PCAP) Yes Works Works not yet
tsc2004 (7″ Resistive) Yes Works Works not yet
Cameras
OV5642 parallel Yes Yes Needs CLKO2 config not yet
OV5640 MIPI Yes Yes Yes not yet
ADV Composite video Yes Unknown Unknown not yet
Internals
Thermal sensor Yes Yes Yes not yet
CPUFreq Yes Yes Yes not yet
OTP Yes Unknown Unknown not yet
CAAM Yes Unknown Unknown not yet
RNG Yes Unknown Unknown not yet
MTD Yes Yes, U-Boot, env, kernel partitions Yes, U-Boot, env, kernel partitions not yet
GPU Yes tutorial3_es20 68fps@1080P tutorial3_es20 73fps@1080P not yet
VPU Yes Works Works not yet
Viewing all 391 articles
Browse latest View live