Transcript Slide Show Title
Using POSIX to Maximize Code Portability in Embedded Systems
Peter van der Veen QNX Software Systems
POSIX® /pahz-icks/
POSIX, pronounced pahz-icks as in positive, not poh-six, or other variations
POSIX is a registered trademark of the IEEE
►
Licensed through certification
An acronym for Portable Operating System Interface
POSIX is a family of standards developed by the Portable Applications Standards Committee (PASC) of the IEEE Computer Society
All content copyright QNX Software Systems.
2
What Is POSIX?
It’s about portability
►
Both programmers and application source code
►
Portability of the OS kernel itself and/or application binary code are not objectives
POSIX is a set of books specifying APIs
►
It is neither a piece of code
►
Nor an operating system
►
It is a rich, proven API
All content copyright QNX Software Systems.
3
What Is an API?
Application Program Interface
Written contract between system developers and application developers It is not a piece of code, it is a piece of paper defining what the two sets of developers are guaranteed to receive and are in turn responsible for providing
All content copyright QNX Software Systems.
4
The Need for Standard APIs
Standardized functionality
Standardized “square” peg in the round hole
►
“Bits where change is not interesting”
►
Where the benefits of commonality outweigh the value of differences
►
Where we can achieve economies of scale, including interoperability Private product specific functionality
All content copyright QNX Software Systems.
5
Scalable API Portability
All content copyright QNX Software Systems.
POSIX APIs support portability across a range of devices
6
POSIX 1003.1, 2004 Edition
Approved December 6, 2001
2004 edition incorporates two Technical Corrigenda
Developed by the Austin Group (see later)
Supersedes all the major POSIX standards except 1003.13 (realtime profiles) and 1003.5 (Ada bindings)
A combined system interfaces (including all realtime POSIX) and utilities specification as a single 4000 page standard
The core of DoD’s mandated Joint Technical Architecture (JTA) OS Services, replacing 1003.1-1996 and its amendments
Technically identical to the Base specifications of the Single UNIX Specification and ISO 9945
7 All content copyright QNX Software Systems.
The Common Base Specifications
IEEE Std. 1003.1, ISO/IEC 9945 The Open Group Base Specifications Issue 6 The Core of the Single UNIX Specification v3
All content copyright QNX Software Systems.
8
The Austin Group
The Austin Group combines the formal standards process of the IEEE and ISO, with the industry standards of The Open Group and the community at large
Electronic participation
Participation in the group is free ( www.opengroup.org/austin )
The final standard in HTML is available for free download from the World Wide Web ( www.unix.org/version3 )
All content copyright QNX Software Systems.
9
POSIX 1003.13-2003
Approved December 10, 2003
A set of POSIX realtime profiles
Supersedes POSIX.13-1998 updated to address
►
1003.1-2001 (which includes all of realtime POSIX)
►
Profiles of all 1003.5-series standards (Ada bindings to POSIX)
►
Field experience with 1003.13-1998
►
Input from the Linux, realtime and/or embedded Linux, and traditional RTOS communities
All content copyright QNX Software Systems.
10
POSIX 1003.13 Profiles
-
POSIX-RT Profile 54 Units of Functionality
-
POSIX-RT Profile 53
-
Units of Functionality POSIX-RT Profile 52 Units of Functionality
-
POSIX-RT Profile 51
-
Units of Functionality Portable Operating System Interface IEEE Standard POSIX 1003.13
Profile 54
: 1003.1-2003
Base
Multi process, Threads, File System
Profile 53
: Multi-process, Threads; File System
Profile 52
: Single Process, Threads, File System
Profile 51
: Single Process, Threads; No File System
Allows Portability of Applications
All content copyright QNX Software Systems.
11
POSIX 1003.13
POSIX 1003.13 is a subprofile standard of 1003.1-2001
►
It allows diverse realtime operating systems “clothed” with a runtime library to comply
►
This standardizes the application-to-RTOS API, allowing considerable application code portability between different RTOS offerings, which portability had not been possible in the past
►
RTOS+wrapper offerings can be compared and competed directly
►
There are currently four profiles
All content copyright QNX Software Systems.
12
Using POSIX in Embedded Systems
Today’s Environment
Typical company has multiple product lines and limited interoperability
Vendors are locked into a single OS solution or
Applications need to be recoded or ported to deploy on different product lines
►
Takes time, adds costs
►
Increases delays to product deployment Application Product Line A OS 1 Application Product Line B OS 2 Application Product Line C OS 3 Recoding
All content copyright QNX Software Systems.
14
Standards & Portability
Standard APIs preserve software investments
Portability lowers time, cost, and risk associated with integrating new technology across product lines
Common standard maximizes application base for development environments
Developers familiar with standard become productive more quickly
All content copyright QNX Software Systems.
15
POSIX Compliance
OS Comparison
POSIX Feature Matrix
Feature 1003.1-90 Processes 1003.1-90 Pipes 1003.1-90 Files & Directories 1003.1-90 Users & Groups 1003.1b-93 Memory Protection 1003.1b-93 Hi Res. Clocks & Timers 1003.1b-93 Realtime Signals 1003.1b-93 Semaphores 1003.1b-93 Shared Memory 1003.1b-93 IPC Message Passing PSE 51
PSE 52
-
PSE 53
-
Check for Advanced Realtime
All content copyright QNX Software Systems.
PSE 54
POSIX 1003.1-2001
17
POSIX Feature Matrix
Feature 1003.1c-95 Threads 1003.1c-95 Thread Safe Functions 1003.1c-95 Thread Attribute Stack Address 1003.1c-95 Thread Attribute Stack Size 1003.1c-95 Thread Process Shared 1003.1c-95 Thread Priority Scheduling 1003.1c-95 Thread Priority Inheritance 1003.1c-95 Thread Priority Protection POSIX2_SW_DEV PSE 51
-
PSE 52
-
PSE 53
PSE 54
POSIX 1003.1-2001
All content copyright QNX Software Systems.
18
POSIX Profiles – OS Compliance
POSIX Standard Specification Base QNX Neutrino 1003.1-2001 Linux 1003.1-1996* Realtime (.1b)
Realtime Threads (.1c)
1003.1d-1999 Additional Realtime
(Sporadic server scheduling, execution timers, …)
1003.1j-200x Advanced Realtime
(Barriers, spin locks, …)
Best practices (development) Configure, GCC, perl, …
* Newer versions of Linux kernel moving toward conformance with 2001 specification.
Configure, GCC, perl, …
All content copyright QNX Software Systems.
RTOS x PSE 51/PSE 52
-
19
Linux-POSIX (Base) Portability
Application portability between Linux and POSIX Base (2003) can be easily accomplished
►
Both Linux and new POSIX specification share large POSIX feature set
Linux developers can retain programming model and existing APIs while porting applications to POSIX, including embedded systems Bottom line:
Porting applications between Linux and POSIX Base implementations is relatively simple
Standard POSIX APIs are key
20 All content copyright QNX Software Systems.
POSIX Summary
Standard interface increases software portability for all embedded systems
Some markets, such as military, moving toward using POSIX as their base specification
OS compliance/conformance a matter of degree
►
Many RTOS offerings conform to PSE 51 or PSE 52, against the 1003.1-1996 specification
►
QNX Neutrino provides compliance with 1003.1-2004
►
Linux moving toward 2001.3-2004 with latest versions
Migration of legacy RTOS code to POSIX RTOS increases software portability
All content copyright QNX Software Systems.
21
Examples
Migration, portability in the presence of unspecified behavior, etc.
Unspecified/Implementation Specific Behavior
Task at-hand requires knowledge of unspecified behavior or of implementation-defined behavior
►
For best performance
►
To enable feature that is difficult to achieve with mandated interfaces
Codify
►
Best practices
►
Information about different implementations
Conditional compilation
►
Appropriate macro definitions
►
Appropriate configuration
E.g. Autoconf
May include “discovery”
23 All content copyright QNX Software Systems.
Application Porting Example – Lynx Text Browser
Untar the source: Go to the source directory.
tar xz lynx2.8.4.tar.gz
cd lynx2-8-4 Make a host directory: Go to the host directory.
Configure the source: Make.
mkdir x86-pc-nto-qnx cd x86-pc-nto-qnx ../configure make Install the browser: Install.
make install
All content copyright QNX Software Systems.
24
Unspecified Behavior – Directory Scanning (disk usage – du)
while (entry = readdir(dirp)) { struct stat stat; char path[PATH_MAX+1]; strcpy(path, pathname); strcat(path, entry->d_name); stat(path, &stat); if (S_ISDIR(stat.st_mode)) usage += du(path); #ifdef HAVE_SYMLINKS /* May be determined by Autoconf! */ else if (S_ISLNK) { lstat(path, &stat); if (S_ISDIR(stat.st_mode)) { char linkpath[PATH_MAX+1]; int chars; #endif } } } if ((chars = readlink(path, linkpath, PATH_MAX)) > 0) { linkpath[chars] = '\0'; usage += du(linkpath); }
All content copyright QNX Software Systems.
25
Summary
POSIX is a scalable standard with many different levels of compliance and many optional feature sets
Program by contract
►
Define a profile(s) that matches your needs and stick to it
►
Select vendor implementations that match your profile
Follow best practices whenever possible
►
Avoid unspecified or undefined behavior
►
Code conditionally to abstract over differences
All content copyright QNX Software Systems.
26
Thank You!
Learn more about POSIX Certification: http://posixcertified.ieee.org
Download the QNX white paper “Using POSIX in Embedded Systems: http://www.qnx.com/info/posix_whitepaper
Get your free 30-day evaluation copy of QNX Momentics development suite v6.3: http://www.qnx.com/products/eval/
Questions?
All content copyright QNX Software Systems.
27