August 29, 2012

i.MX6Q Linux Release 3.0.35_1208 – Beta

In addition to the the Android release, Freescale has also released a Beta for Linux, and it appears that we’re two for two today: it also just works on Sabre Lite and Nitrogen6X.

In addition to sources, the release images contain a pre-built kernel and LTIB-based filesystem in typical Freescale fashion.

As with the Android release, I tested it out by copying the uImage file into /tftpboot and extracted the filesystem into an NFS share.

The filesystem is provided as both an ext2 image and a jffs2 image. The ext2 image is easier to use, and I extracted it like so:

~/$ gunzip rootfs.ext2.gz
~/$ mkdir rootfs
~/$ sudo mount -o loop rootfs.ext2 rootfs
~/$ ls rootfs
bin  etc   lib         mnt  proc  sbin   sys  unit_tests  var
dev  home  lost+found  opt  root  share  tmp  usr
~/$ sudo mkdir -p /L3.0.35_MX6DQ_ER_1208-Beta/
~/$ sudo cp -ravf rootfs/* /L3.0.35_MX6DQ_ER_1208-Beta/

Then I added a line to the file /etc/exports:


And booted like so:

U-Boot> set bootargs console=ttymxc1,115200 video=mxcfb0:dev=ldb,1024x600M@60,if=RGB666
U-Boot> set bootargs $bootargs video=mxcdi1fb:off
U-Boot> set bootargs $bootargs ip=dhcp root=/dev/nfs
U-Boot> set bootargs $bootargs nfsroot=
U-Boot> set bootargs $bootargs rootwait
U-Boot> dhcp 12000000
U-Boot> bootm 12000000

The system came right up into the almost pointless Gnome U/I, but also provided a shell on the serial port where it was easy to confirm that:

Networking is up:

root@freescale ~$ ifconfig -a
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 00:19:B8:00:E2:45
          inet addr:  Bcast:  Mask:
          RX packets:222576 errors:6324 dropped:0 overruns:6324 frame:6324
          TX packets:116339 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:302047471 (288.0 MiB)  TX bytes:12850928 (12.2 MiB)

lo        Link encap:Local Loopback
          inet addr:  Mask:
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Video playback also works:

root@freescale /unit_tests$ ./mxc_vpu_test.out -D '-i akiyo.mp4'
[INFO]	VPU test program built on Aug 28 2012 14:15:08
[INFO]	Product Info: i.MX6Q/D/S
[INFO]	VPU firmware version: 2.1.5_r32515
[INFO]	VPU library version: 5.4.5
[INFO]	Format: STD_MPEG4
[INFO]	MPEG4 class: MPEG4
[INFO]	Input file "akiyo.mp4" opened.
[INFO]	bitstreamMode 0, chromaInterleave 0, mapType 0, tiled2LinearEnable 0
[INFO]	Mpeg4 Profile: 0 Level: 3 Interlaced: 0
[INFO]	Aspect Ratio Table index: 1
[INFO]	Decoder: width = 176, height = 144, frameRateRes = -1, frameRateDiv = -1, count = 4
[INFO]	CROP left/top/right/bottom 0 0 0 0
[INFO]	Display fps will be 0
[INFO]	v4l output to /dev/video17
[INFO]	Display to 1024 600, top offset 0, left offset 0

Even with gstreamer:

root@freescale ~$ gplay serenity.avi
playbin2 is employed!
fsl_player_init(): Successfully initialize!
fsl_player_set_media_location(): filename=serenity.avi
[Stopped  ][Vol=01][00:00:00/00:00:00][fps:0][INFO]	Product Info: i.MX6Q/D/S
vpudec versions 🙂
	plugin: 3.0.1
	wrapper: 1.0.24(VPUWRAPPER_ARM_LINUX Build on Aug 28 2012 14:16:03)
	vpulib: 5.4.5
    video codec: FFmpeg MPEG-4
    audio codec: MPEG-1 layer 2
        encoder: Lavf52.64.2
container format: AVI
get GST_MESSAGE_ELEMENT missing-plugin, type=(string)decoder, detail=(GstCaps)audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)2, parsed=(boolean)true, name=(string)"MPEG-1 Layer 2 (MP2) decoder";
this is powerful mx6q
MFW_GST_V4LSINK_PLUGIN 3.0.1 build on Aug 28 2012 14:16:53.
    audio codec: MPEG 1 Audio, Layer 2
nominal bitrate: 64000
        has crc: FALSE
   channel mode: stereo
[INFO]	bitstreamMode 1, chromaInterleave 1, mapType 0, tiled2LinearEnable 0
>>V4L_SINK: Actually buffer status:
	hardware buffer : 10
	software buffer : 0
full screen size:1024x600
[V4L Update Display]: left=0, top=0, width=1024, height=600

FSL_PLAYER_01.00_LINUX build on Aug 28 2012 14:17:30
	[h]display the operation Help
	[a]Pause when playing, play when paused
	[m]Switch to mute or not
	[>]Play next file
	[<]Play previous file
	[r]Switch to repeated mode or not
	[f]Set full screen or not
	[z]resize the width and height
	[c]Setting play rate
	[i]Display the metadata
get GST_MESSAGE_ELEMENT prepare-xwindow-id;
get GST_MESSAGE_ELEMENT playbin2-stream-changed, uri=(string)file:///root/serenity.avi;
minimum bitrate: 64000
        bitrate: 64000
maximum bitrate: 64000
[Playing  ][Vol=01][00:00:14/00:01:30][fps:25]q
[Playing  ][Vol=01][00:00:16/00:01:30][fps:24]x
Running time 0:00:17.291078169 render fps 23.943
Total rendered:414
[--->FINALIZE v4l_sink
player_exit(): No more multimedia files, exit.
g_main_loop_thread_fun() quit!

The kernel modules aren’t present to allow GPU testing and some work will be required to get touch screens working and audio on Nitrogen6x, but this is a lot of functionality for so little effort.

Thanks Freescale!

As with Android, we’ve added the kernel tree to our Github repository.

We’ll be running additional tests in the coming days. Stay tuned for announcements about these releases.