Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® SDP 7.1 Documentation Update, May 2022: Release Notes

Date of this edition: May 16, 2022

QNX® SDP is a cross-compiling and debugging environment, including an IDE and command-line tools, for building binary images and programs for ARM v7 and v8, and x86_64 targets running the QNX Neutrino® that's based on QNX Software Development Platform 7.1. You can install QNX SDP on the following development hosts:

  • Microsoft Windows 10 Pro 64-bit, or Windows 8.1 Pro 64-bit
  • macOS version 10.14, or 10.15
  • Linux for x86_64 processor: Ubuntu 18.04 LTS, or Ubuntu Desktop 20.04 LTS, or Red Hat Enterprise Linux 7.

    Note: QNX SDP is not supported for Linux on ARM processors.

Contents

Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.

What's in this update?

This update includes the following packages, which you will find under Updates -> QNX Software Development Platform -> Documentation in the QNX Software Center:

Name Package ID Package internal version
QNX SDP 7.1 Documentation com.qnx.qnx710.target.docs.plugins 0.0.6.01155T202205061124L

To see a list of the contents of a package, right-click it in the QNX Software Center, choose Properties, and then click Package Contents in the Properties window.

Updates and fixed issues

This update includes enhancements, fixed issues, and clarifications, to the following QNX SDP documents:

