Qt on Real Time Operating Systems

Preview:

DESCRIPTION

Presentation by Harald Fernengel held during Qt Developer Days 2009. http://qt.nokia.com/developer/learning/elearning

Citation preview

Qt on Real Time OSs... or how to get your Qt app on QNX and friends 10/09/09

Contents

• Some Basics

– CPU, Operating System, Windowing System

• Hardware Acceleration

• Deeper look into...

– QNX

– VxWorks

– INTEGRITY

2

Contents

Some Basics

3

Qt for RTOS

• Qt for RTOS ports are Community Supported

• Not all Qt modules available

• Qt APIs available unmodified (code once...)(with few exceptions that are documented in platform notes)

6

Embedded vs. Desktop

• Qt Embedded can be fine-tuned for size

– configure options, e.g. -no-script

– feature macros, e.g. QT_NO_FILEDIALOG

4

Integration

• Before we can start developing, the following must be considered:

– CPU Architecture

– Operating System

– Windowing System

6

Contents

CPU Architecture

7

Classic layer diagram

8

CPU

Opera)ng  System

QtCore

Classic layer diagram + atomics

9

CPU

Opera)ng  System

QtCore

AtomicOperations

Classic layer diagram + atomics II

10

CPU

INTEGRITY

QtCoreAtomics

Summary CPU Architecture

• Qt is CPU agnostic on operating systems that feature atomic operations– INTEGRITY, Windows CE

• Otherwise, Qt has built-in support for...– x86_64, i386, ARM, MIPS, PowerPC, SuperH, ...

• Optional: Blend and Blit optimizations (using iwMMXt, SSE, ...)

11

Contents

Operating Systems

12

Classic layer diagram (again)

13

Hardware

Opera)ng  System

QtCore

OS dependencies

• Qt Embedded is self-contained

– Build system is bootstrapped

– Requires libc, pthread, some math functions

– No other external library dependencies (like STL)

14

Classic OS diagram

15

Hardware

Linux

QtCore

Windows Solaris Mac  OS  X Symbian RTOS...

Classic OS diagram (simplified)

16

Hardware

POSIX

QtCore

Win32

Operating System

• Qt supports

– Win32 (*_win.cpp files)

– POSIX (*_unix.cpp files)

• Exception: Some native calls instead of POSIX for optimization or deeper integration(for example on Symbian, Mac OS X)

17

Operating System - Summary

• QtCore runs well on a POSIX compliant OS/RTOS

• Amount of required POSIX functionality varies (e.g. QT_NO_FILESYSTEM)

• Subsystems (e.g. file system) can be replaced by native calls if necessary

18

Contents

Windowing Systems

19

Classic layer diagram with GUI

20

Hardware

Opera)ng  System

Windowing  System

QtGui

QtCore

Windowing Systems

21

X11

QtGui

S60 Windows Mac  OS  X

Hardware

Linux WindowsSolaris Mac  OS  XSymbian RTOS...

???

Introducing QWS

• Qt contains it's own Windowing System:“Qt Windowing System” (QWS)

• Contains a compositing window manager

• Requires direct access to graphics card and input devices (mouse/touchscreen, keyboard/keypad)

22

Classic layer diagram with GUI

23

Hardware

Opera)ng  System

QWS

QtGui

QtCore

Screen  DriversInput  Drivers

QWS vs. OS

24

Hardware

Opera)ng  System

QWS

Drivers???

QWS diagram with gfx output

25

Hardware

Opera)ng  System

QWS

DirectFB LinuxFB Custom VNC

Network qvW

Virtual  FB

QVFB screenshot

26

Embedded Windowing Systems

27

X11

QtGui

Hardware

Linux WindowsSolaris Mac  OS  XSymbian RTOS...

QWS

QWS vs. X11

• X11– asynchronous client-server architecture, IPC

– requires additional window manager process

– complex due to lots of (optional) extensions

• QWS

– self-contained

– single process mode possible

28

Contents

