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:
/L3.0.35_MX6DQ_ER_1208-Beta 192.168.0.0/255.255.255.0(rw,no_root_squash,no_subtree_check)
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=192.168.0.95:/L3.0.35_MX6DQ_ER_1208-Beta/ U-Boot> set bootargs $bootargs rootwait U-Boot> dhcp 12000000 192.168.0.95:uImage-ltib 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) Interrupt:142 eth0 Link encap:Ethernet HWaddr 00:19:B8:00:E2:45 inet addr:192.168.0.78 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 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:127.0.0.1 Mask:255.0.0.0 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 firmware: 2.1.5.32515 FOUND GST_MESSAGE_TAG! video codec: FFmpeg MPEG-4 FOUND GST_MESSAGE_TAG! audio codec: MPEG-1 layer 2 FOUND GST_MESSAGE_TAG! 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. FOUND GST_MESSAGE_TAG! audio codec: MPEG 1 Audio, Layer 2 nominal bitrate: 64000 FOUND GST_MESSAGE_TAG! 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_play() FSL_PLAYER_01.00_LINUX build on Aug 28 2012 14:17:30 [h]display the operation Help [p]Play [s]Stop [e]Seek [a]Pause when playing, play when paused [v]Volume [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 [t]Rotate [c]Setting play rate [i]Display the metadata [x]eXit get GST_MESSAGE_ELEMENT prepare-xwindow-id; get GST_MESSAGE_ELEMENT playbin2-stream-changed, uri=(string)file:///root/serenity.avi; FOUND GST_MESSAGE_TAG! 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 FSL_PLAYER_UI_MSG_EXIT Running time 0:00:17.291078169 render fps 23.943 Total rendered:414 [--->FINALIZE v4l_sink fsl_player_stop() player_exit(): No more multimedia files, exit. g_main_loop_thread_fun() quit! fsl_player_deinit
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.
- Branch L3.0.35_MX6DQ_ER_1208-Beta contains the Freescale code.
- We’ll be adding our goodies on the boundary-L3.0.35_MX6DQ_ER_1208-Beta branch.
We’ll be running additional tests in the coming days. Stay tuned for announcements about these releases.