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

i.MX 6 U-Boot updates

$
0
0
We’ve just pushed updates to each of our U-Boot source trees to address a pretty critical issue. The memory configuration settings for our SABRE-Lite based design along with Nitrogen6X and Nitrogen6X-SOM products will all fail under certain corner conditions. We recommend that all users of the SABRE Lite or Nitrogen6X update their U-Boot as soon as convenient, and we’ll try to make that as easy as possible.

The patches

All of our primary U-Boot branches have been updated, including: As previously discussed in this post, our primary focus is on main-line-based U-Boot, but we added a minimal set of patches to the U-Boot 2009.08 trees above that allow use of those trees on Nitrogen6X. The staging branch is needed for customers with Solo or Dual-Lite processors, or those with 2GB of RAM on the Nitrogen6X.

Upgrading

If you don’t want to re-compile U-Boot yourself, we’ve placed images on-line:
Binary Rename to Description
u-boot-nitrogen6x.imx u-boot.imx Main-line production binary for SABRE Lite or Nitrogen6X boards
u-boot-nitrogen6q.imx u-boot.imx Main-line staging binary for SABRE Lite or Nitrogen6X boards
u-boot-non-android.bin u-boot.bin U-Boot 2009.08 binary for SABRE Lite or Nitrogen6X boards based on Freeescale’s L3.0.35_imx_1.1.0 release
u-boot-android.bin u-boot.bin U-Boot 2009.08 binary for SABRE Lite or Nitrogen6X boards based on Freeescale’s imx_android_r13.4.1-ga
The files listed as Rename to u-boot.imx can be programmed using our 6x_upgrade script. Those with the u-boot.bin tag can be upgraded with the 6q_upgrade script. If you have no idea what that means, please check out this post describing the name change or further back, this post describing the boot process. If you don’t want to mess with the scripts, you can program a u-boot.imx like so:
U-Boot > mmc dev 0
U-Boot > fatload mmc 0 10800000 u-boot.imx
313816 bytes read in 132 ms (2.3 MiB/s)
U-Boot > sf probe
SF: Detected SST25VF016B with page size 4 KiB, total 2 MiB
U-Boot > sf erase 0 0xc0000
U-Boot > sf write 10800000 0x400 $filesize
U-Boot > reset
Or a u-boot.bin like this:
MX6Q SABRELITE U-Boot > mmc dev 0
mmc0 is current device
MX6Q SABRELITE U-Boot > ext2load mmc 0 10800000 u-boot.bin
Loading file "u-boot.bin" from mmc device 0:1 (xxa1)
179008 bytes read
MX6Q SABRELITE U-Boot > sf probe 1
JEDEC ID: 0xbf:0x25:0x41
2048 KiB SST25VF016B - 2MB at 0:1 is now current device
MX6Q SABRELITE U-Boot > sf erase 0 0xc0000
Erasing SPI NOR flash 0x0 [0xc0000 bytes]
................................................................................................................................................................................................SUCCESS

MX6Q SABRELITE U-Boot > sf write 10800000 0 $filesize
Writing SPI NOR flash 0x0 [0x2bb40 bytes]  reset
Besides the more verbose prompt and messages, the syntax for sf probe is different and the u-boot.bin file gets written to address zero instead of 0x400.

Compiling

There’s a blog post here describing how to get and compile our latest U-Boot from the production branch of our latest main-line-based (u-boot-imx6) tree. If you have no special requirements, we recommend that, since it contains file-system enhancements and support for auto-detection of displays. If you need one of the more advanced features supported by Freescale, especially support for secure boot, you’ll need to stay with the Freescale-derived source tree. You can get and compile the non-Android branch like so:
~/$ git clone git://github.com/boundarydevices/u-boot-2009-08.git
~/$ cd u-boot-2009-08
~/u-boot-2009-08$ git checkout origin/boundary-imx_3.0.35_1.1.0 \
      -b boundary-imx_3.0.35_1.1.0
Checking out files: 100% (6608/6608), done.
Branch boundary-imx_3.0.35_1.1.0 set up to track remote branch boundary-imx_3.0.35_1.1.0 from origin.
Switched to a new branch 'boundary-imx_3.0.35_1.1.0'
Checking out files: 100% (6608/6608), done.
...
Switched to a new branch 'boundary-imx_3.0.35_1.1.0'
~/u-boot-2009-08$ export PATH=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/:$PATH
~/u-boot-2009-08$ export ARCH=arm
~/u-boot-2009-08$ export CROSS_COMPILE=arm-none-linux-gnueabi-
~/u-boot-2009-08$ make mx6q_sabrelite_config
Configuring for mx6q_sabrelite board...
~/u-boot-2009-08$ make all
...
arm-none-linux-gnueabi-objcopy -O srec u-boot u-boot.srec
arm-none-linux-gnueabi-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
~/u-boot-2009-08$ ls -l u-boot.bin
-rwxrwxr-x 1 user user 179080 Feb 11 15:37 u-boot.bin
Send us a note if you have any questions.

The details

