Caution: This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs.

QNX® Momentics® Development Suite 6.3.2 Release Notes

Date of this edition: June 26, 2008


Note: Changes to these notes since September 7, 2007 are highlighted below with this icon: New!

Target OS: This development suite produces software that's compatible with targets that are running QNX® Neutrino® 6.3.2.

Host OS: You can install this package on the following host OSs:


Note: We no longer support QNX Momentics on the following hosts:
  • Windows NT
  • Linux Red Hat 8 and 9
  • Solaris

QNX Neutrino 6.3 supports only the new flash filesystem (FFS3). The older flash filesystem (FFS2) has been discontinued.


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.

For the most up-to-date version of these notes, go to our website, www.qnx.com, log into your myQNX account, and then go to the Download area.


Caution: Make sure that Plug and Play OS is disabled in the BIOS before you run QNX Neutrino self-hosted.

Main features of QNX Momentics 6.3.2

QNX Momentics 6.3.2 is a roll-up release that incorporates the following:

QNX Momentics Development Suite

QNX Neutrino RTOS


Note: The OS images that we ship start procnto with the -v option, so that the kernel provides you with more information when a signal terminates a process.

Photon microGUI


Note: The Photon Application Builder (PhAB) is available only for Windows and QNX Neutrino hosts.

If you're using a Linux host, but you still want to use PhAB, consider installing a QNX Neutrino host to a second partition or an x86 simulator (e.g. VMware).


A word about coexistence

The QNX Momentics development suite lets you install and work with multiple versions of Neutrino (from 6.2.1 and later). Whether you're using the command line or the IDE, you can choose which version of the OS to build programs for.


Note: Only versions of Momentics with different medial version numbers can coexist. For example, 6.3.2 can coexist with 6.2.1, but not with 6.3.0.

When you install QNX Momentics, you get a set of configuration files that indicate where you've installed the software. The QNX_CONFIGURATION environment variable stores the location of the configuration files for the installed versions of Neutrino; on a self-hosted Neutrino machine, the default is /etc/qnx.

QWinCfg for Windows hosts

On Windows hosts, you'll find a configuration program (QWinCfg) for switching between versions of QNX Momentics.

You launch QWinCfg via the start menu (e.g. All Programs-->QNX Momentics 6.3.2-->Configuration).

For details on using QWinCfg, see its entry in the Utilities Reference.

qconfig utility for non-Windows hosts

If you're using the command-line tools, use the qconfig utility to configure your machine to use a specific version of Neutrino:


