QNX SDP is a cross-compiling and debugging environment, including an IDE and command-line tools, for building binary images and programs for target boards running the QNX OS 8.0.
The QNX OS Programmer's Guide covers a variety of topics that might interest developers who are building applications that will run under the QNX OS .
Your applications should be written in a way that reflects the architecture of the QNX OS —as a set of cooperating processes. In this chapter, we see how to start processes (also known as creating processes) from code, how to terminate them, and how to detect their termination.
In an embedded application, it's often important to detect if any process terminates prematurely and, if so, to handle it.
This User's Guide describes version 8.0 of the Integrated Development Environment (IDE) that's part of the QNX Tool Suite .
QNX SDP is a cross-compiling and debugging environment, including an IDE and command-line tools, for building binary images and programs for target boards running the QNX OS 8.0.
The System Architecture guide accompanies the QNX OS and is intended for both application developers and end-users.
Getting Started with the QNX OS : A Guide for Realtime Programmers is intended to introduce you to the QNX OS and help you develop applications and resource managers for it.
The QNX OS Programmer's Guide covers a variety of topics that might interest developers who are building applications that will run under the QNX OS .
Let's start by looking at some things you should consider when you start to write a program for the QNX OS .
The QNX OS architecture consists of the microkernel and several cooperating processes. These processes communicate with each other via various forms of interprocess communication (IPC). Message passing is the primary form of IPC in QNX OS .
Your applications should be written in a way that reflects the architecture of the QNX OS —as a set of cooperating processes. In this chapter, we see how to start processes (also known as creating processes) from code, how to terminate them, and how to detect their termination.
In embedded applications, there are two typical approaches to starting your processes at boot time.
The process manager component of procnto is responsible for process creation. If a process wants to create another process, it makes a call to one of the process-creation functions, which then effectively sends a message to the process manager.
In an embedded application, it's often important to detect if any process terminates prematurely and, if so, to handle it.
The High Availability Framework provides components not only for detecting when processes terminate, but also for recovering from such terminations.
If you've created a set of processes using a starter process, then all those processes are children of that process, with the exception of those that have called procmgr_daemon() .
As mentioned above, you can run dumper so that when a process dies, dumper writes the state of the process to a file. You can also write your own dumper-type process to run instead of, or as well as, dumper . This way the terminating process doesn't have to be a child of yours.
What would happen if you've created some processes that subsequently made themselves daemons (i.e., called procmgr_daemon() )? As we mentioned above, the wait*() functions and sigwaitinfo() won't help.
The last scenario is where a server process wants to be notified of any clients that terminate so that it can clean up any resources that it had set aside for them.
Each thread has its own stack that you can allocate yourself or have the system manage.
In systems where security is important, applications should run with the fewest privileges possible. This practice helps reduce the impact of possible compromises and can also help lower the privilege escalation attack surface of the device.
Implemented by the Process Manager component of procnto , the /proc virtual filesystem lets you access and control the processes and threads running in the system.
Multiprocessing systems, whether discrete or multicore, can greatly improve your applications' performance.
Some filesystems, such as the Power-Safe ( fs-qnx6.so ) filesystem, extend file permissions with Access Control Lists , which are based on the withdrawn IEEE POSIX 1003.1e and 1003.2c draft standards.
Whether you're working with timers or simply getting the time of day, it's important that you understand how the OS works with time.
This chapter explains the QNX OS mechanisms for quickly reacting to hardware events.
(or
The Persistence of Memory
, with a nod to Salvador Dali) In the
Process Manager
chapter of the
System Architecture
guide, we looked at how the OS manages memory. This chapter describes how you can work with memory.
The QNX OS can run on many different hardware platforms. The way in which applications can access peripheral devices and how data is stored varies between platforms. This chapter explains our solutions for minimizing the impact of such platform dependencies.
In this chapter, we'll look at the supplementary files used in the QNX OS development environment. Although we use the standard make command to create libraries and executables, we also use some of our own conventions in the Makefile syntax.
The QNX System Security Guide is intended for both system integrators who are responsible for the security of a QNX OS system and developers who want to create a QNX OS resource manager free from vulnerabilities.
This User's Guide describes the QNX ® Toolkit for Visual Studio Code. The guide introduces you to the QNX Toolkit by explaining the QNX development environment and how to build, run, and debug your QNX ® Operating System (OS) applications and systems.
This section describes the typographical conventions used throughout the documentation, explains how to obtain technical support, and provides some information about licensing.