This took a long time to find because the bug was hiding behind and appearing as if the problem stemmed from a CPU frequency scaling problem. When we received our first shipment of non-lidded CPUs, none of them would boot reliably at 1GHz, and we started suspecting hardware issues. After much investigation, we found that the new devices were fused to configure the ramp rate for the on-chip LDOs to the slowest rate (250uS full-scale), and that the CPU frequency switching code only waited 50uS after bumping the LDOs on a raise in frequency. In the process of testing for that, we put together some shell script-lets to switch frequencies rapidly between 400MHz, 800MHz, and 1GHz as shown in the following profile snippet:
setspeed(){ echo $1 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed; }
temp(){ t=`cat /sys/class/thermal/thermal_zone0/temp` ; echo "---------------- temp $t" ; }
speed(){ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq; }
vddpu(){ if [ 0 -eq $# ]; then echo -n "vddpu: " ; cat /sys/class/regulator/regulator.1/microvolts ; else echo $* > /sys/class/regulator/regulator.1/microvolts ; fi } 
vddcpu(){ if [ 0 -eq $# ]; then echo -n "vddcpu: " ; cat /sys/class/regulator/regulator.2/microvolts ; else echo $* > /sys/class/regulator/regulator.2/microvolts ; fi } 
vddsoc(){ if [ 0 -eq $# ]; then echo -n "vddsoc: " ; cat /sys/class/regulator/regulator.3/microvolts ; else echo $* > /sys/class/regulator/regulator.3/microvolts ; fi } 
s1g400(){ for n in `seq 1 1000` ; do for s in 996000 396000 ; do setspeed $s ; done ; done ; echo '==================> 1G->400 worked'; }
s1g800(){ for n in `seq 1 1000` ; do for s in 996000 792000 ; do setspeed $s ; done ; done ; echo '==================> 1G->800 worked' ; }
testit(){ for it in `seq 1 100` ; do echo "-----iteration $it" ; s1g800 ; s1g400 ; temp ; done ; echo '100 iterations worked'; }
These commands make use of the userspace CPU frequency governor by reading and writing data from /sys/devices/system/cpu/cpu0/cpufreq/. For example, to switch to 800MHz, you can issue the setspeed command (frequencies in kHz):
root@boundary ~$ setspeed 792000
And to see the current speed, you can issue the speed command:
root@boundary ~$ speed
792000
We used the testit command to switch between 1GHz and 400MHz for 1000 iterations, followed by switches between 1GHz and 800MHz. The testit command runs through that sequence 1000 times, for a total of 4 million switches.
root@boundary ~$ testit
==================> 1G->400 worked
==================> 1G->800 worked
What we found was that some boards would fail this test when other load is present on the system. Running four simultaneous memory tests (one per core) was sufficient to cause a failure. Needless to say, this is a totally artificial test, but it uncovered something pretty critical. Memory timings that were slightly off caused failures on some boards with this set of conditions. With the memory timing updates, these errors don’t occur. We’ve done extensive testing across lots of boards, and we’re very confident in the results. It’s likely that there are other types of load that will trigger a memory failure of the same sort, which is why we encourage all users of our i.MX6-based boards to upgrade as soon as is convenient.

Parting thoughts

During the process of finding this bug, we’ve been a bit un-responsive to some of your support requests. Once we determined that the failure also occurred on other batches of CPUs, we realized that previous shipments were also suspect and it was critical to find the root cause. We apologize for that, and will work to catch up as quickly as possible. Besides that we have a few other updates forthcoming, including updates to our kernel trees to correct the LDO ramp times, and a new release of the L3.0.35_1.1.0 branch.

SABRE Lite name change – BD-SL-i.MX6 Built to Freescale SABRE Lite Design

$
0
0
In an effort to align with Freescale marketing and branding strategies, we are formally changing the SABRE Lite product name. The new name will be BD-SL-i.MX6 Built to Freescale SABRE Lite Design. You will notice this name change throughout our website. This is a name change ONLY and nothing in the board design will be modified. In order to minimize confusion, all references to BD-SL-i.MX6 will have (formerly SABRE Lite) following the name. Please let us know if you have any questions or concerns. Thanks.

Timesys 2013-03 release

$
0
0
Timesys has issued an updated release for our Nitrogen6X and BD-SL-i.MX6 (formerly SABRE Lite) boards. This release is primarily to update the kernel, but the folks at Timesys have also added some new features to the demo for a better out-of-the box experience that we’ll describe below.

First, the demo

Download

We’ll begin shipping this image with new boards in the next couple of days.

If you just want to try it yourself, you can download the image from Timesys here.

If you haven’t already, they’ll ask you to register, but I promise, they’ll be nice to deal with.

Now the details


New kernel release

This release is the first publicly-announced image containing our latest kernel, on the boundary-imx_3.0.35_1.1.1 branch of our Github repository. There are lots of bug fixes and enhancements from Freescale and us in that package, and we’ll cover them in a separate post, but the highlights are:

  • Support for single-core and dual core processors as discussed here.
  • Better PCIe support. We’ll discuss this in an upcoming post.
  • Added support for our new OV5640 MIPI Camera module.

Triple display support

This Timesys release contains our new boot script to initialize each of our panels as described in this blog post. The script uses the HDMI hot-plug-detect pin and the I2C interface to the touch controllers on other panels to automatically configure the command-line arguments for the kernel.

This Timesys demo adds to that some scripts to walk the kernel command line and start up to three processes, with environment variables telling each instance which frame buffer and which input device to use.

If you want to follow this logic, you can start by looking at this fragment of /etc/init.d/S99-fluidlauncher:
    for param in `cat /proc/cmdline` ; do
	case $param in 
		video=*)
			echo "-------- parse video $param here" ;
        ...
The script file /root/rundemo contains the details of how you can read the display resolution from /sys/class/graphics to determine the screen resolution and from that, determine which touch device (or mouse) to use.


New additions

Based on customer request, this image contains a number of additional tools:

  • iperf – an Internet Protocol performance testing tool. This is what we used in testing the Gigabit ethernet performance we discussed a while back.
  • Wi-fi support – This release contains support for wpa_supplicant and firmware for the WL1271 Wi-Fi adapter on Nitrogen6x and Nitrogen6X-SOM.
  • Bluetooth support – This release contains the Bluez package to allow testing of the Bluetooth interface on the Nitrogen6x and Nitrogen6X-SOM.
  • imx_usb – This tool allows you to download a bootable image over the USB On-the-go (OTG) port, so you can unbrick your board if something bad happens.
  • alsa-utils – This set of utilities allow you to control the settings of the audio channels on the i.MX6 boards and also provide support for audio recording.
  • Audio is now fully supported. Both the SGTL5000 analog channel and the HDMI digital channel are operational and selectable as described in this post.
  • Timesys has integrated Phonon into the Qt build, so your Qt applications can access play and video directly without binding to gstreamer directly.

Things you need to know

There are some restrictions to particular screens for some of the demo applications.

In particular:
  • Because of some hard-coded references to /dev/fb0, the Vivante demos will only run on the first display.
  • The Timesys Theatre demo only works on the first two displays. This stems from a limitation on the number of overlays supported by the IPU.
  • Only two displays are supported on Solo and Dual-Lite because there’s only a single IPU on these processors.
  • Likewise, Timesys Theatre will only function on the first display on Solo and Dual-Lite.
For these purposes, the displays are ordered in the boot script as follows:
  • HDMI
  • LVDS
  • RGB

Wi-Fi Quick-start

To verify that the wireless LAN device is running and that wpa_supplicant has configured it, you can use the wpa_cli command as follows:
~/$ wpa_cli scan
~/$ wpa_cli scan_res
If you haven’t used it before, the wpa_cli program is a command-line tool to connect to and configure a running wpa_supplicant. The wpa_cli --help command will give you a complete list of options, but here are some simple use cases:
Add an unsecure network
This example adds a network for SSID “myssid” with no encryption or authentication. Note that the last line in this example (save_conf) tells wpa_supplicant to save the settings into its configuration file (in /etc/wpa_supplicant.conf).
~/$ wpa_cli add_net
0
~/$ wpa_cli set_net 0 ssid '"myssid"'
~/$ wpa_cli set_net 0 key_mgmt NONE
~/$ wpa_cli enable_net 0
~/$ wpa_cli save_conf
Also note that the zeros produced by the add_net command above is used in the following three lines to distinguish it from other network configurations. The /etc/wpa_supplicant.conf/tt> file can contain more than one network configuration and wpa_supplicant can choose between them based on availability and priority.
Add a WEP-secured network
This example uses a WEP passphrase. To use a 40-bit or 128-bit hex string, the quotes on the wep_key0 line should be omitted:
~/$ wpa_cli add_net
1
~/$ wpa_cli set_net 1 ssid '"myssid"'
~/$ wpa_cli set_net 1 key_mgmt NONE
~/$ wpa_cli set_net 1 wep_key0 '"passphrase"'
~/$ wpa_cli set_net 1 wep_tx_keyidx 0
~/$ wpa_cli enable_net 1
~/$ wpa_cli save_conf
Add a WPA-PSK-secured network
~/$ wpa_cli add_net
2
~/$ wpa_cli set_net 2 ssid '"myssid"'
~/$ wpa_cli set_net 2 psk '"passphrase"'
~/$ wpa_cli set_net 2 key_mgmt WPA-PSK
~/$ wpa_cli enable_net 2
~/$ wpa_cli save_conf
The strange single-plus-double quoted strings are needed to prevent the shell from stripping the quotes from the SSID and passphrase strings.

Note that there are a lot more options for setup of wpa_supplicant. Refer to the WPA Supplicant web-site for definitive details.


Bluetooth Quick-start

The Bluetooth support is essentially what we described in a previous post.

# bluetoothd 
# echo 176 >/sys/class/gpio/export
# echo low >/sys/class/gpio/gpio176/direction
# echo high >/sys/class/gpio/gpio176/direction
# hciattach -t 30 -s 115200 /dev/ttymxc2 texas 3000000 flow
...debug spew omitted
Found a Texas Instruments' chip!
Firmware file : /lib/firmware/TIInit_7.2.31.bts
Loaded BTS script version 1
texas: changing baud rate to 3000000, flow control to 1
Device setup complete
# 
# hcitool scan
Scanning ...
	00:21:4F:B8:A3:C9	ericsony-0
	B0:79:94:CA:D9:47	DROID RAZR HD
# 

U-Boot branches for i.MX6 – April 2013

$
0
0
We’ve just swapped around the production and staging branches of our GitHub repository for i.MX6.

The old production branch is now in branch production-before-20130402 and the prior staging branch is now in branch production, reflecting the fact that we’ll now be shipping versions based on our multi-CPU structure.

The primary thing you need to know was described in the previous post. You’ll now need to specify the board configuration in more detail. Instead of nitrogen6x_config, most of you will want nitrogen6q_config, reflecting the fact that you’re building for our standard Quad-Core, 1GB board.

user@build:~$ git clone git://github.com/boundarydevices/u-boot-imx6.git
Cloning into 'u-boot-imx6'...
remote: Counting objects: 200078, done.
remote: Compressing objects: 100% (36179/36179), done.
remote: Total 200078 (delta 161056), reused 199999 (delta 160995)
Receiving objects: 100% (200078/200078), 50.96 MiB | 1.63 MiB/s, done.
Resolving deltas: 100% (161056/161056), done.
user@build:~$ cd u-boot-imx6/
user@build:~/u-boot-imx6$ git checkout origin/production -b production
Branch staging set up to track remote branch production from origin.
Switched to a new branch 'production'
user@build:~/u-boot-imx6$ export ARCH=arm
user@build:~/u-boot-imx6$ export CROSS_COMPILE=arm-none-linux-gnueabi-
user@build:~/u-boot-imx6$ make nitrogen6q_config
Configuring for nitrogen6s - Board: nitrogen6x, Options: IMX_CONFIG=board/boundary/nitrogen6x/nitrogen6q.cfg,MX6Q
user@build:~/u-boot-imx6$ make all
Generating include/autoconf.mk
Generating include/autoconf.mk.dep
...
make -C examples/api all
make[1]: Entering directory `/home/user/u-boot-imx6/examples/api'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/user/u-boot-imx6/examples/api'
user@build:~/u-boot-imx6$ ls -l u-boot.imx
-rw-rw-r-- 1 user user 315128 Feb  1 12:41 u-boot.imx
Support for Nitrogen6X and variants has now been accepted for inclusion in the next release of main-line U-Boot, so we’ll be prepping a new staging branch to track that for future development.

i.MX6 Android branch r13.4-1

$
0
0
For those of you with access to our Android sources, we’ve recently pushed a new branch (r13.4-1) to our repo manifest.

We’re prepping a long-overdue blog post and image for Android that includes full support for WiFi and partial Bluetooth support and have included Freescale’s recent patch sets:

R13.4.1
R13.4.02 (Solo emulation)
R13.4.03 (LDO patches)
GPU P11.1 upgrade
Check the repository for the complete list of changes, but the highlights are the patches above, plus the addition of Wi-Fi support and a switch to the new U-Boot branch.

This release has been tested on Solo, Dual-Lite, and Quad-Core variants of our BD-SL-i.MX6 (formerly SABRE Lite), Nitrogen6X and Nitrogen6X SOM boards.

You should be able to sync up and build using repo like so:
~/myandroid$ repo sync
~/myandroid$ repo init -b r13.4-1
~/myandroid$ . build/envsetup.sh
~/myandroid$ m 2>&1 | tee build.out

i.MX6 images for branch r13.4-1

$
0
0
As mentioned in our prior post, we’ve updated our sources for Android on our i.MX6 boards to include Freescale’s latest patches and our support for Dual and Single-core variants.

If you don’t have access to the sources, or want an early look at the code in action, we’ve uploaded a couple of images to our cloud storage site:

LinksizeDescription
r13.4.1-nitrogen-20130407.tar.gz94 MBLinux tar-ball
r13.4.1-nitrogen-20130407.img.gz640 MBBinary image for use with dd
These images will run on all of our standard i.MX6-based boards, including Nitrogen6X, Nitrogen6X-SOM, and BD-SL-i.MX6 (formerly SABRE Lite).

Tar-ball installation

To install via the tar-ball, you’ll just need to extract the files and run device/boundary/mksdcard.sh:

~/$ mkdir r13.4-1
~/$ cd r13.4-1
~/r13.4-1$ sudo tar zxvf ~/Downloads/r13.4.1-nitrogen-20130407.tar.gz
~/r13.4-1$ sudo umount /media/*
~/r13.4-1$ sudo device/boundary/mksdcard.sh /dev/sdc
~/r13.4-1$ sync
Note that you’ll need to validate /dev/sdc for your system. If you have a built-in SD card reader, this may be /dev/mmcblk0 instead.

This image is a direct copy from the output of a source build, including the device/boundary/mksdcard.sh script and the build directory out/target/product/nitrogen6x/.

Installation of the binary image

Installation of the binary image is simpler, though considerably slower:
~/$ sudo umount /media/*
~/$ zcat ~/Downloads/r13.4.1-nitrogen-20130407.img.gz | sudo dd of=/dev/sdc
~/$ sync

Notes

Both images are configured for use on a 4GB SD card.

Each of these is a pristine image that hasn’t been run on a device. Because of this, the first boot will be slow. If you haven’t watched the boot progress of an Android image built from source with adb logcat, you might not realize that during the first boot, Android walks all of the Java code on the machine, running dexopt, and this takes a while.

Subsequent boots will be faster.

Android R13.4-GA for i.MX6 in stages – Stage 4: WiFi and Bluetooth

$
0
0
This post is long overdue, since we began leaking the sources out without proper documentation of what we did to integrate Wi-Fi with our Android build for i.MX6.

In this recent post, we discussed how to get and compile the latest branch of Android for our boards. In this post, we’ll describe the key bits we added in more detail.

For those of you coming in late to this series, the following posts describe the early steps in booting Freescale’s Android release on our Nitrogen6X, Nitrogen6X-SOM, and BD-SL-i.MX6 (formerly SABRE Lite) boards.

At the end of Stage 3, we had no Wi-Fi or Bluetooth support, and adding it involves essentially two things:
  • Removing Freescale’s patches to support the Atheros Wi-Fi module
  • Adding in support for the TiWi-R2 module on the Nitrogen6X
The first was probably the more difficult of the two. We started that process by identifying the Atheros-related patches in the Freescale patch set through a combination of grep and eye-balls.

The primary places changed were in the wpa_supplicant, bluez and libhardware_legacy modules.

You can get a pretty good snapshot of these changes by using this nice feature of GitHub to compare the branches nitrogen6x and nit6x-wifi of the repo default.xml.

If you’re new to repo and Android, the default.xml file is the piece used to consolidate a set of git repositories into a unified build tree. It’s hidden in the .repo/manifests/ directory, but crucial to understanding the Android build process.

The nit6x-wifi branch is a temporary branch we used when performing the updates for Wi-Fi, and also the version we leaked out to those of you with access to the sources.

Other key changes include: Note that there are additional changes included in some of these change-sets, but the highlights listed above show the bulk of what was done to integrate Wi-Fi in particular into the Nitrogen6X code base.

We hope that this brief overview helps as you walk through the process of customizing Android for your particular needs on i.MX6.

A very expensive SD card reader/writer using i.MX6

$
0
0
If you’re using our Android sources, we have a script named mksdcard.sh to partition an SD card and copy the output files. This works pretty well when using a removable SD card, but doesn’t address how you might do the same if you’re booting to a non-removable device like eMMC or SATA. It also requires you to have an SD card reader.

Well, the i.MX6 has a USB OTG port, and the Linux kernel supports something called g_mass_storage, or USB Mass Storage Gadget. By putting the two of those together, we can make our Nitrogen6X or BD-SL-i.MX6 board look like removable storage and use normal filesystem utilities on a Linux development machine to manipulate the storage devices.

For the impatient

If you’re cabled up to your development machine, you should see a new storage device auto-mount with the filesystem you created and booted. If you have multiple storage devices attached to your i.MX6 board, you should see a new device for each. Each device will correspond to one of the block devices:

  • SD card,
  • eMMC (for those of you with custom boards),
  • SATA, or
  • USB flash drive
The last one is kind of pointless, but is supported by default.

Note that when finished, you should shut down gracefully by:

  • Using unmount on the host machine, and
  • Issuing sync && reboot on the i.MX6 device.

Detailed usage:

1. Grab the image

Since all of this is constructed using open-source code, this part is simple:

~/$ wget http://commondatastorage.googleapis.com/boundarydevices.com/usbwrite-nitrogen6x-20130420.zip
--2013-04-20 12:53:45--  http://commondatastorage.googleapis.com/boundarydevices.com/usbwrite-nitrogen6x-20130420.zip
Resolving commondatastorage.googleapis.com (commondatastorage.googleapis.com)... 74.125.28.132, 2607:f8b0:400e:c04::84
Connecting to commondatastorage.googleapis.com (commondatastorage.googleapis.com)|74.125.28.132|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3507828 (3.3M) [application/zip]
Saving to: `usbwrite-nitrogen6x-20130420.zip'

100%[======================================>] 3,507,828   1.56M/s   in 2.1s    

2013-04-20 12:53:48 (1.56 MB/s) - `usbwrite-nitrogen6x-20130420.zip' saved [3507828/3507828]
Note that the image is really tiny (3.5MB) because we pruned the kernel a bit and used Buildroot to construct a userspace using the uClibc library and no tools beyond busybox.

2. Partition an SD card

Okay, so this step is a bit ironic, since it requires an SD card reader other than the i.MX6. It’s also not technically necessary. You could certainly boot the kernel and ram disk over TFTP, though we won’t cover that here.

If your SD reader shows up as /dev/sdc, you can create a single FAT partition like so:

~/$ sudo umount /media/* # just in case
~/$ echo ',,b,*' | sudo sfdisk /dev/sdc
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdc: 61168 cylinders, 4 heads, 32 sectors/track
Old situation:
Units = cylinders of 65536 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sdc1   *      0+  61167   61168-   3914751+  83  Linux
/dev/sdc2          0       -       0          0    0  Empty
/dev/sdc3          0       -       0          0    0  Empty
/dev/sdc4          0       -       0          0    0  Empty
New situation:
Units = cylinders of 65536 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sdc1   *      0+  61167   61168-   3914751+   b  W95 FAT32
/dev/sdc2          0       -       0          0    0  Empty
/dev/sdc3          0       -       0          0    0  Empty
/dev/sdc4          0       -       0          0    0  Empty
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
~/$ sudo mkfs.vfat -n usbwrite /dev/sdc1
mkfs.vfat 3.0.12 (29 Oct 2011)
~/$ udisks --mount /dev/sdc1
Mounted /org/freedesktop/UDisks/devices/sdc1 at /media/usbwrite

3. Extract

Because the example above used the FAT filesystem, there’s no reason to use sudo to extract the files.

~/$ unzip usbwrite-nitrogen6x-20130420.zip -d /media/usbwrite/
Archive:  usbwrite-nitrogen6x-20130420.zip
  inflating: /media/usbwrite/6x_bootscript  
  inflating: /media/usbwrite/uImage  
  inflating: /media/usbwrite/uramdisk.img  
  inflating: /media/usbwrite/buildroot.config  
  inflating: /media/usbwrite/kernel.config  
~/$ sync && sudo umount /media/usbwrite

4. Boot, Login, and Run expose-usbdisks

The RAM disk image is configured to offer a login prompt (a getty) on both the serial console (/dev/ttymxc1) and a monitor/keyboard (/dev/tty0) if present.

The only user defined is root and the password is Boundary.

Boundary Devices
boundary login: root
Password: 
# expose-usbdisks 
1 drives: /dev/mmcblk0
exporting 1 drives:
	mmcblk0: SD: : 3823 MBytes
If you have another SD card, eMMC, or SATA drive connected, you’ll see additional devices listed when you run expose-usbdisks.

5. Access from dev machine

If you’ve connected your USB OTG port to a development machine, you’ll see a new device appear and auto-mount:

~/$ mount
...
/dev/sdc1 on /media/usbwrite type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
Note that while the storage device on the i.MX6 machine is connected through g_mass_storage, you should not try to access it from the i.MX6 side of the link. There’s no locking in place between the two sides, and filesystem corruption will occur.

6. Shut down gracefully

When done manipulating files from your dev machine, you should dismount all partitions:
~/$ sudo umount /media/*
And you should reboot gracefully on the i.MX6 side:
root@boundary: ~/$ sync && reboot

The details

uramdisk.img was built using Buildroot

Specifically, the RAM disk was built using buildroot-2013.02.tar.bz2 and the configuration is in the zip-file as buildroot.config.

You can repeat this like so:
~/$ wget http://buildroot.uclibc.org/downloads/buildroot-2013.02.tar.bz2
~/$ tar jxvf buildroot-2013.02.tar.bz2
~/$ unzip usbwrite-nitrogen6x-20130420.zip \
     -d buildroot-2013.02
     buildroot.config
~/$ cd buildroot-2013.02/
~/buildroot-2013.02$ mv buildroot.config .config
~/buildroot-2013.02$ make


Buildroot is configured to create a gzipped cpio archive in output/images/rootfs.cpio.gz and it’s ready to be wrapped for U-Boot using mkimage.

~/buildroot-2013.02$ mkimage -A arm -O linux -T ramdisk -n "Initial Ram Disk" \
           -d output/images/rootfs.cpio.gz uramdisk.img
Okay, so this is almost true. We did a little more to this image because we added the expose-usbdisks script. We did this by using the utility scripts described in our Hacking RAM disks post.

The expose-usbdisks script itself.

The expose-usbdisks script is a fairly simple shell script that determines what block devices are connected to the system by looking in /sys/class/block for mmcblk? and sd?:

#!/bin/sh
cd /sys/class/block
drives=`for d in * ; do echo $d ; done | grep -e 'mmcblk[01]$\|sd[a-z]$'`
dcount=0; 
dlist=''; 
for d in $drives ; do 
         dlist=$dlist,/dev/$d ; 
         dcount=`expr $dcount + 1 `; 
done ; 
dlist=${dlist:1} ; 
echo $dcount drives: $dlist;
modprobe g_mass_storage file=$dlist;
echo "exporting $dcount drives:" | tee /dev/tty0
for d in $drives ; do 
        name='';
	type='';
        if [ -e /sys/class/block/$d/device/model ]; then
                type=`cat /sys/class/block/$d/device/vendor`;
                name=`cat /sys/class/block/$d/device/model`;
        else if [ -e /sys/class/block/$d/device/type ]; then
                type=`cat /sys/class/block/$d/device/type`;
        else
		type='unknown';
                name=other;
        fi ; fi
	size=`cat /sys/class/block/$d/size`
	size=`expr $size \* 512`
	size=`expr $size / 1048576`
        echo -e "\t$d: $type: $name: $size MBytes" 
done | tee /dev/tty0
The primary purpose is to build a parameter string for the g_mass_storage kernel module as described the document describing the backing store.

The boot script.

If you’ve been using and modifying our boot scripts to load your kernel, you might notice that this differs somewhat from some other distributions. In our Timesys, LTIB, and Ubuntu builds, we generally use an ext3 partition as the root filesystem and don’t boot to a RAM disk.

The boot script updates for this are pretty simple: we simply load the RAM disk into memory at address 0x12800000 and pass it as a second parameter to the bootm command:

${fs}load ${dtype} ${disk}:1 10800000 /uImage 
&& ${fs}load ${dtype} ${disk}:1 12800000 /uramdisk.img
&& bootm 10800000 12800000 ;
The source for the boot script is in /root/6x_bootscript within the RAM disk itself.

Conclusion

This post may seem like a lot of detail for something simple, but we hope that either the image or the description of the pieces will likely be useful to those of you dealing with how to access storage on your boards.

Let us know if you find this useful (or confusing).

Secure boot on i.MX6 Nitrogen6X boards

$
0
0
This is a short post that’s more of a re-tweet and a Thank you note than anything.

Dr. V. Kamakoti and the team at the RISE Lab at the Indian Institute of Technology Madras recently configured a Nitrogen6X board to use the High Availability Boot or Secure Boot features of the i.MX6 processor.

They were also kind enough to share their work through i.MX Community.

You can download their notes here:

For additional information, please refer to these documents and packages from Freescale:

Securing the boot process can be a daunting task. The Freescale reference manual does a great job of detailing all of the components, the paper from the team at IIT Madras helps to consolidate the information and give a practical example of its’ use.

Thanks again!

Boot an i.MX6 in 0.58 seconds

$
0
0


This is another post that amounts to a Thank you for sharing.

In this case, the thanks go to Alexandre Belloni for sharing some work on Boot time optimization he did at Adeneo Embedded.

We became aware of Alexandre’s work through this thread on the U-Boot mailing list back in February.

Note that this work was not done on one of our boards and doesn’t use U-Boot, but it’s cool, and it stands as proof of what the right team can achieve and a target for us all.

In order to achieve this speed, Alexandre needed to do much more than optimize the boot loader though. Tailoring the early Linux startup process was every bit as important and the result is quite impressive.

More details can be found:

Alexandre is currently working at Free Electrons in France and can be reached there.

Well done, Alexandre, and thanks for sharing.

OV5642 auto-focus on i.MX6

$
0
0

Before

before

After

after



Source is here.

‘Nuff said?

Probably not.

More detail is probably useful.

A word of thanks

Before the details, I’d first like to thank the folks at Ray Business Technologies for helping put this together. They have a strong team of embedded developers with competency in embedded Linux, i.MX6, and gstreamer and we wouldn’t have gotten this done without their help.

Okay, more details

For those of you using our Omnivision OV5642 parallel camera module, you may have noticed that it doesn’t do auto focus, but defaults to a long-range (infinite) focal length.

This doesn’t mean that the hardware doesn’t support it, only that the drivers supplied by Freescale were missing some key pieces.

The camera modules themselves contain a voice coil motor controlling the lense assembly and the OV5642 contains a micro-controller that knows how to drive it.

What was missing were:

How to test

We’re not going to delve too far into the details about this, but there’s a simple gstreamer utility that you can use to test it in this package:

It should compile and run on Yocto, Timesys or LTIB distributions using a command-line something like this:
~/gstcamera$ export RFS=$HOME/ltib-01.01/rootfs
~/gstcamera$ arm-fsl-linux-gnueabi-gcc \
               -L${RFS}/usr/lib/ \
               -I${RFS}/usr/include/gstreamer-0.10/ \
               -I${RFS}/usr/include/glib-2.0 \
               -I${RFS}/usr/lib/glib-2.0/include/ \
               -I${RFS}/usr/include/libxml2 \
               -o gstcamera \
               gstcamera.cpp \
               -lsupc++ -lpthread -lgstreamer-0.10 \
               -lgobject-2.0 -lgthread-2.0 \
               -lgmodule-2.0 -lglib-2.0 -lxml2 -lz
This app is a very simple wrapper around some gstreamer bits and is a total hack. It uses the gst_parse_launch() routine to parse the command line a.la. gst-launch and totally hijacks the camera file descriptor to perform the ioctl calls for auto-focus and manual focus.

Typical usage is:
~/$ gstcamera mfw_v4lsrc ! mfw_v4lsink
AF
SP0
SP255
 or  to exit
The commands supported include:
  • AF – triggers auto-focus
  • SPn – Set focus to Position n where n in the range [0..255]. 0 is furthest focal length. 255 is nearest.

Limitations

Note that this patch only applies to the OV5642 module and only in the non-Android kernel branch at the moment. Support for the OV5640 MIPI module and Android support will be added soon.

Stay tuned for more…

Android 4.2.2 (Jellybean) on i.MX6

$
0
0
jellybean
Freescale recently published a release of the Jellybean version of Android for i.MX6. Weighing in at 247MB, it consists of:
1501 patches
7649967 lines of patch (excluding the kernel and U-Boot)
22 AOSP projects changed
15 projects added to AOSP

Where is it?

It took us a while to get things bootstrapped, but we now have a set of buildable sources: Note that in order to download the sources, you’ll need to be signed up for access to our private repositories.

This is alpha code!

Note that this is a very preliminary release. It’s bootable and contains a lot of functionality, but there are a lot that hasn’t been tested. Notably:
  • The vold structure has changed somewhat, so media playback hasn’t been tested.
  • Wi-Fi hasn’t yet been tested on Nitrogen6X.
  • Only the SABRE Lite and Nitrogen6X boards are currently supported.
  • The camera application has not yet been tested, and
  • The browser is slow to load pages.

Details of the browser issue

The last item in the list above is one of the things that put getting a Jellybean release up and running on our front burner. Those of you who have run the recent ICS releases have probably noticed that the browser is often unresponsive. We did some testing of the ICS code base and found that there appeared to be issues on initial page loads, and these seem to be present in the JB code base as well. Before setting it aside, we did find out that the issues seem to be related to I/O and not CPU:
  • top shows almost zero CPU utilization while the browser is stalled.
  • Several customers indicated that switching to a Class 10 SD card
  • We found that the speed was much improved on a board booted to eMMC (which has much higher bandwidth)
  • We also found that there are warning messages from the audio subsystem like this:
    W/AudioFlinger( 2361): write blocked for 343 msecs, 1 delayed writes...
    
    Removing the audio output code didn’t solve the issue though. Things were slow even when audio output consisted of a no-op.
Oddly, many of the browser benchmarks report quite respectable numbers on Jellybean. Xianzhong Li at Freescale put together a nice post on i.MX Community describing some of the GUI features of the ICS version of Android. In it there is a list of Browser benchmarks and each of them seems to load slow, but ultimately report and demonstrate very respectible numbers. In other words, the problems appear to be related to either user input or initial page loads.

How do I build and test?

The build process is essentially the same as on the ICS release, but with the jb-1.1.0 branch:
~/$ 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 here]
~/myandroid$ m 2>&1 | tee build.out
~/myandroid$ sudo device/boundary/mksdcard.sh /dev/sdc
Note that the reference to /dev/sdc above will need to match your SD card reader.

More to follow

Sorry for the preliminary release, but we’ve had numerous requests for an early update, and vacation schedules dictate that we either release an early version now or wait for a couple of weeks. Stay tuned for updates.

Yocto on i.MX6 boards

$
0
0

Q: What is Yocto?

A.A set of tools for building embedded Linux systems, or
B.A collaborative community of developers who want to bring order to the process of embedded Linux development, or
C.An ancient Swahili word that translates loosely to ate my hard drive?

Overview

Since starting this blog, we’ve talked a lot about LTIB, Timesys, Android, Buildroot and Linaro in these pages, but we’ve been largely silent about the Yocto Project.

This shouldn’t be interpreted as a comment from us about the suitability of the project for use with our boards. It’s more of a comment on our lack of experience with Yocto, and the strengths of the folks involved in Yocto and i.MX processors.

As mentioned above, the Yocto Project is an open-source, collaborative project that aims to consolidate the efforts of those involved in embedded Linux systems.

It builds upon the long history of the OpenEmbedded project to provide a framework for building system images through cross-compilation in a similar manner as other open-source projects like Buildroot, LTIB, and PTXDist.

Included in the structure are facilities for SDK creation, IDE integration, and a very large set of supported packages (recipes, in Yocto/OpenEmbedded jargon).

The ate my hard drive comment above was only slightly tongue-in-cheek. After a recent build of fsl-image-gui, my Yocto tree was 33GB! The package variety is large, and the fsl-image-gui package includes X, a Desktop Manager, and a lot of demo code.

In our “Where’s the BSP?” post, we largely deflected the question, and the Yocto Project provides an open-source answer.

Structure

We are new to the area, but some key things we’ve learned include:
  • The Yocto Project is the umbrella project that defines standards across architectures.
  • Poky is a reference system of the Yocto Project. It provides a set of working examples about how a system might be constructed using Yocto.
  • Meta-FSL-ARM is a project to add support for Freescale’s ARM processors. In Yocto jargon, it provides a meta layer with support for various i.MX boards, including ours.

Resources

Freescale and O.S. Systems have put a lot of time and effort into enabling Yocto on i.MX boards.

There are a number of posts on the i.MX Community site, including:

We’d like to give special thanks to Otavio Salvador for not only adding support for our SABRE Lite (er. BD-SL-i.MX6) and Nitrogen6x boards, but also writing some easy-to-follow instructions on how to build and install them.

The meta-freescale mailing list is also a great resource for seeing what others are doing with Yocto and i.MX and collaborating with others in the community who are using Yocto on Freescale processors.

USB Keyboard support in U-Boot

$
0
0
640px-Serial_port Serial ports have been around for over 40 years and many of us embedded folks don’t leave home without them.

In recent years, they’ve been harder to come by though. They’re no longer standard on PCs, and laptops generally need a USB to serial adapter.

We’re also shipping devices in enclosures without serial port connectors, so changing a U-Boot setting through the serial port requires disassembly.

To address this, we recently enabled USB Keyboard support to our U-Boot configuration files and added some commands to our default boot script that enable it if boot fails

The links above show the details:
  • The CONFIG_USB_KEYBOARD and CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP macros must be set in the board.h file.
  • The usb start command starts the USB subsystem, and
  • You can tell U-Boot to read keys by adding usbkbd to the stdin environment variable.
There is a small down-side to this. Because polling the keyboard is relatively slow, you might see serial port buffer overruns if pasting lots of data into U-Boot from the serial port. To disable the USB keyboard, you can just set things back:
U-Boot > setenv stdin serial

Availability

This code is enabled in our staging branch of our Github tree, and will be enabled in production very soon.

Displaying a Splash Screen with U-Boot

$
0
0
We’ve recently had several customers contact us asking about using splash screens with U-Boot. We added display support to U-Boot a while back as described here and with it we got a nice Tux logo and the version information but didn’t have a way to customize it. Now we do and we’ll explain how it works in this post.

For the impatient

The process to set it up is the following:
U-Boot > ext2load mmc 1 10000000 /water-conservation1024x600.bmp.gz
745898 bytes read in 219 ms (3.2 MiB/s)
U-Boot > sf probe
SF: Detected SST25VF016B with page size 4 KiB, total 2 MiB
U-Boot > sf erase c2000 +${filesize}
U-Boot > sf write 10000000 c2000 ${filesize}
U-Boot > setenv splashimage 12000000
U-Boot > setenv splashpos m,m
U-Boot > setenv splashsize ${filesize}
U-Boot > saveenv
  • The image is copied into SPI flash so it is tied to the board and won’t change with different boot devices.
  • For splashimage, pick somewhere in the valid range.
  • The variable splashpos is optional and setting it to m,m will center the image.
  • SPI NOR flash is 2 MiB so your max image size is 1302528 bytes, 2 MiB – c2000 bytes.
  • It can handle most bmp formats as well as gzipped versions as show above.

Background

U-Boot provides the bmp command for working with bitmaps. You can load an image from an SD card and display them like this:
U-Boot > ls mmc 1
<DIR>       4096 .
<DIR>       4096 ..
<DIR>      16384 lost+found
...
         1152138 water2.bmp
         1843338 water1.bmp
         1152138 water-conservation800x480.bmp
         1843338 water-conservation1024x600.bmp
         1843338 splash.bmp
          134538 boundarydevicesx240.bmp
          745898 water-conservation1024x600.bmp.gz
U-Boot > ext2load mmc 1 10000000 /water-conservation1024x600.bmp.gz
745898 bytes read in 219 ms (3.2 MiB/s)
U-Boot > bmp i 10000000
Image size    : 1024 x 600
Bits per pixel: 24
Compression   : 0
U-Boot > bmp d 10000000
With this capability we could do something like adding the following line to the top of 6x_bootscript (or to the bootcmd environment variable), will cause u-boot to look for a bitmap image named splash.bmp in the root directory of the filesystem from whatever you’re booting from.

${fs}load ${dtype} ${disk}:1 10000000 /splash.bmp && bmp d 10000000 ;

See this post for more details about the bootscript and bootcmd

There are 2 major downsides with this method. One, if there’s no boot media attached to the board you get Tux. Two, it’s slow and fleeting. You still see Tux and the version info for a second or 2 because it only runs once the bootcmd has been called after the 1 second boot delay and if you continue to boot into Linux or something else which has it’s own splash screen or simply clears the screen, you’ll only see your image for a second anyway.

SPI NOR and splashimage

We want displaying the splash screen to work regardless of whether there’s an SD card or anything else plugged in to boot from and we want it displayed immediately on boot up (without seeing Tux or U-Boot output).

The first part can be solved using flash. Our boards have 2 MiB of non-volatile SPI NOR flash, part of which we use to store U-Boot and the environment variables. We can store an image here with U-Boot’s sf commands. Assuming you’ve just loaded an image to RAM at address 10000000 (see above), the process looks like this:

U-Boot > sf probe
SF: Detected SST25VF016B with page size 4 KiB, total 2 MiB
U-Boot > sf erase c2000 +${filesize}
U-Boot > sf write 10000000 c2000 ${filesize}
U-Boot > sf read 12000000 c2000 ${filesize}
U-Boot > bmp d 12000000
The filesize environment variable is automatically set to the size of the file just loaded (in hex which is what we need). Why did we write to SPI location c2000 besides that’s where loadsplash expects it? The SPI NOR memory map looks like this:
0..bffff                - U-Boot
0xc0000..0xc1fff        - environment

The free space in flash is from c2000 to the end, so that’s where we put the image.

The second part, displaying immediately at bootup, is covered by taking advantage of the CONFIG_SPLASH_SCREEN option in U-Boot. When U-Boot is compiled with this enabled, immediately on startup it will look for an environment variable named splashimage and read an address out of it. It’ll then try to load and display a bmp image from that location in RAM.

Sounds easy enough, but now we have another problem. U-Boot’s splash screen feature is expecting the image in RAM and our image is stored in NOR flash. To solve this we’ve committed some code changes to the staging branch. This key change is an added default environment variable loadsplash:

loadsplash=if sf probe ; then sf read ${splashimage} c2000 ${splashsize} ; fi
Obviously, when run it will copy an image from c2000 in flash to the location in splashimage, the place where U-Boot will look for it. You can try running it manually using the run command:
U-Boot > run loadsplash
SF: Detected SST25VF016B with page size 4 KiB, total 2 MiB
U-Boot > bmp d ${splashimage}
So, at startup, if splashimage and splashsize and loadsplash exist, U-Boot will try to run loadsplash. Splashimage, is as we mentioned the address that U-Boot will look for the splash screen bmp so we load it there and splashsize is the size in hex of the image you copied to SPI NOR. You’ll have to set those 2 variables using setenv:
U-Boot > setenv splashimage 12000000
U-Boot > setenv splashpos m,m
U-Boot > setenv splashsize ${filesize}
U-Boot > saveenv

After setting these variables appropriately, you’re done. Reset and you should see your image displayed instantly.

Conclusion

I admit that it does seem like quite a process going on behind the scenes for something as simple as displaying a splash image but we’ve aimed for it to be as easy to use (or ignore) as possible from the your perspective


Fuse API

$
0
0

The i.MX6 CPU has one-time-programmable (otp) fuses which can be used by SoCs to store various permanent configuration and data. Some common uses include boot configuration, security configuration, MAC addresses, etc. We only modify the following fuse words:

wordvalue
0×50×18000030
0×60×00000010
0×22 and 0×23MAC address

Thanks to a patch by Thilo Jeremias, we’ve been using the ‘imxotp’ command to set fuses. The process looked like this:

U-Boot > imxotp blow --force 5 0x18000030
U-Boot > imxotp blow --force 6 0x00000010
U-Boot > imxotp blow --force 0x23 0x19
U-Boot > imxotp blow --force 0x22 ...low bits of mac address

Recently, Benoît Thébaudeau developed the fuse API and got it accepted into mainline, so we’re making the transition. The new commands look like this:

U-Boot > fuse prog 0 5 0x18000030
U-Boot > fuse prog 0 6 0x00000010
U-Boot > fuse prog 4 3 0x19
U-Boot > fuse prog 4 2 ...low bits of mac address

Note that the fuses are arranged in banks of 8 words so for example, 0×22 = 34 = bank 4 word 2. For more information about the Fuse API see the README

i.MX6 Linux kernel 3.0.35-4.0.0

$
0
0
Freescale released a new kernel and userspace libraries for i.MX6 Q/D/DL/S a couple of weeks ago, and we’ve tested it on all of our boards.

For the impatient

You can grab the kernel from the boundary-imx_3.0.35_4.0.0 branch on Github and compile it in the normal way. This code base includes support for all of our unless we’ve discussed your custom board separately.

We’ve also tested all of our hardware accessories and a limited set of PCIe devices and it’s ready for integration with various userspaces.

The details (from Boundary Devices)

From our side, this is a pretty straightforward merge of our boundary-imx_3.0.35_1.1.1 branch, although we did clean up a few things:

  • In prior releases, we added support for our displays and Nitrogen6X boards inside of the SABRE Lite board file. In this release, we moved our code into board-mx6_nitrogen6x.c. We’re carrying far more patches than we expect from Freescale, and this makes integration easier going forward.
  • We discarded our thermal management patches, because Freescale has now included much of the same functionality. We’ll publish some of our notes in a separate post when time permits.

The highlights (from Freescale)

Refer to the the release notes in the Freescale documentation package and the commit history for the details, but the following are some of the major features of this release:

Compatibility

From our testing and review of the patches, it appears that this kernel is ABI-compatible with the previous (1.1.1) releases except for the GPU libraries.

That said, we recommend that this be used with updated versions of the Freescale gstreamer plugins (3.0.7 is included in the Freescale release).

If you’re not using either the GPU or VPU acceleration libraries, this release should be a drop-in replacement.

Let us know if you have any trouble. We believe this release to be very solid, and will be focusing our future efforts on this release for non-Android use.

Stay tuned. We’ll upload some binary images this week.

U-Boot data cache support

$
0
0
Up until recently, some lingering bugs in the cache handling prevented us from enabling the data cache in U-Boot for our i.MX6 boards.

Some work by Andrew Gabbasov and inclusion of a patch that had been lingering for a while, we now feel comfortable shipping with this enabled by default.

We’ll have a new production release prepped very soon, and you should see a dramatic performance boost, especially in display output speed and when booting large RAM disks.

Freescale Ubuntu Image with 4.0.0 kernel

$
0
0
The new image combines the Freescale Oneiric image with our 4.0.0 kernel build + modules and bootscripts.

Notes

  • Hardware acceleration and HD video playback are installed and working.
  • When using it from an SD card it boots and runs a little slowly but running it from a SSD it’s boots twice as fast and is very reasonable to use.

Modifying a Linux Image

$
0
0
We’ve created a package that contains all the files you need to use our latest code with any existing linux image. You can download it here

Example Use

Let’s use it on the latest linaro release as an example.

After downloading both files, extract ours to anywhere and the linaro image to your boot media. Note that the --strip=1 option removes the first directory from the untarred paths since they put everything in a “binary” directory. Then copy each file from our folder to the corresponding folder on the drive. Assuming your partition is mounted at /media/linaro the steps look like this:

$ mkdir ~/boundary
$ cd boundary
$ tar -zxvf ~/Downloads/imx6_kernel_2013-6-10.tar.gz
$ cd /media/linaro
$ sudo rm -rf ./*
$ sudo tar -zxvf ~/Downloads/linaro-raring-alip-20130526-380.tar.gz --strip=1
$ sudo rm -rf lib/modprobe.d/
$ cd ~/boundary
$ sudo cp boot/uImage /media/linaro/boot/
$ sudo cp -r lib/* /media/linaro/lib/

The U-Boot included is compiled for a standard 1 GiB Nitrogen6 or SABRE Lite. You should just use the U-Boot that came pre-installed on your board.

Viewing all 391 articles
Browse latest View live