Note: In the above command, you must use the “back tick” character (`), not the single quote character (').

When you start the IDE, it uses your current qconfig choice as the default version of the OS; if you haven't chosen a version, the IDE chooses an entry from the directory identified by QNX_CONFIGURATION. If you want to override the IDE's choice, you can choose the appropriate build target. (For more information, see the section “Version coexistence” in the Concepts chapter of the IDE User's Guide.)


Note: Coexistence of 6.3 and 6.2.1 is supported only on Windows hosts.

Environment variables

Neutrino uses these environment variables to locate files on the host machine:

QNX_HOST
The location of host-specific files.
QNX_TARGET
The location of target-specific files on the host machine.
QNX_CONFIGURATION
The location of the qconfig configuration files.
MAKEFLAGS
The location of included *.mk files.

The qconfig utility sets these variables according to the version of QNX Momentics that you specified.

What's new: Board Support Packages

What's new: Compiler and tools

gcc
ld
Our linker used to behave such that any path specified with the -L option would also be added to the list of paths to be searched for shared objects.

This behavior is being deprecated; it will be removed in a future release. The correct method is to use the -rpath-link option.

ldrel
If you run ldrel on a binary that contains segment relocations, the relocations will be stripped. If you don't want them stripped, specify the -r option.
make
If you're using the QNX recursive makefile hierarchy, make needs to be able to find the makefile fragments (.mk files) with the rules for building QNX projects. These are stored in $QNX_TARGET/usr/include.

The environment variable MAKEFLAGS gives extra command-line flags to make; by setting it to -I$QNX_TARGET/usr/include, these .mk files will be found.


Note: Microsoft's nmake also uses MAKEFLAGS, so if there's a mixed environment, you can use GNUMAKEFLAGS, which is an extension to standard make and exists only in the QNX-supplied version.

mkifs

What's new: Core OS

Asynchronous messaging
Asynchronous messaging is a communication model that relies on a store-and-forward technique. Compared to regular reply-based communication in client-server systems, the messaging infrastructure ensures delivery, even if a participant is temporarily offline, busy, or unobtainable. In this technique, the sender doesn't need a response from the recipient. This provides more flexibility and scalability as the senders and receivers are decoupled and are no longer required to execute in lockstep.

Note: Asynchronous messaging is an experimental feature in 6.3; its implementation may change. For more information, see the Asynchronous Messaging technote in the online documentation, as well as the asyncmsg_*() entries in the Neutrino Library Reference.

C++
Some class definitions are stricter in 6.3. For example, the set class requires unique keys; you can no longer modify keys that you've already added to the set, because you could create duplicates. This change could cause code that compiled on 6.2.1 not to compile on 6.3. (Ref# 21773)
dinit
In 6.3, dinit now creates long filenames by default. You can disable support for long filenames by specifying the -N option. (Ref# 17642)

Note: This is the reverse of the behavior of 6.2.1; the -N option formerly enabled support for long filenames.

fcntl()
We fixed problems with side-channel connections and errno values reported. (Ref# 16959, 16960)

Note: The OS now prevents _NTO_SIDE_CHANNEL connections from being duplicated (via dup(), dup2(), or fcntl(F_DUPFD)). This is to maintain consistency with the concept of side-channels forming a separate file-descriptor space that isn't subject to normal process-inheritance rules.

If you are dup()ing side-channels, then they must now be attached as normal file descriptors.

Note also that the low-level ConnectAttach() doesn't allow the specification of a specific side-channel index, which is required by dup2().


FD_SETSIZE
The value of FD_SETSIZE has changed from 32 to 256. This affects the size of the fd_set objects that you pass to select(). This means that by default the highest allowable fd number for FD_SET(fd, &set) is 255.

To change the value, #define FD_SETSIZE before including <sys/select.h>, but make sure you do this consistently throughout your modules.

Instrumented kernel
The instrumented kernel (procnto-instr) is the default kernel for QNX Neutrino self-hosted systems.
LD_LIBRARY_PATH
For security reasons, the path(s) specified by LD_LIBRARY_PATH for setuid/setgid binaries isn't searched when loading shared objects.

Instead, only the path(s) defined by the _CS_LIBPATH configuration string are used. You can examine or modify the value of _CS_LIBPATH using the getconf and setconf utilities.


Note: In a buildfile, you can set the initial value of _CS_LIBPATH via the LD_LIBRARY_PATH= part of the procnto line. For example:
PATH=/proc/boot:/bin:/usr/bin LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll procnto

libpm and libpmm
POSIX Message Queues
QNX Momentics 6.3 ships with an optional alternate implementation of POSIX message queues. This implementation uses asynchronous messaging to buffer the messages within the kernel itself, and eliminates the (context-switching) overheads of using an external server (mqueue) in each message-queue operation, thus greatly improving the performance of POSIX message queues.

For more information, see Managing POSIX Message Queues in the QNX Neutrino Technotes in the online documentation.

Priority levels
The OS now supports 256 priority levels. Non-root processes can use only priority levels 1 to 63. Only root processes (i.e. those whose effective uid is 0) are allowed to set priorities above 63.

You can change the allowed priority range for non-root processes with the procnto -P priority option.

Here's a summary of the ranges:

Priority level Owner
0 idle thread
1 through priority − 1 non-root or root
priority through 255 root
resmgr_handle_tune()
This is a new function that you can use to tune some of the parameters used internally by the resource manager layer when performing the client fd - ocb mapping. For more information, see the Neutrino Library Reference.
select()
The select() function used to make use of the functions _select_event() and _select_block(). The latter two functions weren't documented (other than being prototyped in /usr/include/sys/select.h.)

As of 6.3, these two functions are no longer used internally. However, they've been left in libc for the time being, but may be removed altogether in a future release. For reference, here is the old implementation of select():

/*
Copyright 2001, QNX Software Systems. All Rights Reserved
 
This source code has been published by QNX Software Systems 
(QSS). However, any use, reproduction, modification,
distribution or transfer of this software, or any software
which includes or is based upon any of this code, is only
permitted under the terms of the QNX Realtime Platform End
User License Agreement (see licensing.qnx.com for details)
or as otherwise expressly authorized by a written license
agreement from QSS. For more information, please email
licensing@qnx.com.
*/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
/*  The routine implements the Unix select call.  When 
 semantics differ the BSD
 semantics defined in APUE (pg. 396-400) are followed.
*/
 
int select(int nfds, fd_set *readfds, fd_set *writefds, 
fd_set *exceptfds, struct timeval *tvptr) 
{
     struct sigevent            event;
     struct timespec            ts;
 
     if(tvptr) 
     {
         if (tvptr->tv_sec < 0 ||   /* don't bother 
                         checking upper ends, roll over will catch really bad overflows */
             tvptr->tv_usec < 0)
             return errno= EINVAL, -1;
         
         ts.tv_sec= tvptr->tv_sec ;
         ts.tv_nsec= tvptr->tv_usec * 1000L ;
     }
 
     event.sigev_notify = SIGEV_SIGNAL_THREAD;
     event.sigev_signo = SIGSELECT;    /* This signal is     
      always SIGBLOCKed */
     /* event.sigev_value will be modified as needed by 
      select_sigevent() */
     event.sigev_code = SI_NOTIFY;
     event.sigev_priority = -1;
 
      return _select_event(nfds, readfds, writefds, exceptfds, tvptr ? &ts : 0, &event, _select_block, 0);
}
64-bit “large file” libc/filesystem support
QNX Neutrino 6.3 implements the X/Open Largefile Support extensions. For details, see the 6.3 and 6.2.1 Compatibility note posted on our website.
Startup library
The startup library supports 64-bit physical addresses for the MIPS, PPC, and x86 architectures. Two versions of the libstartup.a are built:

By default, startup programs will compile and link with the 32-bit version. If a board needs 64-bit physical addresses, add the make macro PADDR_SIZE=64 to the board's pinfo.mk file (see startup/boards/440rb/pinfo.mk for an example).

System page
/etc/rc.d/rc.local
For your convenience, 6.3.2 installs an empty, executable version of /etc/rc.d/rc.local, with permissions of of 750 (read, write, execute for the user; read, execute for the group; no permissions for others). (Ref# 22665)
Fast mutex optimization (SH4 and ARM)
Renesas SH4 and ARM/XScale processors don't include atomic operations (atomic compare-swap or load-linked/store conditional), so these instructions are emulated on these platforms. As these instructions are used for mutexes, the cost of this emulation is significant. 6.3.2 includes a new scheme that instead includes a specific code sequence that, when coupled with updates to the kernel, allows the implementation of mutexes using normal (nonemulated) assembly sequences. This provides a significant performance improvement for uncontested mutexes.
Threads
Threads now have names, which can make debugging easier. (Ref# 27085)

The following commands now support thread names:

Virtual memory manager

The QNX Neutrino Core OS 6.3.2 includes a completely rearchitected virtual memory (VM) manager. This provides significant benefits and functionalities, as follows:

Here are more details:

What's new: Libraries and header files

System headers
We've changed the following header files to make them more POSIX_compliant:
<sys/platform.h>
We've removed the obsolete XBS_ILP32_* symbols and replaced them with the _XBS5_ILP32_* equivalents. If you use the old definitions, you should update your code. (Ref# 26159)
fork()
iofunc_funcs_t
The iofunc_funcs_t structure is now larger, and the _IOFUNC_NFUNCS count has increased. If you use memset() to initialize this structure, the change in size won't affect your resource managers.

If your resource managers use this callout table to install their own OCB allocation routines, and you didn't use memset(), recompiling your resource managers will cause the new callouts (for OCB locking) to be used. The libc library is backwards-compatible in that resource managers that haven't been recompiled won't attempt to use the new callouts, and a NULL callout means to use the default/old behavior.

pthread_getname_np(), pthread_setname_np()
You can use these functions to get and set the name of the threads in your applications.
remove()
If path names a directory, remove(path) is now equivalent to rmdir(path) instead of unlink(path), due to a change in POSIX. (Ref# 19534, 28319)
sigevent
Future versions of the library might use hidden bits in the sigev_notify member of the sigevent structure. To avoid problems in the future, don't compare this member directly to a constant; use the new SIGEV_GET_TYPE() macro. For example, instead of:
if( my_event.sigev_notify == SIGEV_PULSE) 
  

use:

if( SIGEV_GET_TYPE(&my_event) == SIGEV_PULSE) 
  
siginfo_t
The siginfo_t structure now has a new field, si_bdslot. When a signal is caused by a program exception (SIGSEGV, SIGILL, etc.), the field is nonzero if the faulting instruction is in a branch delay slot on architectures with them (MIPS, SH).

Note:
  • This is currently implemented only for MIPS.
  • Earlier versions of procnto left this field as a random value, so code should check the procnto version number before examining the field.

What's new: Utilities

on
This utility now supports these new options (Ref# 13645):

If you use both the -C and -R options or multiple instances of them, the resultant mask is the bitwise ORing of all -C and -R options. (Ref# 28501)

pidin
This utility now supports these new formatting codes:

and these new arguments:

(Ref# 27982, 28098)

slay
tracelogger
If you specify a duration for the log (with the -s option), then the number of iterations logged is once again unlimited instead of being set to 32. (Ref# 26823)
use
This utility has a new -s option that you can use to display the version numbers of the source used in the executable. (Ref# 47698, 48222, 47907)

What's new: Startup

What's new: Device drivers

Audio device drivers (deva-*)

Block-oriented drivers (devb-*)

New drivers:

Fixed issues:

devb-mvSata
This driver now correctly initializes the mvSata card with a PCI device ID of 0x6081. (Ref# 48942)
devb-eide and devb-ahci
These drivers now support:

devb-eide

The devb-eide driver supports the following chipsets:

Manufacturer Chip Vendor Id Device Id Revision Xfer Mode
Intel 82371FB 0x8086 0x1230   BIOS
Intel 82371SB 0x8086 0x7010   MDMA 2
Intel 82371AB 0x8086 0x7111   UDMA 2
Intel 82443MX 0x8086 0x7199   UDMA 2
Intel 82801AA 0x8086 0x2411   UDMA 4
Intel 82801AB 0x8086 0x2421   UDMA 4
Intel 82801BAM 0x8086 0x244A   UDMA 5
Intel 82801BA 0x8086 0x244B   UDMA 5
Intel 82801CA 0x8086 0x248B   UDMA 5
Intel 82801CAM 0x8086 0x248A   UDMA 5
Intel 82801DB 0x8086 0x24CB   UDMA 5
Intel 82801DBM 0x8086 0x24CA   UDMA 5
Intel 82801DB 0x8086 0x24CB   UDMA 5
Intel 82801EB 0x8086 0x24DB   UDMA 5
Intel 82801ESB 0x8086 0x25A2   UDMA 5
Intel 82801FB 0x8086 0x266F   UDMA 5
Intel 82801EB 0x8086 0x24D1   SATA
Intel 82801ER 0x8086 0x24DF   SATA
Intel 82801FB 0x8086 0x2651   SATA
Intel 82801FR 0x8086 0x2652   SATA
Intel 82801FBM 0x8086 0x2653   SATA
Intel 82801ESB 0x8086 0x25a2   UDMA 5
Intel 82801ESB 0x8086 0x25a3   SATA
Intel 82801GB 0x8086 0x27df   UDMA 5
Intel 82801GB 0x8086 0x27c0   SATA
Intel 82801GB 0x8086 0x27c4   SATA
Promise PDC-20262 0x105a 0x4d38   UDMA 4
Promise PDC-20267 0x105a 0x4d30   UDMA 4
Promise PDC-20265 0x105a 0x0d30   UDMA 5
Promise PDC-20269 0x105a 0x4d69   UDMA 5
ServerWorks OSB4 0x1166 0x0211   UDMA 2
ServerWorks CSB5 0x1166 0x0212   UDMA 4 (untested)
ServerWorks CSB5 0x1166 0x0212 0x92+ UDMA 5
HighPoint Tech HPT-366 0x1103 0x0004 0x01 UDMA 4 (untested)
HighPoint Tech HPT-370 0x1103 0x0004 0x03+ UDMA 5
HighPoint Tech HPT-372 0x1103 0x0005   UDMA 6
HighPoint Tech HPT-374 0x1103 0x0008   UDMA 6
AMD PCB-756 0x1022 0x7409   UDMA 4 (untested)
AMD PCB-766 0x1022 0x7411   UDMA 5 (untested)
AMD PCB-768 0x1022 0x7441   UDMA 5
nVidia   0x01bc 0x10de   UDMA 5 (untested)
ACER Labs M5229 0x10b9 0x5229 0x19-0xc1 UDMA 2
ACER Labs M5229 0x10b9 0x5229 0xc2-0xc3 UDMA 4
ACER Labs M5229 0x10b9 0x5229 0xc4 UDMA 5
ACER Labs M5287 0x10b9 0x5287   SATA
ACER Labs M5289 0x10b9 0x5289   SATA
ATI (IXP-150/200/250) 0x1002 0x4349   UDMA 5
SiS SiS-5513 0x1039 0x5513 0xd0 UDMA 2/4
SiS SiS-5517 0x1039 0x5517   UDMA 6
SiS SiS-5518 0x1039 0x5518   UDMA 6
SiS SiS-180 0x1039 0x0180   SATA
SiS SiS-181 0x1039 0x0181   SATA
VIA Tech 82C586B 0x1106 0x0571 82686B PCI-ISA bridge 0x40+ UDMA 5
VIA Tech 82C586B 0x1106 0x0571 8231 bridge UDMA 5 (untested)
VIA Tech 82C586B 0x1106 0x0571 8233 bridge UDMA 5 (untested)
VIA Tech 82C586B 0x1106 0x0571 8233C bridge UDMA 5 (untested)
VIA Tech 82C586B 0x1106 0x0571 8233A bridge UDMA 6
VIA Tech 82C586B 0x1106 0x0571 8235A bridge UDMA 6 (untested)
VIA Tech 82C586B 0x1106 0x0571 8237 bridge UDMA 6 (untested)
VIA Tech 8237 0x1106 0x3149   SATA
VIA Tech 82C586B 0x1106 0x0571 0x6+ UDMA 2
Winbond W83C553F 0x10ad 0x0105   MDMA 2
PCMCIA Any PIO 0
PCI IDE Any   BIOS

The devb-eide driver now:

devb-ahci

The devb-ahci driver supports the Intel AHCI SATA controller with the following device IDs:


Note: You need to enable AHCI mode in the BIOS.

This driver now correctly detects the hard drive on the IBM ThinkPad T60. (Ref# 40126)

devb-mvSata

The devb-mvSata driver supports Vendor ID 0x11ab with the following device IDs:

Device ID Chipset
5080 88SX5080
5081 88SX5081
5040 88SX5040
5041 88SX5041

Graphics drivers (devg-*)

Driver Controller Target CPU
devg-chips.so (replaces devg-chip_hiqv.so) Chips & Technologies 65550 and greater MIPSLE, PPCBE, SHLE, x86
devg-coral.so Fujitsu Coral B & Coral P ARMLE, PPCBE, SHLE, x86
devg-i830.so Intel 82830, 82845, 82855, 82865, 82915G, 82915GM, 82945G, and 82945GM x86
devg-orchid.so Fujitsu Orchid PPCBE, SHLE, x86
devg-radeon.so ATI Radeon 9200, 9600, 9800, Mobility M9, X300, X600 PPCBE, x86 (see below)
devg-ravin.so NEC RavinE MIPSLE, PPCBE, x86
devg-sis630.so SiS 300 & 630 x86
devg-smi7xx.so Silicon Motion 712, 722 & 731 ARMLE, MIPSLE, PPCBE, SHLE, x86
devg-smi5xx.so Silicon Motion 501 ARMLE, MIPSLE, PPCBE, SHLE, x86
devg-tvia.so (replaces devg-igs5300.so) TVIA 52xx and 53xx MIPSLE, SHLE, x86

Other changes include:

devg-radeon.so
Polygon acceleration
We added polygon acceleration support for some chipsets (e.g. Fujitsu Coral, Orchid).
$QNX_TARGET/etc/system/enum/devices/graphics
We updated the enumerator to detect the supported chipsets.

Network drivers (devn-*)

Many drivers now have a probe_phy option that lets you select whether or not the PHY is probed at regular intervals to see if the duplex setting and/or the speed on the connection has changed (e.g. the cable has been unplugged and plugged into a different hub or switch. For more information, see the devn-* entries in the Utilities Reference.

6.3.2 also addresses the following issues:

devn-asix.so
This is a new driver for SMC2209 USB/Ethernet adaptors.

CPU targets provided: x86, ARMLE, MIPSLE, MIPSBE, PPCBE, SHLE

Location: $QNX_TARGET/x86/lib/dll/devn-asix.so, $QNX_TARGET/armle/lib/dll/devn-asix.so, $QNX_TARGET/mipsle/lib/dll/devn-asix.so, $QNX_TARGET/mipsbe/lib/dll/devn-asix.so, $QNX_TARGET/ppcbe/lib/dll/devn-asix.so, $QNX_TARGET/shle/lib/dll/devn-asix.so

Supported device IDs / chipsets:

devn-bcm43xx.so
We've updated this driver (for Broadcom BCM43xx Wireless Ethernet controllers) to add support for WPA and WPA2.

CPU targets provided: x86, PPCBE, SHLE

Location: $QNX_TARGET/x86/lib/dll/devn-bcm43xx.so, $QNX_TARGET/ppcbe/lib/dll/devn-bcm43xx.so, $QNX_TARGET/shle/lib/dll/devn-bcm43xx.so

Supported device IDs / chipsets:

devn-hermes2.so
This is a new driver for Agere Wireless Ethernet controllers.

CPU targets provided: x86

Location: $QNX_TARGET/x86/lib/dll/devn-hermes2.so

Supported device IDs / chipsets: PCMCIA manufacturer ID 156 device 3 # PCMCIA Hermes2 - Proxim Orinoco 802.11b

devn-i82544.so
We've updated this driver (for Intel 82544 Ethernet LAN adapters) with support for new chipsets.

CPU targets provided: x86, PPCBE

Location: $QNX_TARGET/x86/lib/dll/devn-i82544.so, $QNX_TARGET/ppcbe/lib/dll/devn-i82544.so

Supported device IDs / chipsets:

devn-pcnet.so
devn-rtl.so
devn-pegasus.so
devn-rtl8150.so
This is a new driver for SMC2208 USB/Ethernet adaptors.

CPU targets provided: x86, ARMLE, SHLE

Location: $QNX_TARGET/x86/lib/dll/devn-rtl8150.so, $QNX_TARGET/armle/lib/dll/devn-rtl8150.so, $QNX_TARGET/shle/lib/dll/devn-rtl8150.so

devn-tigon3.so
This is a new driver for the Broadcom BCM57xx Ethernet controller.

CPU targets provided: x86

Location: $QNX_TARGET/x86/lib/dll/devn-tigon3.so

Supported device IDs / chipsets:

libdrvr*
pccard-launch
This is a new Pccard launch utility.

CPU targets provided: x86, ARMLE, MIPSLE, MIPSBE, PPCBE, SHLE

Location: $QNX_TARGET/x86/usr/sbin/pccard-launch, $QNX_TARGET/ppcbe/usr/sbin/pccard-launch, $QNX_TARGET/shle/usr/sbin/pccard-launch

pci-bios
We've updated this PCI server to add PCI-to-PCI bridge support.

CPU targets provided: x86

Location: $QNX_TARGET/x86/sbin/pci-bios

startup-bios

What's new: Filesystems

fs-*.so
Mounting a disk filesystem with an invalid option no longer causes a memory leak. (Ref# 22341)
fs-cd.so
Because of a firmware bug, some CD-ROM devices return random addresses when queried for multisession information. We've modified fs-cd.so to work around this bug by returning to session 0 if it can't mount the last session. (Ref# 47233)
fs-dos.so
This filesystem now correctly handles volume labels that contain spaces or non-ASCII characters. Note that labels are 8.3 only, are not also stored as long filenames in Unicode, and if they're non-ASCII, you must specify the appropriate codepage= option (at fs-dos.so mount time) to decode/display it. (Ref# 44704, 45433)
fs-qnx4.so
io-blk.so
Other improvements:

What's new: Network protocols

Qnet
We now ship two versions of Qnet:

The default version is the new lightweight Qnet (npm-qnet.so is a link to npm-qnet-l4_lite.so). If you wish to use the older version of Qnet, have npm-qnet.so link to npm-qnet-compat.so, and then restart io-net.


Note:
  • The new Qnet (npm-qnet-l4_lite.so) isn't compatible with the pre-6.3 version.
  • You can't have an instance of npm-qnet-l4_lite.so and npm-qnet-compat.so active at the same time on the same node.
  • You can't unmount Qnet (either version) from io-net in 6.3.2.

npm-qnet-l4_lite.so
SCTP
IPFilter
IPFilter (lsm-ipfilter-[v4|v6] can be used only with the matching TCP/IP stack (i.e. lsm-ipfilter-v4.so with npm-tcpip-v4.so; lsm-ipfilter-v6.so with npm-tcpip-v6.so).
Full TCP/IP stack and other updates
rpcbind
By default, rpcbind executes in “secure” mode and uses Unix Domain Sockets for local communication.

If you wish to use an older RPC application with rpcbind or to use rpcbind in combination with the Tiny TCP/IP stack, you'll need to refer to the -L and -i options to rpcbind.


Note: The service rpcbind must be defined for both UDP and TCP in the /etc/services file. While the default /etc/services provided has these modifications, if you choose to use the current /etc/services file at installation time, these definitions will be missing and rpcbind will fail to function. The required lines are:
    
sunrpc    111/tcp        rpcbind portmap 
sunrpc    111/udp        rpcbind portmap

sysctl, npm-tcpip-v4.so, <netinet/icmp_var.h>
The TCP/IP stack would always respond to the ICMP timestamp request. You can turn this feature off with the sysctl utility or the sysctl() function. The object to control this is net.inet.icmp.tstamprepl; the default is 1 (on). (Ref# 23329)
sysctl, npm-tcpip-v4.so, <netinet/in.h>, <netinet/ip_var.h>
The TCP/IP stack by default uses sequential IP header IDs. You can enable random IP header IDs, by using the sysctl utility or the sysctl() function. The object to control this is net.inet.ip.random_id; the default is 0 (off). (Ref# 23328)
fs-cifs
fs-nfs2, fs-nfs3
NFS requests always have a unique identifier (xid) value. If a NFS server stops responding (for example because of a temporary network failure) fs-nfs2 and fs-nfs3 try to remount the server and resend the request. We've found that some servers refuse to reply to a request if the request's xid hasn't been changed after a remount, which is against the NFS specification. We've added an -x option to work around this problem; it causes the client to change the xid of the request after a remount. (Ref# 25402)
fs-cifs, fs-nfs2, fs-nfs3
The usage message now correctly states that you don't need to specify a server-export/mountpoint combination on the command line when you launch fs-cifs, fs-nfs2, or fs-nfs3. You can invoke the mount command later to add mountpoints. (Ref# 15446)
SRI SNMP suite
QNX Momentics includes an SNMP package that consists of the EMANATE/Lite technologies (15.3.1.23) developed by SNMP Research International (SRI). This package has been ported to QNX Neutrino. For more information on SRI products, including release notes, visit:

www.snmp.com/products

The software is installed in the /usr/snmp15.3.1.23 directory.

QNX Momentics includes EMANATE/Lite runtime binaries; if you need to develop your own MIBS, etc., you should purchase a full SNMP package from one of our partners (e.g. SRI/Emanate, NuDesign).

What's new: Photon

Photon File Manager
The Photon File Manager's preferences dialog lets you select a filename-encoding scheme. This feature allows PFM to properly display filenames that aren't encoded in valid UTF8. For details, see the pfm entry in the Utilities Reference.
phfont
The design architecture has evolved from 6.2.x. Under 6.2.x, io-graphics was able to load the font server into its own data segment in order to speed up rendering services. This interface has been taken to a new level, through libfont, by allowing several system configurations:
  1. An external font server and a client font instance within io-graphics.
    Benefit:
    Increased speed.
    Cons:
    Increase in memory footprint. Although io-graphics instantiates a client font instance, it can use greatly reduced resources, since it isn't concerned with other application requests.
  2. A server font instance within io-graphics. This is the same behavior as 6.2.x. If an external font server isn't started, io-graphics will attempt to start a server font instance.
    Benefits:
    Good speed; middle memory footprint.
    Cons:
    Slower than option 1, since the graphics driver may have to wait for an outside client font request to complete.
  3. An external font server only.
    Benefit:
    Minimal memory footprint
    Cons:
    Slowest option

Client applications may also load a private client font instance, resulting in maximum speed when making font requests. Please read the new documentation for phfont, fontadmin, and libfont (Font Library Functions, specifically Pf*Dll() API calls).

Under the 6.3 architecture, rendering plugins are utilized by phfont. These DLLs are located in /lib/dll/font. Each rendering DLL has an embedded use message; just type use dllname.

The following binaries are no longer required:

Please read the documentation on phfont for further details. Options for the DLLs are set via the fontopts file; see the docs on fontadmin for further details.

Due to the new library (libfont), when linking against a static libph you must also link against libfont.

embed_font
You can use this script to copy all the font system binaries and libraries to a target build image. Usage is simple:
embed_font target_root_directory
fontview
The fontview program is a font-viewer application that can display glyphs from any font format supported by phfont, without having to install the font file. For more information, see the usage message (type use fontview from a pterm).

The fontview utility uses the same rendering plugins as phfont.

io-graphics
Supports the following wide-screen video modes:

These are the standard display sizes for laptops with wide screens. (Ref# 25744)

TrueType fonts
We fixed a problem where PhAB for Windows wouldn't recognize and render user-supplied TrueType fonts. (Ref# 19865)

To install a TrueType font:

  1. Use the Windows Control Panel to install the font.
  2. Add the .ttf file to the following directory:

    %QNX_TARGET%\usr\photon\font_repository directory

  3. Run mkfontdir so that the font appears in the font index file (fontdir).
Photon hook
You can pull in and execute a block of user code during the initialization of Photon applications. For details, see the widget styles section of the Managing Widgets in Application Code chapter of the Photon Programmer's Guide.
Photon clipboard
The Photon clipboard has been enhanced with added security. You can no longer get access to another user's clipboard files, unless you're running as root. Clipboard files are no longer compatible between 6.3.0 and previous releases. This also means that Photon applications built against libph.so.2 can't share the clipboard with Photon applications built against libph.so.3.

You're no longer limited to 64 KB when you cut and paste text; the limit is now your system RAM.

Clipboard Changed Event
Clipboard changes cause a new event to be emitted. The event is a Ph_EV_INFO, with a subtype of Ph_CLIPBOARD_CHANGED. The data associated with the event contains the input group number and the “clip type” string, so that the listener can call PhClipboardRead() to paste the data just copied. The old region-changed event has been deprecated, but for now will still be emitted when the clipboard changes.
phlogin
The default login application is now phlogin2, which provides a user icon that you can select to log in. If you remove phlogin2 from the path, phlogin (the original GUI login from 6.2) is used automatically.
savercfg
Security
New versions of the following files fix some security vulnerabilities in Photon reported by iDefense.com:

This change fixes these issues:

What's new: Subversion

QNX Momentics now includes clients for both CVS and Subversion. (Ref# 47520, 47901, 47486)

For more information about Subversion (svn), see:

What's new: Windows-specific

We now provide two shells:

You'll find these executables under ${QNX_HOST}/usr/bin (e.g. C:\QNX632\host\win32\x86\usr\bin). You may want to create desktop shortcuts for these or other executables you'll use often.

Known issues

QNX Momentics 6.3.2 contains known issues in these areas:


Note: We're actively investigating all known issues.

Known issues: Installing

Known issues: Adaptive partitioning

Known issues: Booting

Known issues: BSPs, DDKs, and TDKs

Known issues: Compiler and tools

gcc
gdb
ld
make
qcc
qcp
The qcp utility works only on x86 platforms. (Ref# 9500)
Windows-specific

Known issues: Core OS

Kernel

procnto
procnto-booke
The kernel might crash on the Freescale Power Quicc III board when there's a heavy networking load. This problem occurs only when the core-to-system clock ratio is set to 2:1. The problem also exists with earlier releases of QNX Neutrino. We're still determining the root cause. (Ref# 27079)
procnto-smp
When using floating point emulation on MIPS processors, internal filesystem sanity tests have resulted in SIGILL exceptions. This problem doesn't occur if you use a hardware floating point unit. (Ref# 25206)
mq
If you use the instrumented kernel to trace events while you're using mq, emitting _NTO_TRACE_COMM_SMSG communication-class events might cause your application to crash with an EFAULT when it calls mq_send(). We've encountered this problem on SHLE boards. (Ref# 38082)

Workaround: Filter out the _NTO_TRACE_COMM_SMSG events by doing one of the following:

The side effect of filtering out these events is that the IDE's System Profiler won't be able to show you any message-passing.

Libraries and header files

ENDIAN_*()
This release includes inline assembly optimization on some platforms for the ENDIAN_*() (byte-swapping) routines.

These routines are macros that determine the best method to perform the byte-swapping (as inline math using shift-and-mask operations that may be constant-folded at compile time, or as inline assembly using native CPU instructions at runtime). Due to a bug in the gcc 2.95.3 __builtin_constant_p() implementation, code compiled with gcc 2.95.3 always selects the assembly variant.

This means that if you use an ENDIAN_*() expression as a static initializer, it fails to compile. For example, if you use gcc 2.95.3 to compile the following code:

static uint32_t numbers[] = {
ENDIAN_LE32(0x39c39c39),
ENDIAN_BE32(0x39c39c39)
};
  

you'll get an initializer element is not constant compile error. (Ref# 27099)

Workaround: Do one of the following:


Note: This affects only static initializers containing ENDIAN_*() expressions, and doesn't apply to any runtime use of these ENDIAN_*() macros.

Bessel functions
According to POSIX 1003.1, the Bessel functions — j0(), j1(), jn(), y0(), y1(), and yn() — should be declared in <math.h>. They currently aren't declared in any header, but the functions are in libbessel.a and libbessel.so. (Ref# 23554)

Workaround: Declare them in your program; for the correct prototypes, see the entries for these functions in the Neutrino Library Reference.

ELF64_R_INFO()
The definition of this macro is incorrect in <sys/elf.h>. It uses Elf32_Xword() instead of the Elf64_Xword() macro. (Ref# 40936)

Workaround: Edit the header file and change this line:

#define ELF64_R_INFO(s,t)	((((Elf32_Xword)(s))<<32) | ((Elf64_Xword)((t)&0xffffffff)))
  

to this:

#define ELF64_R_INFO(s,t)	((((Elf64_Xword)(s))<<32) | ((Elf64_Xword)((t)&0xffffffff)))
  
fork()
libmalloc
RPC Library (librpc.so, librpc.so.2, librpc.a, librpcS.a)
If all available memory is exhausted, the RPC library can potentially fault if a malloc() call fails during the first execution of either a clnt_broadcast() call or a rpc_broadcast() call. Memory corruption may occur if all thread-specific data keys are exhausted before the RPC library functions have been called. (Ref# 21945)
spawn()
On ARM targets with low-memory conditions, attempts to create a new process may result in an EINTR error instead of ENOMEM as might be expected. This happens when, during process creation, attempts to fault in the stack result in an out-of-memory condition, at which point a SIGBUS is delivered to the process, causing it to return EINTR. If the out-of-memory condition is detected before the stack is allocated, ENOMEM is returned. (Ref# 24406)
<stdio.h>
A duplicate declaration of vsnprintf() causes compile warnings. (Ref# 21880)
sysconf()
The value that sysconf( _SC_OPEN_MAX ) returns might not be correct if you've used the -F option to procnto to change the maximum number of file descriptors per process. (Ref# 16966)
tempnam()
The entry for tempnam() in the Neutrino Library Reference doesn't accurately describe how the function determines the directory portion of the temporary file's name. (Ref# 27332)

Workaround: See the entry for tmpnam(); this function and and tempnam() use the same method for determining the directory.


Note: The tempnam() function's behavior doesn't conform to POSIX.

Time zones
QNX Neutrino uses a nonstandard method of defining time zones that's difficult to keep up to date. We plan to replace it in a later release. (Ref# 44425)

Known issues: Startup

Core utilities

mkefs
Under Windows, if you redirect the output from mkefs to a file, the end-of-line characters will be DOS-style (CR, LF) instead of UNIX-style (CR). (Ref# 19065)

Workaround: Under Windows, use this syntax:

mkefs buildfile outputfile
  

instead of redirecting the output:

mkefs buildfile > outputfile
  
mkifs
Executables compiled with the -Nstacksize option and then included in images built using mkifs don't (by default) use the stacksize parameter. (Ref# 23573)

Workaround: Specify [+raw] in the build file for any executables that you compiled with the -Nstacksize option. For more information about the raw attribute, see the entry for mkifs in the Utilities Reference.

QNX_HOST, QNX_TARGET
The development environment variables (QNX_HOST, QNX_TARGET, etc.) aren't set if you have a login shell other than the default (sh). This environment is picked up automatically from /etc/profile.d/qnxsdk.sh but if SHELL is set to ksh, then /etc/profile looks for *.ksh in the directory instead of *.sh and finds nothing. (Ref# 24660)

Workaround: Copy /etc/profile.d/qnxsdk.sh to /etc/profile.d/qnxsdk.ksh.

rtc
To enable reading from the RTC on a machine with a ServerWorks chipset on it (observed on a SuperMicro SuperServer 8060), you must first set the OS date and then set the RTC from the OS date:
# date 200607191700
Wed Jul 19 17:00:01 EDT 2006
# rtc -s hw
  

(Ref# 26324)

startup-bios
Don't use the -x option on machines that don't support extended addressing, or else pci-bios won't start. (Ref# 40404)
tracelogger, traceprinter
slay
Trying to slay something on a node in a domain other than your own will fail. For example, if you're in domainX, and you try to slay something on node foo in domainY, you'll see this:
# slay -n foo.domainY process_name
slay: Unable to find process 'process_name'
  

(Ref# 29840)

use
If you specify both the -i and -s options, use displays only the information for the -s option. (Ref# 49624)

Known issues: Device drivers

Audio device drivers (deva-*)

Block-oriented drivers (devb-*)

devb-*
High-priority threads can get starved off by lower ones via devb-* because the filesystem uses sleepon_*() functions, which don't inherit priorities. (Ref# 2109)
devb-adpu320
Reading DVD-RAM causes devb-adpu320 to become blocked on a CONDVAR. (Ref# 19772)
devb-doc, devb-doc3, dformat, dformat3
The Disk On Chip drivers were provided by the vendor. If you run use -i on them, the state is given as Experimental. (Ref# 23101)
devb-aha8
You can't restart this driver on IBM PPC405 boards. (Ref# 16018)
devb-umass
The usage message says to use the devnn option to specify the USB address of the device. The correct name of the option is devno. (Ref# 24347)
devb-eide
DMA modes don't work on these drives:

(Ref# 41600)

Graphics drivers (devg-*)

Human interface device drivers (devh-*)

Network drivers (devn-*)

devn-asix.so
This driver doesn't support the 1000 MB/s interface of the Linksys Gigabit USB Adapter (model no. USB1000). (Ref# 38115)

Workaround: Force the driver to use speed and duplex settings that it supports (10 and 100 Mbit/s).

devn-i82544.so
If you use more than 64 Tx descriptors, the PPC version of the driver is inoperative. (Ref# 22848)

Workaround: We've temporarily changed the PPC version of this driver to use 64 Tx descriptors by default (on other targets, the default is 128). This may result in lost packets for high-throughput transmit operations.

devn-pcnet.so
devn-pegasus.so, devn-rtl8150.so
Slaying io-net with the devn-pegasus.so and devn-rtl8150.so drivers isn't always successful. (Ref# 28602)

Workaround: Use kill -9 instead to kill io-net.

devn-rtl8150.so
devn-smc9000
Not all IPv6 multicast protocols function properly with this driver. (Ref# 21720)
devn-tigon3.so
This network driver on the Dell PowerEdge 850 board will run only up to 100 Mbit/s, and not 1000 Mbit/s. Other boards work well at 1000 Mbit/s. (Ref# 39355)

USB drivers (devu-*)

Known issues: Filesystems

chkfsys
/dev/shmem
Large block writes to /dev/shmem are slower than in the last release. (Ref# 26280)
fs-ext2.so
If you try to delete a linked file or directory in a Linux Ext2 filesystem, you get a “Corrupted file system detected” error. (Ref# 50264)
fs-pkg
The fs-pkg filesystem isn't designed to let you use chmod or chown on “virtual” fs-pkg directories. (Ref# 9552)
fs-qnx4.so
A deadlock sometimes occurs during one of our benchmark tests. (Ref# 49288, 49636)

Flash filesystems & embedding

Known issues: IDE

The IDE contains the following known issues:

Known issues: General

Known issues: Application Profiler perspective

Known issues: System Profiler perspective

Known issues: Memory Analysis perspective

Known issues: System Information perspective

Known issues: System Builder perspective

Known issues: C/C++ development

Known issues: Team/CVS

Known issues: Debugging

Known issues: Code Coverage perspective

Known issues: Linux-hosted IDE

Known issues: Neutrino-hosted IDE

Known issues: Windows-hosted IDE

Known issues: Documentation

Known issues: Instant Device Activation

Known issues: I/O devices

io-usb

Known issues: Licensing

Known issues: Multicore processing

Known issues: Multimedia

soundfile.so, soundfile_noph.so
Loading these legacy plugins causes a SIGBUS error. (Ref# 21707)

Workaround: Use the -ae option to procnto to enable alignment fault emulation.

Multimedia TDK 1.0.1
If you install the Multimedia TDK 1.0.1, some files will be incompatible with QNX Momentics. (Ref# 39359)

Workaround: Do the following:

  1. Before you install the Multimedia TDK 1.0.1, back up the files listed below for for these targets:
    • $QNX_TARGET/armle
    • $QNX_TARGET/mipsle
    • $QNX_TARGET/ppcbe
    • $QNX_TARGET/shle
    • $QNX_TARGET/x86
  2. If you're on a self-hosted Neutrino system, also back up the versions of the files under /.
  3. Install the Multimedia TDK 1.0.1.
  4. Restore the files from the backup you made.

Here's the list of files that you need to back up before installing the TDK and restore afterward:

Known issues: Network protocols

npm-qnet.so
Redundant GNS servers have a window where service could be lost. If connectivity is lost to a gns process in server mode while it's acting as a redundant server, and while client gns processes running on other nodes are registering services, the server may become out of sync with the other redundant servers. (Ref# 20008)
npm-qnet-l4_lite.so
fs-cifs
fs-nfs2
fs-nfs3
fs-nfs3's exit status is always 255. (Ref# 38512)
fs-nfs2, fs-nfs3
fs-cifs, fs-nfs2, fs-nfs3
The documentation incorrectly implies that at least one server-export/mountpoint combination is required on the command line when you launch fs-cifs, fs-nfs2, or fs-nfs3. You can invoke the mount command later to add mountpoints. (Ref# 15446)
gns
nfsd
nfsd lets you access files only up to 16 subdirectory levels deep within the directory exported in the /etc/exports file. Deeper directory levels and files aren't accessible. (Ref# 40104)
slinger
When slinger is executing a CGI script and setting the environment variables to be passed to the script, the environment variable SERVER_ROOT is set to / instead of to the directory specified by HTTPD_SCRIPTALIAS. The actual current working directory of slinger is correct; it's just the environment variable that's wrong. (Ref# 20795)
tftp
rpcgen
This utility looks for the C preprocessor in the wrong place on QNX Neutrino hosts. (Ref# 8461)

Workaround: Create a symbolic link:

ln -s /usr/qnx632/host/qnx6/x86/usr/bin/qcc /usr/bin/qcc
  
npm-tcpip-v4.so
npm-tcpip-v4.so, npm-tcpip-v6.so
If a packet is smaller than the minimum Ethernet packet size, the packet may be padded with random data, rather than zeroes. (Ref# 21460)
npm-tcpip-v6.so
For IPv6, the TCP/IP stack could send an ICMP error to ourselves if we can't successfully solicit the address of the sender of an ICMP echo request. (Ref# 38465)
pppd
rcp
This utility sets its user ID to root. It was reported that you can overrun the source/target file argument buffers in the utility, giving yourself root access. Under QNX Neutrino, rcp spawns the cp utility for local file-copying operations; it's the cp utility that faults. When rcp spawns cp, it does so with the credentials of the user who launched rcp, rather than root's. (Ref# 22002)

Known issues: Photon

Starting Photon
When you start Photon, you might see a “Cannot attach mouse input report (error code2)” message on the console. It's a benign message that you can ignore. (Ref# 29662)
PT_CB_ACTIVATE and PT_CB_ARM
These callbacks don't work with PtText and PtNumeric. (Ref# 21608)

Workaround: For a PtText, add this code:

int raw_text_callback( PtWidget_t *widget, void *data, PtCallbackInfo_t
*cbinfo )
{
    PtSuperClassRawEvent( PtBasic, widget, cbinfo->event );
    return Pt_CONTINUE;
}
  

When you create a PtText widget, add this code:

PtRawCallback_t text_cb = { Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE,
  raw_text_callback };
…

PtSetArg( …, Pt_CB_RAW, &text_cb, Pt_LINK_INSERT );
… = PtCreateWidget( PtText, … );
  

You can use similar code for a PtNumeric widget.

PdGetOffscreenContextPtr()
This function leaks memory on MIPS hardware. (Ref# 8065)
ptermcs
This utility core-dumps when saving. The problem is in PxTerminalBuildCharsets(): if the “internal” charset is NULL but the “font charset” is specified, it builds a bad data structure that causes PxTerminalSaveCharsets() to crash. (Ref# 19568)
PhAB
PhAB for Windows
$HOME/.ph/phapps
Note that this file, which contains a list of the applications that you want Photon to launch automatically when it starts, must be executable. (Ref# 22196)
voyager
If you use voyager with vserver on a Malta board or any other platform that doesn't have a Floating Point Unit, voyager continually fails with a SIGFPE error when it tries to load a page. (Ref# 22404)

Workaround: Rebuild the OS image so that it uses floating-point emulation, by specifying the -fe option to procnto in the buildfile.

io-graphics
Alpha on PPC
If you use alpha drawing functions on PPC targets, and you draw an image to a memory context and blit it to the screen, the colors are incorrect. (Ref# 21458)

Workaround: Don't use a memory context, or draw to one memory context, blit to another memory context, and then blit to the screen.

phditto
If you run gdb over phditto, gdb hangs, because the Photon server spawned by phrelay inherits phrelay's set of ignored signals including SIGUSR1, which gdb relies on. (Ref# 24817)

Workaround: Launch pterm windows using pwm's Desktop Menu (press Alt-Enter or right-click on the desktop background) instead of using the Terminal button on the shelf. Only pterm windows started by shelf inherit the ignored SIGUSR1.

Another option is to write a wrapper around gdb to reset SIGUSR1.

Pt_ARG_SCROLLBAR_WIDTH
Setting this resource for a PtList or for a compound widget that includes a PtList has no effect. (PR 20431)

Workaround: Attach the following callback to the Pt_REALIZED resource of the list widget:

int
list_realized_cb( PtWidget_t *widget, ApInfo_t *apinfo,
                  PtCallbackInfo_t *cbinfo )
{
    PtGenListWidget_t *list = (PtGenListWidget_t*)widget;
    unsigned short      *width;

    // NOTE: Use the width that the user set in PhAB.
    PtGetResource( widget, Pt_ARG_SCROLLBAR_WIDTH, &width, 0 );

    // This code sets the actual sizes of scrollbar(s).
    if( list->scrollbar )
        PtSetResource( list->scrollbar, Pt_ARG_WIDTH, *width, 0 );
    if( list->hscrollbar )
        PtSetResource( list->hscrollbar, Pt_ARG_HEIGHT, *width, 0 );

    // This is a workaround to make the list widget
    // position (anchor) the scrollbars correctly (with the new size).
    PtSetResource( widget, Pt_ARG_SCROLLBAR_WIDTH, *width - 1, 0 );
    PtSetResource( widget, Pt_ARG_SCROLLBAR_WIDTH, *width, 0 );

    return Pt_CONTINUE;
}
  

If you're using a compound widget such as a PtCombobox, use this code:

int combo_realized_cb( PtWidget_t *widget, ApInfo_t *apinfo, 
                       PtCallbackInfo_t *cbinfo )
{
 PtGenListWidget_t *list;
 PtWidget_t   *wp = widget;
 unsigned short    *width, list_width;

 // NOTE: Use the width that the user set in PhAB.
 PtGetResource( widget, Pt_ARG_CBOX_BUTTON_WIDTH, &width, 0 );

 // Find the list widget in the combo
 while( (wp = PtWidgetFamily( widget, wp )) ) {
  if( PtWidgetIsClass( wp, PtList ) ) {
   list = (PtGenListWidget_t*)wp;
   break;
  }
 }

 if( !wp )
  return Pt_CONTINUE;

 list_width = *width + 2;

 // This code sets the actual sizes of scrollbar(s).
 if( list->scrollbar )
     PtSetResource( list->scrollbar, Pt_ARG_WIDTH, list_width, 0 );
 if( list->hscrollbar )
     PtSetResource( list->hscrollbar, Pt_ARG_HEIGHT, list_width, 0 );

    // This is a workaround to make the list widget 
    // position (anchor) the scrollbars correctly (with the new size).
    PtSetResource( wp, Pt_ARG_SCROLLBAR_WIDTH, list_width - 1, 0 );
    PtSetResource( wp, Pt_ARG_SCROLLBAR_WIDTH, list_width, 0 );

 return Pt_CONTINUE;
}
  
helpviewer

Known issues: Host-specific

QNX Neutrino self-hosted

qconfig
There are two versions of qconfig installed in three places on self-hosted Neutrino systems:

(Ref# 42105)

Workaround: Do the following:

  1. Log in as root.
  2. cp $QNX_HOST/usr/bin/qconfig /usr/bin/qconfig
  3. rm $QNX_TARGET/x86/usr/bin/qconfig

Windows hosts

echo.exe
On Windows, the QNX-provided echo.exe interprets the Windows \ separator as an escape character. As a result, environment variable settings won't work if you use \ as a path separator; use / instead. (Ref# 19924)
PATH and quotation marks
Certain programs (e.g. Norton Ghost) add directories inside double quotation marks (e.g. ...;"c:\Program Files\Norton Ghost\";...) to your PATH environment variable. This causes the Cygwin spawn() function to fail, which in turn causes cp to fail when called by ln-w. (Ref# 20046)

Workaround: Modify your PATH environment variable and remove any quotation marks.

MAKEFLAGS
Microsoft Visual Studio also uses the MAKEFLAGS environment variable, but in a much different way than QNX Neutrino does. The result is that Microsoft Visual Studio no longer works after you've installed QNX Momentics.

Workaround: If you want to work with Microsoft Visual Studio (MSVS) after installing QNX Momentics on the same system, do the following:

  1. Open a command window and run cmd.
  2. Type set.
  3. Find the value for MAKEFLAGS and save it.
  4. Type set MAKEFLAGS.
  5. Do your MSVS work.
  6. To work with QNX Momentics again, type:

    set MAKEFLAGS=saved_makeflags_value

Permissions
If you don't have permission to write files in the top-level directory of the C drive, you won't be able to run certain tools, such as bindres and usemsg, which are needed for building PhAB applications. On Windows Vista, you also have to disable User Account Control, as described below. (Ref# 21849, 49312)

On Windows Vista (if you have write permission in the top-level directory of the C drive, and you've disabled UAC), you can build PhAB applications from the command line and from the IDE, but not from standalone PhAB. (Ref# 44260, 50061)

User Account Control (UAC)
Windows Vista includes a new account policy, called User Account Control (UAC), that will impact various administrative features, such as being able to create and store files in a temporary directory (tmp). This directory is used by various applications, such as CVS and the split command, and various Photon applications. To successfully run these applications on a computer running Windows Vista, you must have administrator privileges and disable UAC. (Ref# 44027)

Workaround: To disable UAC on your Windows Vista configuration:

  1. Launch MSCONFIG by from the Run menu. (When you click on the launch button — the one with the windows logo commonly in the bottom left corner — the Run menu is an editable text bar with the string Start Search. Type msconfig and then press Enter.)
  2. Click on the Tools tab. Scroll down until you find Disable UAC, and then click that line.
  3. Press the Launch button.
  4. A cmd window will open. When the command is done, you can close the window.
  5. Close msconfig, and then restart your computer.

You can reenable User Access Control by selecting the Enable UAC line and then clicking the Launch button.


Caution: Disabling UAC bypasses some of Vista's security features.

BSPs
For Windows XP, the location that the BSP file for the IDE installs into is $QNX_CONFIGURATION/qconfig_directory, and it is write-protected for a default user. Consequently, subsequent updates to BSPs aren't permitted in this location because of permission errors under Windows Vista configurations if the user doesn't have administrative permissions. (Ref# 44668)

Workaround: Modify your user permissions. For instructions about changing these permissions, see the steps in the workaround for the problem (Ref# 44027) above.

QNX utilities
The Windows installation includes various executables that have the same name as some QNX utilities, such as find, sort, and split. By default, Windows places the path to the Windows executables at the beginning of the Windows PATH environment variable, and the QNX executables appear afterward. This means that when you run these utilities from the command line, instead of using the QNX version, the PATH variable uses the Windows version. (Ref# 44457)

Workaround: If you want to use the QNX utilities for find, sort, and split from a command prompt or shell prompt, specify a fully qualified path to any of the QNX executables.

ctags

Linux hosts

Getting started with the documentation

After you've installed your development suite, you'll find an extensive set of online documentation in HTML format:

The “roadmap” page contains links to the various HTML booksets that accompany the OS (e.g. System Architecture, QNX Neutrino Programmer's Guide, Library Reference, Utilities Reference, etc.).


Note:
  • On Neutrino hosts, the QNX Momentics Development Suite for x86 Targets doesn't include documentation in the IDE's help system, to help reduce the size of the download.
  • The online documentation also includes the installation and release notes. For the most up-to-date version of these notes, go to our website, www.qnx.com, log into your myQNX account, and then go to the Download area.

Technical support

If you have any questions, comments, or problems with a QNX product, please contact Technical Support. For more information, see the How to Get Help chapter of the Welcome to QNX Momentics guide or visit our website, www.qnx.com.

List of fixes

This section lists the corrections and changes made since QNX Momentics 6.3.0 SP3.

Documentation fixes

Change Ref #
The System Architecture guide no longer refers to io-cam, which hasn't yet been implemented. 15829
The entries in the Utilities Reference indicate which drivers are shipped only in the BSPs that need them. 18023
The Writing an IPL chapter of Building Embedded Systems now describes image_paddr as The physical address of the image, which can be in ROM or RAM, depending on the type of image. 22172
For mkefs, mketfs, and mkifs, a perms attribute of “*” results in permissions of 0666 for inline files. 22371
We've updated the list of supported adapters in the entry for devb-ncr8 in the Utilities Reference. 22482
We've updated the instructions for calibrating a touchscreen in the entry for calib in the Utilities Reference. 23263
The usbd_setup_control() function isn't implemented, so the USB DDK Developer's Guide now tells you to use usbd_setup_vendor() instead. 23284
The System Architecture guide now mentions that sempahores don't support priority inheritance. 23430
The Neutrino User's Guide now says that the $HOME/.ph/shelf/shelf.cfg file is created when you first modify your shelf's configuration. 24077
The entry for startup-bios in the Utilities Reference now describes the -I option. 24418
You should always specify the -r option to a devf-* driver, unless you're trying to debug a flash corruption issue or you don't have the time to repair any damage. 26561
The Writing a Resource Manager chapter of the Neutrino Programmer's Guide now warns that if multiple threads in the same client perform simultaneous operations with select() and ionotify(), notification races may occur. 27086
We corrected the description of the LOSES_TX_INTR flag in the Character DDK Developer's Guide. 27484
The entry for devc-sersci in the Utilities Reference now lists the FIFO and RTS trigger values for the SH7760, 7770, and 7780. 27945
The Compiling and Debugging chapter of the Neutrino Programmer's Guide now has a section on using the __QNX__ and __QNXNTO__ preprocessor symbols to add QNX- or Neutrino-specific code to an application. 29243
The stty utility doesn't support the lkhflow and lksflow options; we've corrected the entry for stty in the Utilities Reference. 29497
The Power Management User's Guide now says that the default action (if the unlink() function is not overridden) is to allow the unlinking. 29762
We've filled in the “Returns” section for the callbacks in the Power Management User's Guide. 29763
In the USB DDK Developer's Guide, we corrected the description of EPROGMISMATCH in the documentation for usbd_connect() and added the return code of EOK for usbd_open_pipe(). 29850
The Adaptive Partitioning User's Guide now says that the server (not the client) sets _NTO_CHF_FIXED_PRIORITY to prevent partition inheritance. 29874
You don't need I/O privileges to use the result of the mmap_device_memory() function. 30019
We've expanded the sections about priority inheritance for mutexes and messages in the QNX Neutrino Microkernel chapter of the System Architecture guide. 37364
On ARM platforms, you can't restart devf-ram with a different size from what you originally specified; we've updated the documentation for devf-ram and shm_ctl(). 38256
The documentation for devu-prn now states that this driver also runs on ARM, MIPS, and PPC targets. 38301
Regardless of your terminal settings specified, the use utility includes a line break after 80 characters. 38346
The documentation for mmap_device_memory() now mentions that the PPC eieio (Enforce In-Order Execution of I/O) command is defined in <ppc/inout.h>. 38395
The Process Manager chapter of the System Architecture guide now includes a section on ordering mountpoints. 38426
The description of socket() now refers to the examples of setting the SOCK environment variable in the Neutrino User's Guide. 38524
The Adaptive Partitioning User's Guide now states that when you create a partition, its budget comes from its parent's budget, not from the System partition's. 38609
The entry for devb-umass in the Utilities Reference now describes the csw_ignore option. 38634
We've corrected the description in the Neutrino Library Reference of what the clock() function returns. (Ticket ID 73133) 38645
The num_ed and num_td options to devu-ehci.so, devu-ohci.so, and devu-uhci.so are independent of the nosmm option. 38667
The entries for devn-pcnet, devn-rtl, and devn-pegasus in the Utilities Reference now describe the probe_phy option. 39152
We've corrected the example of looping for the usbd_attch() function in the USB DDK Developer's Guide, so that it loops over all the buses. 39308
We've updated the descriptions of the flags and rtype arguments to the descriptions of the usb_setup* functions in the USB DDK Developer's Guide. 39357
The documentation for devf-generic now mention that you might have to create a custom variant of it for your embedded design. 39584
The entry for devu-prn in the Utilities Reference now describes the -m option, which sets the maximum size of the output buffer. 39602
The documentation for snd_pcm_plugin_read() and snd_pcm_plugin_write() in the Audio Developer's Guide now give the correct description of an error of -EINVAL. 39753
The documentation for mkifs now describes the raw.boot, binary.boot, srec.boot, and elf.boot bootfiles. 39923
The Conventions for Makefiles and Directories chapter of the Neutrino Programmer's Guide now includes more details about the GNU configure. 40627
The ARM Memory Management appendix of the Neutrino Programmer's Guide now has more information about allocating memory on ARM targets. 40865
The USB DDK Developer's Guide now describes the usbd_topology_ext() and usbd_hcd_ext_info() functions. 40883
The Neutrino User's Guide now mentions that you can't pass arguments to an alias, but you can to a shell function. 40921
We've added a note about I2C drivers to the QNX Neutrino Technotes. 40947
We've expanded and corrected the description of show_vesa in the Utilities Reference. 41020
The entries in the Utilities Reference now indicate if the given utility needs to have the setuid or setgid permission set. 41074
The System Architecture guide now mentions that you can assign names to threads. 41406
The Utilities Reference now has an entry for devc-con-hid. 41834
The entry for diskboot in the Utilities Reference now points out that using the -o option doesn't cause the specified command to be started; it merely specifies the options to use if the command is started. 41884
The documentation in the IDE is now arranged into plugins, so links between the IDE User's Guide and other documents now work again. 41911
The entry for devi-hid in the Utilities Reference no longer refers to calib; you need a calibration file only for touchscreens. 42252
The Utilities Reference now directs you to the Phindows Connectivity User's Guide for information about phindows. 42339
The Neutrino User's Guide now says that on startup, ksh runs /etc/profile if it's readable; this file doesn't need to be executable. 42679
We've added a description of the SPI (Serial Peripheral Interface) framework to the QNX Neutrino Technotes. 43487
The “Priority range” section of the Programming Overview chapter of the Neutrino Programmer's Guide now gives the range of priorities as 1-255. 43655
In the Network DDK User's Guide, we corrected the name and returned values of MDI_DeRegister() and MDI_SetAdvert(), and we added MDI_Register() to the entry for MDI_Register_Extended(). 43682
The documentation for mkifs now describes the main bootfiles (e.g. bios_nokbd.boot). 43969
The Printing chapter of the Neutrino User's Guide now mentions if the system crashes, you might have to manually delete the lpd.lock file. 43971
We corrected the information in Building Embedded Systems about the startup_info_mem and startup_info_mem_extended structures. 44013
We corrected the example of starting Qnet with CRC checking in the Neutrino User's Guide. 48028