Upload
qt-project
View
11.109
Download
3
Tags:
Embed Size (px)
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