In an earlier topic (Linux fast boot on i.MX6 Sabresd board.) about Linux fast boot on i.MX6 SabreSD board, the demo showed an application startup procedure including u-boot boot, Linux kernel boot, rootfs mount, demo application load and run. Additionally, this demo shows a live video on a LVDS screen from board CSI camera. Its total boot up time is about 1.x seconds.
Now, based on Linux fast boot, we integrate it with another demo application: surround view, this demo shows 4 different live videos on LVDS screen from 4 UDP data sockets. In this demo video is drawn by GPU to screen, that means the frame buffers decode by video decoder directly pass to GPU, which is not same as previous demo. The encode video format is also MJPEG in this demo.
This demo creates 4 different threads every thread handle one UDP socket, receive buffer, push this buffer to video decoder, get frame buffer from video decoder, pass this buffer to GPU, start GPU render, command GPU draw the render buffer to the screen; this thread needs to occupy one ARM processor to show every video smoothly. So we need a i.MX 6DQ board in this demo.
Hardware: i.MX 6DQ SabreSD board
Software: 12.09 GA BSP
Difference with previous fast boot demo:
U-boot difference with previous fast boot demo.
1: Add logo show. (For remove CSI2, V4L2, Capture modules )
Kernel different with previous fast boot demo.
1: Add SMP support.
2: Add Network support. (IPV4, PHY, network driver(FEC))
3: Remove CSI2, V4L2, Capture. (Remove this need in U-boot procedure Freescale logo show on the screen! )
4: Add GPU support in kernel.
Rootfs difference with previous fast boot demo:
1: Keep rc.s firstly run, while in previous fast boot demo, demo is the firstly running program on rootfs.
2: Get rid of almost all service in rc.conf just keep “mount /proc and /sys” service.
Network performance on this demo
The default network receive buffer is about 128KB. This default size is too small for this demo; the demo application can't fetch receive buffer in time while kernel network stack will discard some UDP packets if we don't enlarge it.
We enlarge this receive buffer through command in inittab before demo running.
i.MX6 DQ TOI less than 1.2 version has some Ethernet mac layer issue, this issue will also cause some
UDP packets lost. So please ensure the SabreSD board i.MX6 DQ chip TOI version is equal 1.2 or more.
Attached are some files for your reference. Below patches assume this SabreSD board boot from SD3 and default display port is LVDS1.
1: U-boot and kernel patches based on 12.09.
2: Demo application based on 12.09 vpu test program and vpu test program running configure file.
3: Rootfs startup scripts.