Tuesday, August 6, 2013

Qt5 with KMS on Jacinto6 / OMAP5 with GLSDK

The latest release of Qt5 with KMS support is available on OMAP5 and Jacinto6 platforms. The main features validated are OpenGLES 2.0, Neon and KMS.

The example applications tested are :
  • opengl/hellowindow
  • opengl/paintedwindow
  • gui/analogclock
  • widgets/animation/moveblocks
  • effects/blurpicket
  1. OMAP5 uEVM / Jacinto6 EVM
  2. Qt5.1.0 release
  3. Linaro GCC 4.7-2013.03 ARM Linux gnueabi hard float cross compiler toolchain
  4. Ensure that the board boots successfully and the terminal is visible on the display
  5. Ensure that kmscube application runs on the board
Run Qt5 example applications
    Target filesystem based on TI GLSDK with prebuilt Qt5 binaries are available at:

    The Qt5 installation is at /usr/local/qt5.1 on this file system. The stock GLSDK filesystem has missing dependencies for building and running Qt5. These libraries and header files have been added to the file system shared above.
    • Untar the filesystem to the second partition on your SD card. This will replace your current filesystem on the SD card. The same filesystem can be used for both OMAP5 and Jacinto6
    • Create a soft link to satisfy Qt5 build time configurations
    target # mkdir -p /home1/anand/targetnfs/ti-glsdk_omap5-uevm_6_01_00_01 
    target # cd /home1/anand/targetnfs/ti-glsdk_omap5-uevm_6_01_00_01 
    target # ln -s /usr usr
    • Initialize SGX as follows:
    target # pvrsrvinit
    • Set the loader library path
    target # export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/qt5.1/lib
    • Run the example Qt5 application using kms platform
    target # cd /usr/local/qt5.1/examples/opengl/hellowindow
    target # ./hellowindow -platform kms
    In step 1, if you want to retain your own filesystem, copy /usr/local/qt5.1 from the prebuilt filesystem to your filesystem on SD card. In addition, add the missing dependencies by checking the differences in /lib, /usr/lib and /usr/include between the prebuilt filesystem and your filesystem.

    Building Qt5

    The mkspecs that configure Qt for OMAP5/Jacinto6 are available at:

    • Untar Qt5.1.0 source
    • Add the Qt mkspecs directory linux-omap5-g++ into $QT/qtbase/mkspecs
    host $ cd $QTDIR/qtbase
    host $ patch -p1 < 0001-Remove-GBM_BO_FORMAT-and-use-GBM_FORMAT-directly.patch
    • Configure Qt
    host $ cd $QTDIR
    host $ ./configure -prefix /home1/anand/targetnfs/ti-glsdk_omap5-uevm_6_01_00_01/usr/local/qt5.1 -release -make libs -make examples -nomake tools -xplatform linux-omap5-g++ -opengl es2 -confirm-license -opensource -no-xcb -no-pch -verbose -kms -sysroot /home1/anand/targetnfs/ti-glsdk_omap5-uevm_6_01_00_01 -v -no-icu
    • This configures Qt for the following:
      • Release mode
      • Libraries and Examples are built, but tools are not built
      • Cross compiler platform is linux-omap5-g++
      • OpenGL ES2
      • XCB, PCH, ICU are disabled
      • KMS is enabled
      • Sysroot is set to /home1/anand/targetnfs/ti-glsdk_omap5-uevm_6_01_00_01. All libraries and header files are picked up relative to this path
      • Prefix is set to /home1/anand/targetnfs/ti-glsdk_omap5-uevm_6_01_00_01/usr/local/qt5.1. After building, Qt is installed to this path
      • Side effect of having the Qt prefix is that we need to create a symbolic link on the target filesystem that ensures that the prefix is valid even on the target
    • Build Qt by running "make" 
    • Install Qt by running "make install"
    • Execution of certain applications give a PVR map error when run with KMS resulting in a blank screen
    • evdevmouse and evdevkeyboard plugins have some problems
    • Cursor support is not available
    • Webkit2 is not validated
    • Testing of features and example applications other than those listed at the top


    1. We are using the DRA7xrex GLSDK . In this qt libraries are not there by default. Could any one give specific details regarding QT building on My TI OMAP57XX target.

    2. This comment has been removed by the author.

    3. Hi,\ trying to compile and I run into this.
      qdrawhelper.cpp:(.text+0x748a): undefined reference to `qt_memfill32(unsigned int*, unsigned int, int)'
      .obj/qdrawhelper.o:qdrawhelper.cpp:(.text+0x763e): /lib/libQt5Gui.so.5.5.1' failed