General updates

  • We've updated the company name to "BlackBerry Limited" in all our plugin support files. (Ref# J2913320)
  • In the HTML documentation, we have made changes to the navigation links for the QNX Software Development Platform documentation. (Ref# J2915126)
    • The OS Core Components section has been renamed OS Components.
    • The link Migrating to QNX SDP 7 is updated to Migrating to QNX SDP 7.1.
    • The PCI Server User's Guide is moved from Programming to OS Components.
  • For the HTML version of the documentation, we have added labels at the top of the pages (e.g., the product name and version) and moved the date (that the page was last updated) to the top of the page. These page elements are designed to help search engines determine the relevance of individual pages that otherwise provide no larger context. (Ref# J2912426)

Software Development Platform

OS Components

Boot Optimization Guide

  • We've fixed the sample code in the chapter "Measuring Boot Times". (Ref# J2912740)

Building Embedded Systems

  • We've edited the following content in the "Custom" section (in the chapter "Kernel Callouts"):
    • Added a warning: "On a multiCPU system, it's possible that the callout may be invoked on multiple CPUs at the same time." (Ref# J2908901)
    • Provided a summary of and link to the callout_entry data structure in the syspageptr field description, and a link to the security policies overview in the type_id description. (Ref# J2908901)
    • Mentioned how the custom field must be either NULL or non-NULL. (Ref# J2910093)
    • Updated the content to address few editorial fixes. (Ref# J2889938)
  • We've edited content in the "Callout" section (in the chapter "System Page"). (Ref# J2908901)

Core Networking Stack User's Guide

  • We've removed the section 'Custom abilities' and added a link to the newly added section 'Abilities' in the section “Process manager abilities” (in the chapter "Overview"). (Ref# J2916444)

PCI Server User's Guide

  • We've corrected typographical errors in the sections "Module Loading" and "The “Strings” module" (in the chapter "Design Details"). (Ref# J2911362)
  • We've updated the pci_device_read_cap() entry to explain how the function returns PCI_ERR_EINVAL when the passed-in cap pointer is NULL, by design. (Ref# J2911990)
  • We've edited content in the following chapters: (Ref# J2914563)
    • PCI Server Overview
    • Design Details

System Analysis Toolkit User's Guide

  • We have updated the following content in the section "Components of the SAT" ( in the chapter "Introduction"). (Ref# J2871517)
    • Fixed terminology around tracelogger and traceprinter and mentioned libtraceparser after traceprinter.
    • Replaced "QNX Momentics Tool Suite's IDE" with "QNX Momentics IDE" in the subsection "Integrated Development Environment (IDE)."
    • Updated text in the last paragraph in the subsection "Kernel buffer management."
  • We have added a reference to the sample parser program that uses C Library calls in the section "Building your own parser" (in the chapter "Interpreting Trace Data"). This provides an alternative to the traceparser library. (Ref# J2871517)

System Architecture

  • We've added a statement about signals caused by CPU exceptions to the section "Signals" (in the chapter "Interprocess Communication (IPC)"). (Ref# J2907714)
  • We've fixed the discussion of the search order for resolving symbols in a shared object in the section "Symbol name resolution" (in the chapter "Dynamic Linking"). (Ref# J2911653)
  • We've replaced INT_MAX with SSIZE_MAX and edited content in the note for the section "Message copying" (in the chapter "Interprocess Communication (IPC)"). (Ref# J2910463)
  • We've made the following updates for the section "Clock and timer services" (in the chapter "The QNX Neutrino Microkernel"): (Ref# J2913852)
    • Renamed the section "Tracking time".
    • Mentioned CLOCK_REALTIME in the section "ClockAdjust()".
    • Added details about the libmod_timecc kernel module, when it is used, and how to use it on x86_64 and AArch64 systems in the "libmod_timecc" section.
  • We've updated the following in the section "Power-Safe filesystem" (in the chapter "Filesystems"). (Ref# J2906219)
    • Explained how expandable filesystems can be created with the host-side mkqnx6fsimg utility (using num_sectors and max_sectors), or the target-side mkqnx6fs utility (using -x and -n).
    • Explained the bitmap and inodes files, and how their sizes are determined.
    • Added subsections for "Expandable filesystem" and "Bitmap and inodes files" to cleanly separate these concepts.

Technotes

  • We've clarified the description of the C/D value in the section "Reading a Kernel Dump." (Ref# J2914481)

User's Guide

  • We've updated the description of etc/shadow/ in the section "Account Database" (in the chapter "Managing User Accounts"). (Ref# J2895678)
  • We've updated the content in the section 'Power-Safe (fs-qnx6.so) filesystem' (in the chapter "Working with Filesystems"). (Ref# J2908331)
  • We've re-phrased the content for the section "Access Control Lists (ACLs)" under "File ownership and permissions" (in the chapter "Working with Files"). (Ref# J2910787)

Audio & Graphics

Audio Developer's Guide

  • The description of the count and free members of the "snd_pcm_channel_status_t" structure have been updated to remove the invalid references to the note section (in the chapter "Audio Library"). (Ref# J2906020)

Programming

Getting Started with QNX Neutrino

  • To reflect the addition of *at() functions, we've revised the description of the following helper functions in the section "Alphabetical listing of connect and I/O functions" (in the chapter "Resource Managers"): (Ref# J2913775)
    • Change file mode I/O function handler : chmod(), fchmod(), fchmodat()
    • Change ownership I/O function handler : chown(), fchown(), fchownat()
    • Create file link connect function handler : link(), linkat(), symlink(), symlinkat()
    • Make filesystem node connect function handler : mknod(), mknodat(), mkdir(), mkdirat(), mkfifo(), mkfifoat()
    • Open connect function handler : open(), openat(), fopen(), sopen()
    • Read link connect function handler : readlink(), readlinkat()
    • Unlink connect function handler : unlink(), unlinkat()
  • We've replaced "timer tick" with "system tick" in the section "Clock interrupt sources" under "Clocks and timers" (in the chapter "Clocks, Timers, and Getting a Kick Every So Often").

Programmer's Guide

  • We've added the statement "When SIGSEGV is delivered by the kernel, the signal is synchronous and cannot be masked (blocked)" in the section "Process termination" (in the chapter "Processes"). (Ref# J2907714)

The QNX Neutrino Cookbook: Recipes for Programmers

  • We added the note: "The sample programs are currently not available for 7.1 but are available for 7.0." (in the chapter "Sample Programs"). (Ref# J2905990)

Writing a Resource Manager

  • We've restructured the chapter "Filesystem Resource Managers": (Ref# J2911143)
    • Moved the content of "Handling directories" to the introduction in the new chapter "Filesystem Resource Managers."
    • Moved the content from "Matching at or below a mountpoint" into the introduction in the new chapter.
  • We've added the section "Returning information associated with a directory structure" (in the chapter "Returning directory entries from _IO_READ"). (Ref# J2911143)
    • The first paragraph now discusses that returning a struct stat is a potential optimization and the use of it is a usage question.
    • The last paragraph now correctly includes an example for ls -l (small l), not for ls -L(big L).
  • We've revised content in the section "Sample code for handling _IO_DEVCTL messages" and removed the reference to msg->o.nbytes in the section "Handling devctl() messages" (in the chapter "Handling Other Messages"). (Ref# J2908268)
  • We've edited code in the section "Handling devctl() messages" (in the chapter "Handling Other Messages"). (Ref# J2908265)
  • We've removed the table of custom abilities from the section "Security" (in the chapter "Fleshing Out the Skeleton"). (Ref# J2910806)

System Security Guide

Security Features for Developers

  • We've added a new section "Recommended compiler verification options" in the section "Compiler Defences". (Ref# J2895789)

Security Features for System Integrators

  • We've made following changes in the chapter "Privilege control":
    • We've created a new page "Abilities". (Ref# J2910806)
    • We've updated PROCMGR_AID_SIGNAL entry in the Static abilities table, instances of NTO_TCTL_*_STOP is replaced by _NTO_TCTL_*_HOLD in the section "Abilities". (Ref# J2914379)
    • We've added a link to the new section "Abilities" and a short discussion of methods for configuring a process's abilities in the section "Process manager abilities". (Ref# J2910806)
  • We've added information on using Valgrind tools and the GNU debugger (GDB) with OpenSSL in the section "Cryptography for system integrators". (Ref# J2915399)

Fortified System Functions

  • We've added a table that provides a complete list of checked variants. (Ref# J2908098)

QNX Cryptography Library

  • We've added new algorithms in the section "OpenSSL plugin" (in the chapter "Adding cryptographic primitives"). (Ref# J2877456)
  • We've listed the QNX features that make use of qcrypto as a dependency. (Ref# J2916046)

PAM

  • We've corrected the syntax for specifying the directory /system/etc/pam.d/ in the section "Configuring PAM." (Ref# J2908940)

Utilities & Libraries

C Library Reference

The following entries are new:

We've documented the following power-management API functions (Ref# J681948):
  • nto_power_freq_reason
  • nto_power_parameter
  • nto_power_parameter_type
  • nto_power_range
  • PowerGetActive()
  • PowerParameter()
  • PowerSetActive()


The following functions have been updated:

sigaction()
  • Corrected the syntax error. (Ref# J2909624)
iofunc_acl()
iofunc_acl_default()
  • Edited text to include a "Light bulb note" in the description section. (Ref# J2910772)
openpty()
  • Edited the code to include more header files. (Ref# J2912064)
iofunc_ocb_attach()
  • Corrected and documented the errors. (Ref# J2911978)
MsgPause(), MsgPause_r()
  • Documented that cookie argument must be the rcvid if message pausing support is implemented by setting up an iofunc unpause handler. (Ref# J2911198)
lseek(), lseek64()
  • Revised the description. (Ref# J2913229)
mem_offset(), mem_offset64()
  • Edited content for clarity and added a note to the description section. (Ref# J2912230)
sigevent
  • Added a note: "If the action required by the SIGEV_MEMORY sigevent cannot be performed (e.g. trying to write to kernel memory or read-only memory) the action will quietly fail. No indication of the failure is provided." (Ref# J2912007)
prlimit(), prlimit64()
  • Fixed the prototype for prlimit() and prlimit64(). (Ref# J2911827)
  • Revised content for RLIMIT_CPU. (Ref# J2909696)
InterruptHookTrace()
  • Removed a note about the need for an instrumented kernel and the ENOTSUP error code. (Ref# J2911731)
MsgRead(), MsgRead_r()
  • Re-wrote content to include more details under the "Returns" sub-heading. (Ref# J2911235)
getfsfile()
  • Updated the safety information for getfsfile(). (Ref# J2910338)
ThreadCtl(), ThreadCtl_r(), ThreadCtlExt(), ThreadCtlExt_r()
  • Added a note to the _NTO_IO_LEVEL_2 description. (Ref# J2910017)
  • Revised the _NTO_TCTL_SHR_MUTEX command description. (Ref# J2904321)
  • Made the following changes: (Ref# J2913417)
    • Removed the inaccurate statement about pid needing to be zero.
    • Clarified that the EINVAL error is returned if pid is nonzero and tid is zero.
  • Updated the table for _NTO_TCTL_IO, _NTO_TCTL_IO_LEVEL, _NTO_TCTL_IO_PRIV. (Ref# J2912572)
waitfor()
  • Updated the documentation to include following information: (Ref# J2909158)
    • when poll_ms is 0, the polling interval is set overridden to INT64_MAX.
    • when poll_ms is less than 0, the polling interval is set to 100ms.
SignalAction(), SignalAction_r()
  • Edited code so that both SIGIO and SIGPOLL kill the process as default action. (Ref# J2909111)
dup()
  • Added EBADF in the error section. (Ref# J2908882)
recvmmsg()io-pkt
  • Updated the documentation to include following information: (Ref# J2908735)
    • Changed variable names to match the code mm and to.
    • Added description for flag MSG_WAITFORONE.
    • Edited description for to argument.
pthread_barrier_init()
  • Removed EBUSY from the error section of the documentation of sem_init() and pthread_barrier_init(). (Ref# J2908546)
shm_unlink()
  • Updated the description of shm_unlink(). (Ref# J2759832)
struct sigaction
pthread_sigmask()
SignalProcmask(), SignalProcmask_r()
sigprocmask()
  • Added a note in the SIG_IGN description that synchronous signals can not be ignored.
  • Amended note about SIGSEGV and other similar signals to explain that kernel-issued signals are synchronous and cannot be blocked.
    (Ref# J2907714)
InterruptHookIdle2()
  • Improved the _NTO_IH_RESP_SYNC_TIME flag description. (Ref# J2909117)
InterruptHookIdle2()
  • Documented the _NTO_COF_NOSHARE flag as an internal flag for ConnectFlags() mask argument. (Ref# J2813861)
TimerAlarm(), TimerAlarm_r()
  • Edited the description section to include "These kernel calls activate an internal timer to schedule an alarm signal (SIGALRM) for delivery to the process.". (Ref# J2913901)
mmap(), mmap64(), mmap_handle()
mmap_device_memory()
mmap_peer(), mmap64_peer()
mprotect()
  • Deleted the references to PROCMGR_AID_UNTRUSTED_EXEC. (Ref# J2913585)
MsgDeliverEvent(), MsgDeliverEvent_r()
  • Edited the code example to place the MsgDeliverEvent() call after the name_open() call. (Ref# J2914862)
ClockCycles()
  • Changed the warning to explain that ClockCycles() should not roll over while providing an example. (Ref# J1598794)
sigprocmask()
  • Fixed the redundant and misleading text from the description section. (Ref# J2913220)
TraceEvent()
  • Added a warning: "Adding an event handler significantly increases the cost of generating each event" in the description section for _NTO_TRACE_ADDCLASSEVHANDLER and _NTO_TRACE_ADDEVENTHANDLER (Ref# J2912587)
dlopen()
  • Fixed the search order for resolving symbols in a shared object. (Ref# J2911653)
ConnectAttach(), ConnectAttach_r()
  • Added a statement "Clients should avoid using different flags in different connections or unexpected behavior could result". (Ref# J2876663)
posix_typed_mem_get_info()
  • Revised the description to eliminate repetition, improve clarity, and stated "The result is statistical and can not be relied on.". (Ref# J2760257)
sem_post()
  • Documented EOVERFLOW error. (Ref# J2815751)
dispatch_block()
  • Removed the ENOMEM error and a reference to SignalWaitInfo(). (Ref# J2914568)
endutent()
getutent()
getutid()
getutline()
pututline()
setutent()
utmpname()
  • In the Safety table, the Thread value is now correctly documented as No. (Ref# J2912284)
procmgr_ability()
  • Removed some related references entries and refined some text. (Ref# J2916451)
  • Removed the table of abilities information. (Ref# J2910806)
procmgr_ability_lookup()
  • Removed the table of custom abilities. (Ref# J2916451)
ChannelCreate(), ChannelCreate_r(), ChannelCreatePulsePool()
  • The _NTO_CHF_MSG_PAUSING description explains that the flag informs the kernel that the server supports message pausing. (Ref# J2891710)
MsgPause(), MsgPause_r() (Ref# J2891710)
  • Removed the statement "The resource manager uses pulse_attach() or message_attach() to set up a handler for _PULSE_CODE_RESTART pulses."
  • Rewrote the steps detailing how non-resource managers manage a deadlock (EDEADLK) situation.
  • Added a related link to MsgCurrent() at the bottom of the page.
resmgr_pause_queue() (Ref# J2891710)
  • The private_data argument mentions "the callback will be specified by resmgr_pause_resume()."
  • Added in the description section how the MsgPause() entry for an explanation of how EDEADLK can occur.
  • Added in the description section that the resmgr_pause_resume() is typically called in your resource manager's unpause handler.
  • The returns section accurately describes the possible _RESMGR_NOREPLY and EDEADLK return codes.
  • The safety information matches MsgPause().
resmgr_pause_resume()
  • Added in the description section that this function is typically called in a resource manager's unpause handler, and there is a functional link to the resmgr_io_funcs_t table entry for this handler. (Ref# J2891710)
resmgr_io_funcs_t
  • Added summaries of the pause and unpause handlers to the table. (Ref# J2891710)


The following functions have been deleted:
(Ref# J2872213)

fs_crypto_domain_add_dynamic()
fs_crypto_domain_lock_dynamic()
fs_crypto_domain_remove_dynamic()
fs_crypto_domain_unlock_dynamic()

Utilities Reference

The following utilities have been updated:

errno
  • Updated the documentation. (Ref# J2911700)
rtc
  • Added the clocktype rx6110. (Ref# J2911915)
devc-ser8250
  • Updated the FIFO values. (Ref# J2911595)
pr
  • Documented the -L option. (Ref# J2911416)
mkifs
  • Updated the phys_align attribute. (Ref# J2910032)
  • Documented that the script file is run by a priority 10 thread. (Ref# J2908081)
mkifs
mkefs
mketfs
mkfatfsimg
  • Deleted the -h option. (Ref# J2906472)
pidin
  • Updated the _NTO_PF_EXECED flag description. (Ref# J2907303)
gdb
  • Improved gdb remote debuggin documentation. (Ref# J2907775)
sshd
  • Fixed the broken links. (Ref# J2910067)
mkqfs
  • Revised the description of the -B parameter for QNX Trusted Disk (QTD). (Ref# J2909552)
  • Updated the RSA key lengths in QTD documents. (Ref# J2914337)
devf-ram
  • Removed instances of using the word "privity" instead of "privilege." (Ref# J2912119)
devb-loopback
  • Documented the user option. (Ref# J2911334)
fs-qnx6.so
  • Documented the crypto option. (Ref# J2911334)
io-blk.so
  • Documented the inherit-runmask option.(Ref# J2911334)
printf
  • Updated the description and table details. (Ref# J2908787)
dumper
  • Improved the documentation including alert messages. (Ref# J2890366)
mkqnx6fsimg
  • Added few new attributes to support encryption on fs-qnx6 filesystems. (Ref# J2563676)
  • Added a new command-line option -C profile. (Ref# J2904968)
  • Updated the description of mkqnx6fsimg UUID to show the correct format of 8-4-4-4-12. (Ref# J2911418)
xargs
  • Revised xargs entry significantly and made a few other edits to its content. (Ref# J2908554)
dumpifs
  • Revised the description of the -z option.
chemod
  • Documented the chemod utility and linked it to fs-qnx6.so. (Ref# J2751181)
fs-dos.so
  • Fixed a typographical error. (Ref# J2913010)
mkxfs
  • Added the -r option. (Ref# J2652163)
dloader
  • Updated the note for ipl-diskpc2-fsq6 to include mkqnx6fs -B and removed the example that uses ipl-diskpc2-fsq6. (Ref# J2906407)
q++, qcc
  • Added a note under the W option regarding the workaround for linking issues. (Ref# J2906303)
getconf
  • Corrected the return value for PC variables _PC_LINK_DIR, _PC_SYNC_IO, _PC_NO_TRUNC, _PC_CHOWN_RESTRICTED. (Ref# J2901200)
gcov
  • Added details under the description section. (Ref# J2876421)
logout
  • Updated text in the description section. (Ref# J2912104)
diskimage
  • Updated default size of the -s number option. (Ref# J2909547)
  • Updated the Runs On section to include QNX Neutrino. (Ref# J2909386)
  • Removed the -z option. (Ref# J2914699)
ksh
  • Documented the qon builtin command. (Ref# J2908813)
top
  • Mentioned maximum limit for the -z option. (Ref# J2910550)
find
  • Updated the content in the primary option -prune. (Ref# J2909019)
io-blk.so
  • Deleted the maxcio number option. (Ref# J2616442)
chkqnx6fs
  • Updated following: (Ref# J2906219)
    • The utility's description refers to 'fs-qnx6', not 'fs-qnx6.so'.
    • The second step listed for the consistency check is "Traverse the bitmap file and inodes file", followed by a functional link to the "Power-Safe filesystem" topic.
    • The correct spelling of "filesystem" (one word) is used.
    • In the list of methods to create an expandable filesystem, edited the text and fixed the link.
mkqnx6fs
  • Updated following: (Ref# J2906219)
    • The "endianness" is spelled without a hyphen.
    • The -n option is explained clearly and concisely, with functional links and a properly displayed formula to calculate the number of blocks.
    • The correct spelling of "filesystem" (one word) is used.
    • The -x option is explained clearly and concisely, with functional links.
mkqnx6fsimg
  • Updated following: (Ref# J2906219)
    • The max_sectors description is clear and concise yet thorough, with functional links.
    • the num_inodes description has the correct spelling of 'mkqnx6fsimg' and 'filesystem' (one word), and ends with a Note: "The number of inodes determines the inodes file size." followed by a functional link to the "Power-Safe filesystem" topic.
    • The sector_size description no longer says "the argument is optionally followed by a K, M, or G"; instead, it lists "512 and 4096 (or 4k or 4K)" as possible values.
mkasmoff
  • Added a -f format parameter.(Ref# J2909947)
mkefs
mketfs
mkfatfsimg
mkifs
mkqnx6fsimg
  • The descriptions for the followlink and optional attributes have been updated and include the following details: (Ref# J2908953)
    • In the +optional, +followlink case, symlinks should not be imported into the image.
    • The terms "enabled" and "disabled" should be used in the attribute descriptions (instead of "true" and "false").
    • The followlink attribute has a default setting of enabled.
    • The optional attribute applies only to items explicitly included.

Known issues

None currently known.

See also the QNX SDP 7.1 Release Notes.

Getting started with the documentation

After you've installed QNX SDP, you'll find an extensive set of HTML documentation in the Integrated Development Environment (IDE) help system. To start the IDE:

  • on Windows, choose QNX Software Systems > QNX Momentics IDE from the Start menu, or use the desktop icon
  • on Linux, run IDE_base_directory/qde, where IDE_base_directory is where you installed the IDE package
  • on macOS, click the icon labelled Momentics from the launchpad

The roadmap page contains links to the various HTML booksets that accompany the OS. For a short tutorial that will help you get started, see the Quickstart Guide, then refer to the other documents (System Architecture, QNX Neutrino Programmer's Guide, C Library Reference, Utilities Reference, and so on).

You can install and work with multiple versions of QNX Neutrino. Whether you're using the command line or the IDE, you can choose which version of the OS to build programs for. For more information, see the IDE User's Guide or the QNX Neutrino Programmer's Guide.

Technical support

To obtain technical support for any QNX product, visit the support area on our website (https://blackberry.qnx.com/en/support/qnx-support-overview). You'll find a wide range of support options, including community forums.