i.MX6Q Linux Release 3.0.35_1208 – Beta
Published on August 29, 2012
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 0Even 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.