Documente Academic
Documente Profesional
Documente Cultură
TRAINING
In recent years, many companies have moved to open source as it affords more flexibility and cost control. Many
users of QNX are currently looking at Embedded Linux as an alternative embedded OS, but are unsure of how to
migrate. The Linux Foundation offers resources, training and an open source build tool, the Yocto Project, to help
companies make this transition.
IT executives, managers, and engineers have a fiduciary duty to investigate and recommend technology alternatives
for technical, legal, strategic, or financial reasons. This article discusses what these persons interested in porting
QNX-based embedded systems to an Embedded Linux platform should consider.
Introduction
Why Move to Linux?
There may be a strategic advantage in moving the development platform of an embedded product from QNX to
Embedded Linux. Ownership of QNX has gone from the original company founded in 1980 to Harmon International
in 2004 and to Research In Motion (RIM) in 2010. Both Harmon and RIM wanted to build in-vehicle infotainment
systems based on QNX, and RIM developed the PlayBook tablet based on QNX and currently has plans to develop
QNX-based smartphones. This apparent move away from development platform support seems to be a trend:
In September 2007, QNX Software Systems had made some of its source code available as part of an effort to
attract open source developers. When RIM announced the acquisition of QNX, this source code access was
restricted.
QNX dropped the Solaris OS as a development host.
RIM has recently experienced market setbacks and, a loss of prestige due to events such as the Halliburton
switch to iPhone, and currently is undergoing some corporate turmoil.
RIM is primarily a smartphone company that developed a proprietary OS, not an operating system marketer or
development platform vendor.
These events raise the following questions:
Will RIMs problems jeopardize continued industry support for QNX?
Will RIM abandon and sell or orphan QNX, leaving the future of QNX in doubt?
Will RIM stop licensing new versions of QNX or renewing older agreements in order to monopolize QNX
technology to its own advantage?
Will RIM be able and willing to provide the services QNX developers require?
Embedded Linux can be a viable and advantageous replacement for QNX for embedded devices. Embedded Linux
lets the designer leverage a large pool of developers, a rich legacy of source code, and industry standard POSIX
APIs. Linux in embedded devices has enjoyed strong growth over recent years, from Android tablets to Sony
Televisions and many other products.
As the complexity of embedded systems grows, higher level tools and operating systems are migrating into the
machinery. For example, cellphones, tablets, and other consumer devices often need significant software that is
purchased or provided by those other than the devices builder. Googles Linux-based Android is an example. An
open and popular programming environment is required so that the third-party software provider can sell to a large
market. QNX was developed to address niche market issues and provide for these needs and has only now moved
into general, mass produced consumer electronics support. Linux has evolved to become a proven and established
platform for embedded development.
LINUX
TRAINING
Migrating from QNX to Embedded Linux
Speculation as to the future of QNX, market pressures, budget constraints, customer demands and myriad other
forces has many QNX based developers looking into Linux solutions for future projects and ports of legacy systems.
Porting Issues
Porting an embedded development project from one platform to another is a formidable task due to the highly
intimate interaction of hardware and operating system software involved with embedded platforms. The operating
system needs of an embedded system are greatly impacted by both very specific application requirements and
severe hardware limitations.
The embedded operating system used by developers must be flexible and scalable. Devices may be simple,
single-task machines or more complex multi-use devices. An embedded device must be able to efficiently handle
applications with relatively few processes or even just a single task for one device, while also being able to provide
the scheduling, process management, and system protection needed in more complex devices.
Embedded devices also create unique hardware handling issues. The lack of hard disks for caching, minimal memory
footprints, primitive or no MMU support, and low power consumption requirements necessitate efficient use and
management of system resources by the OS.
Developers can and have used two or more different platforms in these situations, but this is not ideal for obvious
reasons.
Factors to consider include real-time operations and the future advent of recongurable hardware platforms (e.g.
those using Embedded Java) that would make embedded devices reusable and versatile. There are also questions of
development support, build and test tools, available resources (infrastructure and people), and licensing. Embedded
Linux has addressed all of these issues.
Two primary factors contributing to a developers choice of embedded operating systems for projects being built new
are cost and the availability of source code.i Wanting to increase development potential and decrease costs while
supporting existing projects make matters more complex. Not only does the source code need to be changed for
the new platform, but a new operating system must be purchased and configured or designed and built to run in the
target device.
Improvements in embedded Linux designs, tools, and infrastructure make moving to Linux an easier and financially
more palatable business decision. Choosing Embedded Linux as a platform is a logical move for many developers.
Embedded Linux supplies the same, and more, of the resources of QNX.
Why many have chosen Embedded Linux as the next step in a long term development cycle is based on solid
business and technical reasons: Linux offers the ability to address market opportunities and provides the technical
resources to do so. Even more important is the industry support for established standards of the Embedded Linux
codebase the Community.
The quality and reliability of the Linux codebase is due to an open source development model that invites many
parties (generally referred to as the Community) to contribute, identify problems, debate solutions, and fix issues
effectively. Kernel and system components can be selected in the build configuration. The community of companies
and individuals maintaining the various components of the software ensures problems are pointed out and corrected
quickly and features are added as required. Support for hardware and communications protocols is broad, and there
is a large driver support base. Another benefit of Linux is that it works well with other systems. Linux can function
easily alongside Windows and UNIX by supporting any protocol that either uses.ii
LINUX
TRAINING
Migrating from QNX to Embedded Linux
There is also a large variety of tools to choose from. Of course, all of this choice can be overwhelming, so commercial
embedded packaged distributions targeted to specific needs are available for purchase.
The open source licensing model under which Linux is distributed provides developers the same rights as the vendor.
If a change is desired, it does not involve a complete migration of all code.
Embedded Linux is a very established, supported, serious development platform. There are over 200 distributions
of Linux and many embedded and RTOS versions. Without the existence of a standard for Embedded Linux that
enable the use of a cost-effective, focused environment, Embedded Linux would be useless. To make Embedded
Linux versions compatible, the Embedded Linux Consortium (ELC) was formed. ELC is a nonprofit trade association
for the advancement, promotion and standardization of embedded Linux. Since September 9, 2005 the ELC Platform
Specification has been hosted by The Linux Foundation. The Embedded Linux Consortium transferred the ELC
Platform Specification (ELCPS) and related intellectual property to The Linux Foundation. The ELCPS can be found
here: Embedded Linux Platform Specification.
Although designed to run PC platforms, Linux is also a reliable OS for embedded systems. The typical shrinkwrapped Linux system has a full featured Linux kernel that requires about 1 MB of memory. The Linux pure kernel
(virtual memory and all core operating system functions) actually consumes only about 100KB. With the networking
stack and basic utilities, a complete Linux system runs at about 500KB of memory. The total memory required is
dictated by the applications to be run, but a Linux system can be adapted to work with as little as 256 KB ROM and
512 KB RAM. That makes Linux a lightweight operating system for the embedded market.iii
Kernel Weight
Linux is often referred to as a monolithic kernel OS. This is true of its standard desktop configuration. An Embedded
Linux core, like QNX, has a simple kernel architecture, although its not a microkernel like QNX since the drivers
do run in kernel mode. However, the Linux kernel is modular and allows loading of device drivers during runtime.
Networking and file systems are layered on top of the microkernel in a modular fashion. Drivers and other features
can either be compiled into the kernel to create a larger core or added to the kernel at run-time as loadable modules
are needed. This provides a highly modular building-block approach to constructing a customized embedded system,
which typically uses a combination of custom drivers and application programs to provide the added functionality.
Designers of embedded systems have long used both QNX and Embedded Linux successfully. Because of its
robustness, relative compactness, versatility, low cost, and open source licensing model, Embedded Linux has
become the most used platform. Embedded Linux also lets the designer leverage a large pool of developers, a rich
legacy of source code, and industry standard POSIX APIs.
LINUX
TRAINING
Migrating from QNX to Embedded Linux
QNX
Linux
API
Design
Application
Programming
Languages
Compilers and
Runtimes
C, C++
GNU GCC
C/C++/Java
Cost
Cost of Development
Seat
Cost of Runtime
license
No runtime royalties
Cost of Support
Development
Environments
Available
Neutrino RTOS; Certified Plus; Secure Kernel; Safe Kernel; RTOS Wind River Linux; MontaVista Linux; LynuxWorks Inc.; iMedia
v4
Linux; TimSys Linux; And many other commercial, low cost, or
free alternatives
Drivers
File Systems
FS Support of QNX/
Linux
GUI
Hardware Support
Hardware Support
and Device Drivers
Very complete
Very complete
Hardware Supported
Binaries and source for ARM, AVR32, ETRAX CRIS, FR-V, H8300,
IP7000, m68k, MIPS, mn10300, PowerPC, SuperH SH-4, xScale,
x86, and Xtensa processors
Host System
Usually Linux
IDE
Eclipse
Interprocess
Communication
Kernel Programming
Languages
LINUX
TRAINING
Migrating from QNX to Embedded Linux
Attribute
QNX
Linux
Libraries
Maturity
Memory
Can expand RAM using disk virtual memory; Zero size swap
space disables disk virtual memory
Memory
Management
Middleware
Network Ability
Network Support
Full
Full
NFS Availability
Open Source
Resource
Operating Systems
Architecture
OS Load RAM
OS Load ROM
Process
Management
FIFO, adaptive, round robin; Fully preemptible; External of kernel FIFO, adaptive, round robin; Not fully preemptible without
(but shares kernel address space)
available RTOS modifications; Internal of kernel
Requires extensions
RTOS
Scalability
Standards
Technical Support
Web Support
A big problem of moving to a different operating system is resistance to a new platform. Rumors and misconceptions
about Embedded Linux that make it seem a non-viable embedded solution are based on knowledge of the generic
desktop Linux distributions, not embedded Linux. Some typical (and incorrect) arguments against Embedded Linux
include:
Some Common Falsehoods about Embedded Linux
1. QNX uses the CPUs MMU for memory protectionix but if desired, Neutrino can also run with or without an
MMUx and Linux cant
2. Embedded Linux has a non-preemptive scheduler
3. We lose the simple IPC
4. The file system and swap file requirements of Linux cause trouble and cost money
5. Embedded Linux over-commits memory
LINUX
TRAINING
Migrating from QNX to Embedded Linux
LINUX
TRAINING
Migrating from QNX to Embedded Linux
Not many people care that the microkernel hasnt crashed when everything else has.
>Im sure youre right, the problem for QNX is that few people know how
>good it is because it is so expensive (aimed at a different market).
Its good for that market. But think about that _really_ means for a moment. Dont make the mistake of extrapolating
goodness in a very specialized market into goodness a more real-life and much less constrained market.
Linus xxvi
An embedded system has to be built so that none of the components crash, not just the kernel, and this is getting
more difficult in a market becoming more complex and far less limited.
LINUX
TRAINING
Migrating from QNX to Embedded Linux
8. Training
New systems require training and often the recruiting of new people or consultants. There are certainly some new
things about Embedded Linux that will need to be learned, but writing code should not be an issue. The Linux
Foundation has created a comprehensive training program to help companies make this move. Open enrollment as
well as customized training can be selected. The Linux Foundation has already trained people from many companies
making this transition. For more information, go to https://training.linuxfoundation.org/.
Moving from QNX to Linux is switching:
FROM
QNX:
A configurable
multi-target
embedded development system
with POSIX compliance
and ANSI C coding
that uses an Eclipse based IDE
TO
Embedded Linux:
A configurable
multi-target
embedded development system
with POSIX compliance
and ANSI C coding
that often uses Eclipse as the IDE
QNX and Linux are the same structure using the same standards. The learning curve for developers is minimal.
9. Porting QNX Applications to Embedded Linux
Porting QNX applications to Linux can be surprisingly straightforward since Linux is based on the same industrystandard POSIX API and uses the same ANSI C code. Because both were designed to support POSIX and ANSI
standards, many applications can run with few or even no major code changes. Aside side from header and
environment changes like OS-specific code, the developer simply has to recompile and relink the QNX source code.
QNX makes the same claim in porting Linux code to QNX.xxvii QNX made a considerable effort to ensure that Linux
developers could keep their programming model. This means the reverse is also true: QNX programmers will find
moving to Linux not only provides a very similar model, but also includes the key advantages of the Linux open
source model.
Note that QNX and Linux binaries are not compatible and custom QNX libraries will require rewrites. However, due
to the large code library in the Linux community, adapting an existing library that has similar functions will likely be
possible.
The standard Linux kernel does not have the real-time operating system (RTOS) capabilities (often referred to as
deterministic behavior) that QNX provides to embedded systems. But Linux 2.6 added preemptive scheduling with
the ability to interrupt most tasks executing the kernel code, and (as was previously noted) a real-time Linux patch
(PREEMPT_RT) can be added to support full preemption of critical sections and interrupt handlers. Also, several well
established Linux-based RTOS-dedicated products are available.
LINUX
TRAINING
Migrating from QNX to Embedded Linux
10. Licensing
Many open source projects adopt a license allowing proprietary software to use source code without any copyleft
(must be free to use) or all derived source code must be published clauses. Proprietary software retains its proprietary
nature.xxviii
11/12/13. Choice, Diversity, and Committed Support
Its ironic that the abundance of choice and diversity, the result of a free market economy and open source sharing,
is given as a reason not to use Linux. There are so many embedded distributions, but some do not support a large
amount of embedded hardware or provide direct code support and training. Missing deadlines due to lack of support
on code issues or kernel problems can outweigh any benefits of royalty-free code.
What developers need is a solution that provides a cohesive, standard development platform for building Linux
kernels for the target hardware that allows both diversity and choice, but also provides committed support.
The Yocto Project provides this solution.
The Yocto Project is a Linux Foundation workgroup and open source collaboration project whose goal it is to produce
tools and processes enabling the creation of Linux distributions for embedded software that are independent of the
underlying architecture of the embedded software itself. The Yocto Project is not an embedded Linux distribution
but a kit of tools and recipes to create a custom Linux distribution from source. Yocto relieves the embedded
developer from having to specifically identify and download the source of each of the packages that make up a Linux
distribution, then setting up a system with the correct set of tools to build these packages and finally assembling
them into an embedded Linux image.
The Yocto Project builds upon and extends a series of upstream open-source projects that form its toolkit. With each
Yocto release, updated versions of these projects with new features and bug fixes are included. Every new release of
Yocto also provides updated recipes and templates to track changes, features and bug fixes of the source packages
that make up a Linux distribution such as the Linux kernel.
Yocto is not a Linux distribution. Yocto allows the developer to create a Linux distribution by providing the tools
and infrastructure supporting embedded Linux development efforts. The key goal of the Yocto Project is to present
the developer with a kernel that has a clear and continuous history that is visible to the user. Parallels can be found
between the architecture and mechanisms of the Yocto Project and the Linux kernel build contributions
in the upstream kernel.org.
At the center of the Yocto Project is Poky, a platformindependent, cross-compiling layer that utilizes the
OpenEmbedded core. Poky provides the mechanism
to download, patch, build and combine thousands of
distributed open-source projects to form a complete
and coherent but fully customizable Linux software
stack.
Figure 2 depicts the Yocto workflow based on
OpenEmbedded. User Configuration, Metadata,
Hardware Configuration, and Policy Configuration
determine what Upstream Projects, Local Projects
on the developers system and what sources from
Developer Layer
Commercial (OSV) Layer
UI-Specific Layer
Hardware-Specific BSP Layer
Yocto Layer (meta-yocto)
OpenEmbedded Core Layer (oe-core)
Figure 1: Yocto Project Architecture (Source: www.yoctoproject.org)
LINUX
TRAINING
Migrating from QNX to Embedded Linux
10
optional Source Change Management systems to include, as well as to control the individual process steps of
the workflow. A Yocto Project release already contains configuration information and metadata that will produce a
working Linux system image, thereby requiring minimal adaption to the developers local build environment.
Upstream
Project
Releases
Local
Projects
SCM
(Optional)
Source Mirror(s)
User
Configuration
Source
Fetching
Metadata
Hardware
Configuration
Policy
Configuration
Patch
Application
RPM
Creation
Output
Analysis
For
Packaging
Configure
Compile
DEB
Creation
Package Feeds
QA
Tests
Image
Creation
SDK
Creation
Images
Application
Development
SDK
IPK
Creation
Figure 2 also shows the linear workflow process for creating a Linux image and SKD. The steps consist of: Source
Fetching, Patch Application, Configure/Compile, Output Analysis for Packaging, Package Creation and QA Tests.
These steps are in fact repeated for each source package before all sources or Package Feeds have been created
and can be combined into an image. Yocto supports multi-processor and multi-core build systems by automatically
calculating dependencies and executing process steps in parallel, managing changes and only rebuilding Package
Feeds whose input, source, metadata, dependencies, or other parameters have changed. This greatly accelerates the
entire build process.
To further simplify the process for novice as well as experienced users, Yocto provides a series of different profiles
that automatically create images for common applications:
poky-image-minimal - A small image just capable of allowing a device to boot.
poky-image-base - A console-only image that fully supports the target device hardware.
poky-image-core - An X11 image with simple applications such as terminal, editor, and file manager.
poky-image-sato - An X11 image with example GUI implementation using Matchbox Window Manager, Sato
theme and Pimlico applications. The image also contains terminal, editor, and file manager.
poky-image-sato-dev - An X11 image similar to poky-image-sato but also includes a native toolchain and
libraries needed to build applications on the device itself. Includes testing and profiling tools as well as debug
symbols.
poky-image-lsb - An image suitable for implementations that need to conform to Linux Standard Base (LSB).
LINUX
TRAINING
Migrating from QNX to Embedded Linux
11
meta-toolchain - This profile creates an archive that contains a standalone toolchain to be used externally to
Yocto. The archive also contains QEMU and the scripts necessary to run Yocto QEMU images.
meta-toolchain-sdk - This profile creates an archive that contains everything of the meta-toolchain profile but
also includes headers and libraries to form a complete standalone SDK.
The above list represents the most commonly used profiles. Many more specialized profiles are available and the list
continues to grow.
Platforms
The Yocto Project is actively supported by embedded and Embedded Linux industry leaders in embedded design,
development, tools, and products which include:
Hosted by The Linux Foundation
AMD
ARM
Cisco
Dell
Fujitsu
Hewlett-Packard
Hitachi
IBM
Intel
Mentor Graphics
Motorola
NEC
OpenEmbedded
Oracle
Qualcomm
Sony
SuSe
Texas Instruments
Texas Instruments
Timesys
Wind River
Yocto Adobe
and many more
LINUX
TRAINING
Migrating from QNX to Embedded Linux
12
Training
Often overlooked but always a significant factor in any development project is training. Without the knowledge to
utilize the resources provided, a software project is likely to fail.
According to a 2005 survey of embedded developers by EE Times:
A sizeable portion (18%) gave other as their reason for not evaluating Linuxthat the learning curve was too steep;
their schedule wouldnt allow them to learn an entirely new operating system and take on its configuration and
management tasks.xxix
Though training itself was not the major concern, the scheduling issues and delays cause training training to have a
huge impact on projects. It was not specifically training itself as the major concern but the scheduling and the impact
delays caused by it will have on the project. The Linux Foundation offers timely and effective training that provides
what staff accustomed to QNX need to know for porting to Embedded Linux. The Linux Foundation training offers
Corporate Linux Training that includes custom and on-site options.
LF404 Building Embedded Linux with the Yocto Project: Crash Course
San Francisco
Jersey City
San Jose
New York
Santa Clara
Los Angeles
Sao Paulo
Prague
Vancouver
Redwood Shores
Yokohama
San Diego
LINUX
TRAINING
Migrating from QNX to Embedded Linux
13
Conclusion
Both QNX and Linux are proven and capable embedded systems platforms. Both have:
POSIX API
ANSI Standards
Support a variety of standard hardware
QNX Shortcomings:
Designed for real-time and less flexible when non-real-time applications are designed
Smaller user base
Does not offer developers some features that are available with Embedded Linux
Limited middleware selection
Smaller code base
Vendor lock-in
Embedded Linux provides vendor independence. Embedded Linux solutions come from several vendors and range
greatly in offerings and price, making it easier to fit to various needs and budgets.
An embedded system often requires generic capabilities, which, in order to avoid re-inventing the wheel, are
built from open source code with off-the-shelf programs and drivers supporting common peripherals and other
applications. Linux offers a greater developer base, software base and true open source code, as well as a larger
platform base than QNX. The Linux Foundation and its supporters have made Embedded Linux an, if not the,
embedded development standard.
With sophisticated tools like The Yocto Project, The Linux Foundation provides the tools and infrastructure, including
training and other support materials, that make the transition from QNX to Embedded Linux a smooth and timely
effort.
LINUX
TRAINING
Migrating from QNX to Embedded Linux
14
Resources
The Cathedral and the Bazaar (Eric Steven Raymond)
Embedded Distributions (LWN.net)
The Embeddable Linux Kernel Subset (ELKS)
Embedded Linux Platform Specification (The Linux Foundation)
Free Electrons Embedded Linux Experts (Free Electrons)
Free Electrons Linux Cross Reference (Free Electrons)
git (Git.Kernel.org)
Linaro (Linaro.org)
Linux For Devices (LinuxDevices.com)
Linux Kernel Newbies (KernelNewbies.org
Linux Tools: Freecode & SourceForge
Linux Training (The Linux Foundation)
OpenEmbedded (OpenEmbedded.org)
Poky (PokyLinux.org)
The Linux Foundation (The Linux Foundation)
The Linux Kernel Archives (Kernel.org)
Various Licenses and Comments About Them (GNU.org)
Yocto Project (YoctoProject.org)
Yocto Project Development Manual (Scott Rifenbark, Intel Corporation)
Yocto Project Wiki (Wiki.YoctoProject.org)
TW Burger wrote his first embedded OS in 1986 on a custom Zilog Z80 based board using assembler. The 4 by
20 character black and white LCD display unit cost nearly $200. Since then he has provided support for, analyzed,
programmed applications, and done systems programming on QNX, Linux, AIX, UNIX, Ultrix, VAX 11/780, IBM S/370
MVS, z/OS, CPM, DOS, Windows 3 through 8, and various MS Servers, Win CE, and provided training on, and written
about various computer science subjects for companies like IBM and Intel. He lives in Vancouver, BC Canada.
LINUX
TRAINING
Migrating from QNX to Embedded Linux
15
i.
Yocto Project Big in Embedded Linux By Rudolf Streif, director of embedded solutions, The Linux
Foundation http://eecatalog.com/embeddedlinux/2011/08/23/yocto-project-big-in-embedded-linux/
ii.
Building Embedded Linux Systems By Karim Yaghmour, OReilly & Associates, Inc., 2003
iii.
September 2010 the Xubuntu developers claimed that the minimum RAM Xubuntu could be run on was 128
MB. http://en.wikipedia.org/wiki/Xubuntu
iv.
v.
vi.
vii.
The QNX filesystem driver for Linux: QNX4, QNX6 & floppy read/write support. 03 may 2009, Dmitry Yakovlev.
http://qnxfs.narod.ru/
viii.
Choosing a GUI Library for Your Embedded Device Jan 01, 2007 By Martin Hansen From Linux Journal Issue
#153 January 2007 http://www.linuxjournal.com/article/9403
ix.
Comparison of Memory Management in QNX Neutrino and VxWorks http://www.ida.liu.se/~TDDB72/rtproj/
reports2006/41-joeja305ulfma629-QNX_Neutrino_VxWorks_Memory.pdf
x.
xi.
Supporting Linux Without an MMU Class #407 D. Jeff Dionne http://www.eetimes.com/electrical-engineers/
education-training/tech-papers/4124800/Supporting-Linux-Without-an-MMU
xii.
OpenEmbedded follow-up questions: Does OpenEmbedded support any devices that dont have an MMU?,
Scott Garman sgarman at zenlinux.com http://lists.pdxlinux.org/pipermail/plug/2010-February/067776.html
xiii.
Embedded Linux Introduction Thomas Petazzoni Free Electrons http://free-electrons.com/pub/
conferences/2011/montpellier/presentation.pdf
xiv.
Porting to architecture with no MMU (ipod/gba ARM), OSDev.Org, http://forum.osdev.org/viewtopic.
php?f=1&t=12242&start=15
xv.
HOWTO: Realtime-Preempt Kernel, Enable real-time capabilities of the mainline kernel https://www.osadl.org/
Realtime-Preempt-Kernel.kernel-rt.0.html
xvi. Brief History of Real-Time Linux - Linux World 2006, Sven-Thorsten Dietrich, Montavista Software, Inc. page
13 http://moss.csc.ncsu.edu/~mueller/seminar/spring06/dietrich.ppt
xvii.
xviii.
SRRIPC http://www.opcdatahub.com/Docs/booksr.html
xix. Toolchain for ARM no-MMU OABI with FLAT binaries system, Khem Raj http://sourceware.org/ml/
crossgcc/2012-02/msg00054.html
xx.
xxi.
xxii.
xxiii.
xxiv.
xxv.
LINUX
TRAINING
Migrating from QNX to Embedded Linux
16
LINUX
TRAINING
Migrating from QNX to Embedded Linux
17
LINUX
TRAINING