Hardware Acceleration

29

HW Acceleration in Qt

• Qt supports OpenVG and OpenGL ES >= 2.0

• Both allow HW accelerated 2D [or 3D] painting

• However, both APIs don't define the interface to the Windowing System

30

Embedded Windowing Systems

31

X11

QtGui

Hardware

Opera)ng  System

QWS

OpenGL  (ES)OpenVG

??? ???

EGL to the rescue

• EGL is the glue layer between Windowing Systems and hardware acceleration(http://www.khronos.org/egl/)

32

Embedded Windowing Systems

33

X11

QtGui

Hardware

Opera)ng  System

QWS

OpenGL  (ES)OpenVG

???

EGL

Something still missing for QWS

• EGL is still relying on an underlying windowing system

• Works for X11, but not (out of the box) for QWS

• OpenKODE with KDui extension required

34

Something still missing (2)

• OpenKODE with KDui extension is its own windowing system

• So is QWS

35

Something still missing (3)

• OpenKODE with KDui extension is its own windowing system

• So is QWS

• #%^!@#!!

36

Introducing Lighthouse

• Lighthouse is the new QWS

• Lighthouse is not its own windowing system

• Instead, features plug-in architecture for integrating existing windowing systems

WARNING! WORK IN PROGRESS

37

Embedded Windowing Systems

38

X11

QtGui

Hardware

Opera)ng  System

Lighthouse

OpenGL  (ES)OpenVG

EGL EGL  +  KD

Summary Windowing System

• QWS works well with non accelerated displays

– HW acceleration possible, but tricky

• Lighthouse works best with existing windowing systems (KDgui) with OpenGL (ES) or OpenVG

• X11 works best if the infrastructure already exists for the target board, or if co-existence with other X11 applications is required

39

Summary Integration

• Before writing an application, we need to...

– consider the atomic operation support

– consider the feature set

– consider the windowing system

– consider the hardware acceleration

• If that's done, it's write once, deploy everywhere

40

Contents

Demo

41

Contents

A Deeper Look Into...QNX

42

QNX

• QNX port is community supported– About 5 occurrences of conditional Q_OS_QNX code

• Several successful deployments

– QWS without HW acceleration

• No Photon integration

– Photon is a windowing system → collides with QWS

• Photon's X11 server not recommended

– Doesn't feature Xrender, poor rendering quality

43

QWS diagram on QNX

44

Hardware

QNX

QWS

io-­‐display Custom VNC

Network

Experimental!

QNX - limitations

• No QSystemSemaphore, QSharedMemory

– SYSV style semaphores and shared memory missing from QNX

• No QProcess support

– Starting a process in a thread not supported

• QWS has single process GUI support only

• No Qt3Support

45

QNX

• How to build (see Platform Notes - QNX)– -xplatform unsupported/qws/qnx-i386-g++

– -embedded i386

– -no-qt3support

– -qt-gfx-qnx

– -qt-mouse-qnx

– -qt-kbd-qnx

– -no-exceptions

– ...

43

Contents

A Deeper Look Into...VxWorks

46

VxWorks

• VxWorks port is community supported

– About 60 VxWorks specific code changes

• Several successful deployments

– X11 with OpenGL acceleration

47

QtGui diagram on VxWorks

48

Hardware

VxWorks

QtGui

X11

VxWorks - limitations

• No QSystemSemaphore, QSharedMemory

– No SYSV style semaphores, shared memory

• No QLibrary

– No plugins

• Only one QApplication per system

– VxWorks has flat address space

• No Qt3Support

49

QNX

• How to build (see Platform Notes - VxWorks)– -xplatform unsupported/qws/vxworks-simpentium-g++

– -embedded vxworks

– -exceptions

– -no-qt3support

– ...

43

Contents

A Deeper Look Into...INTEGRITY

50

INTEGRITY

• Only a subset of Qt supported

• Port currently only available on request

51

Contents

Thank you :)(Questions?)

52

Recommended