![]() |
![]() |
![]() |
![]() |
Once you've installed the QNX Momentics development suite, you can download processor-specific Board Support Packages (BSPs) from our website, http://www.qnx.com/. These BSPs are designed to help you get Neutrino running on certain platforms.
A BSP typically includes the following:
The directory tree structure looks like this:

BSP directory tree.
You can build a BSP from the source code or the binary components contained in the BSP package. A BSP package is available for QNX Neutrino, Windows, Solaris, or Linux hosts.
If you're building the BSP OS image from source code on the host, you can:
After your BSP is installed, you'll find the .zip file here:
$QNX_TARGET/usr/src/archives/qnx
To build a BSP OS image from the source code using the command line:
![]() |
The archive will extract to the current directory, so you should
create a directory specifically for your BSP.
For example: mkdir /home/joe/bspname |
unzip $QNX_TARGET/usr/src/archives/qnx/bspname.zipThere will be a script in the BSP root named "setenv.sh" which will configure your environment to build the BSP.
![]() |
On Windows, you must run the Bash shell (bash.exe) before you run . ./setenv.sh. |
. ./setenv.sh
Now you're ready to make the BSP.
make
To build a BSP, you must first import the source code into the IDE. When you import the BSP source, the IDE creates a System Builder project.
To import the BSP source code:
![]() |
If you want to add more packages to the list, click the Select Package... button and select the .zip archive you want. |
If you answer Yes, the IDE will start the build process. If you decide to build at a later time, you can do a Rebuild All from the main Project menu when you're ready to build.
![]() |
When you import a QNX BSP, the IDE opens the QNX BSP Perspective. This perspective
combines the minimum elements from the C\C++ Development Perspective and the System Builder
Perspective.
For more information, see the IDE User's Guide in your documentation set. (Within the IDE itself, go to: Help-->Help Contents-->QNX Documentation Roadmap). |
If you're building a BSP OS image from the binary components on the host, you can use:
After your BSP is installed, you can build the BSP OS image from the command line:
$QNX_TARGET/<processor type>/boot/build
where
processor type is the BSP board type, e.g. ppcbe.
mkifs -vvvv BSP-buildfile-name OS-image-name
For example:
mkifs -vvvv integrator.build integrator.ifsNote that after you enter the command, the BSP OS image is generated and the contents of the buildfile appear in the display terminal.
To build a BSP OS image from the binary components in the IDE:
You can optionally create a working set in order to select from a list of BSP projects.
To create a working set:
Every BSP includes a buildfile that generates an OS image that will run on the board it was written for. By default the buildfile resides in the startup source directory and is named build. After you make the BSP, the buildfile is copied into the images directory.
All boards will have some devices, whether they're input, serial, flash, or PCI. This example lists some of the devices supported on a SystemH board and the command lines needed to start them:
| Device: | Command: |
|---|---|
| SH7751[R] PCIC (PCI) | pci-systemh |
| SH7751 SCI/SCIF (serial) | devc-sersci -b57600 -c41670000/16 -e scif & |
| SuperIO UART0,1 | devc-ser8250 0x130203f8,0x7 0x1302f8,0x7 |
| SuperIO Kbd/PS/2 mouse | devi-hirun ps2 mousedev -i7 -p0x13-2--6- kbd kbddev -r -i7 -p0x13020060 |
| Ethernet, SMC 91C110 | devn-smc9000.so, ioport=0x13010300, irq=7, mac=xxxxxxxxxxxx |
| Flash driver | devf-systemh |
The BSP is contained in an archive named after the industry-recognized name of the board and/or reference platform supported by the BSP. In our documentation, we refer to the directory where this archive has been installed as the bsp_working_dir.
This directory contains the "meat" of the BSP -- the source hierarchy. The following sub-directories must exist here:
The images subdirectory is where the resultant boot images are placed. It contains (as a minimum) the Makefile needed to build the image(s). Other files that could reside in this directory include:
Once the BSP is built, all of the files from the prebuilt directory are copied into the install directory, maintaining the path structure.
In order to handle dependencies, the libraries, headers, and other files found in the ./prebuilt directory need to be copied correctly to your ./install directory. To do this, you'll need to run make at the bsp_working_dir directory level.
The layout of the prebuilt directory is as follows:
# cd /bsp_working_dir # ls prebuilt/ . .. ppcbe usr
The "root" of the prebuilt directory requires the same structure as the system root. Recursing into the ppcbe and usr directories mirrors that of /.
![]() |
All processor-specific binaries are located under the directory named for that processor type. |
For this example, we'll look at the ppcbe directory:
# ls prebuilt/ppcbe/ . .. lib sbin # ls prebuilt/ppcbe/lib/ . libdrvrS.a .. libstartup.a # ls prebuilt/ppcbe/sbin . .. devb-eide # ls prebuilt/usr . .. include # ls prebuilt/usr/include/ . .. drvr ppc sys # ls prebuilt/usr/include/drvr . .. eth.h mdi.h support.h # ls prebuilt/usr/include/ppc . .. util.ah # ls prebuilt/usr/include/sys . dcmd_io-net.h platform.h .. nic.h types.h
The install directory gets populated at the beginning of the BSP build process. All the files in the prebuilt directory are copied, then all generated binaries are installed here as they're compiled The files stored in the install directory are taken first when mkifs executes.
Before you make any components for your particular board, you must first make the BSP sources at the top level. For example, suppose you want to build the network source for the Camelot-Biscayne BSP. Initially, you must build everything from the root of the BSP, like this:
cd bsp_working_dir/sh/biscayne make
This will build everything under ./src and will set up the ./install directory correctly.
After this initial build is complete, you should then be able to build any of the sources individually.
![]() |
Remember that if you change a library or header, make sure it gets copied to your ./install directory. |
The source to all components in the BSP is stored here.
![]() |
For more information, see the IDE User's Guide in your documentation set. (Within the IDE itself, go to: Help-->Help Contents-->QNX Documentation Roadmap.) |
Once you've built an OS image, you'll need to transfer it to your board.
The IDE lets you communicate with your target and download your OS image using either a serial connection, or a network connection using the Trivial File Transfer Protocol (TFTP). If your board doesn't have a ROM monitor, you probably can't use the download services in the IDE; you'll have to get the image onto the board some other way (e.g. JTAG).
There are several ways to transfer an OS image:
| To: | Use the: |
|---|---|
| Load an image from your network (e.g. TFTP) | Network |
| Load an image serially (e.g. COM1, COM2) | ROM monitor |
| Burn both the IPL and the OS image into the flash boot ROM, then boot entirely from flash. | IPL and OS |
| Burn an IPL (Initial Program Loader) into the flash boot ROM, then load the OS image serially. | IPL and boot ROM |
| Generate a flash filesystem, and then place various files and utilities within it. | Flash filesystem |
The method you use to transfer an OS image depends on what comes with the board. The BSP contains information describing the method that you can use for each particular board. Each board will have all or some of these options for you to use.
To load an image serially:
To transfer a file using the Serial Terminal view:
The flash filesystem drivers implement a POSIX-like filesystem on NOR flash memory devices. The flash filesystem drivers are standalone executables that contain both the flash filesystem code and the flash device code. There are versions of the flash filesystem driver for different embedded systems hardware as well as PCMCIA memory cards.
The naming convention for the drivers is devf-system, where system describes the embedded system. For example, the devf-800fads driver is for the 800FADS PowerPC evaluation board.
To find out what flash devices we currently support, please refer to the following sources:
The flash filesystem drivers support one or more logical flash drives. Each logical drive is called a socket, which consists of a contiguous and homogeneous region of flash memory. For example, in a system containing two different types of flash device at different addresses, where one flash device is used for the boot image and the other for the flash filesystem, each flash device would appear in a different socket.
Each socket may be divided into one or more partitions. Two types of partitions are supported:
A raw partition in the socket is any partition that doesn't contain a flash filesystem. The flash filesystem driver doesn't recognize any filesystem types other than the flash filesystem. A raw partition may contain an image filesystem or some application-specific data.
The flash filesystem uses a raw mountpoint to provide access to any partitions on the flash that aren't flash filesystem partitions. Note that the flash filesystem partitions are available as raw partitions as well.
A flash filesystem partition contains the POSIX-like flash filesystem, which uses a QNX-proprietary format to store the filesystem data on the flash devices. This format isn't compatible with either the Microsoft FFS2 or PCMCIA FTL specification.
The flash filesystem allows files and directories to be freely created and deleted. It recovers space from deleted files using a reclaim mechanism similar to garbage collection.
The flash filesystem supports all the standard POSIX utilities such as ls, mkdir, rm, ln, mv, and cp. There are also some QNX Neutrino utilities for managing the flash filesystem:
The flash filesystem supports all the standard POSIX I/O functions such as open(), close(), read(), and write(). Special functions such as erasing are supported using the devctl() function.
In the case of the flash filesystem source, typing make generates the flash filesystem binary. Normally, you won't need to remake the flash filesystem driver unless you've changed the size or configuration of the flash on the board -- this can include the number of parts, size of parts, type of parts, interleave, etc.
![]() |
When an IPL/IFS (image filesystem) image is combined, you'll need to offset the beginning of the flash filesystem by at least the size of the IPL and IFS. For example, if the combined IPL/IFS image is loaded at offset 0 on the flash, to avoid overwriting the IPL and IFS, the flash filesystem must begin at an offset of the IPL/IFS image size +1. If it doesn't begin at an offset of the IPL/IFS image size +1, you'll need to create a partition. |
Regardless of which BSP you're working with, the procedure requires that you:
![]() |
The following example applies specifically to the Biscayne board, which can be booted from DMON or flash. |
devf-generic -s0xe8000000,32M &
devf-generic -s0x0,32M
You should now see the following entry under /dev:
/dev/fs0p0
flashctl -p/dev/fs0 -ev
flashctl -p/dev/fs0p0 -f
slay devf-generic
devf-generic &
You should now see the following entries:
| Entry | Description |
|---|---|
| /dev/fs0p0 | OS image (32M) |
| /dev/fs0p1 | Flash filesystem partition (32M) |
You can test Neutrino simply by executing any shell builtin command or any command residing within the OS image. For example, type:
ls
You'll see a directory listing, since the ls command has been provided in the default system image.
This section covers the following:
Before you configure Photon to run on your embedded system, we recommend that you use the information provided at the end of this section to construct a trial embedded Photon environment on a self-hosted PC.
At the end of the section, you'll find sample files that you can use. If your PC doesn't have a standard keyboard, msoft mouse, or a video card supported by the drivers used in these examples, you'll have to modify the examples so that they'll work in your environment.
When you run Photon in a desktop environment, you simply type ph to run a script that does all the work for you. This script:
Once Photon is started, you run the applications you want using either the window manager or Photon shelf manager.
In an embedded environment, you'll need to perform all these steps yourself manually. This has many benefits, because it lets you predefine the minimum files needed for your system and exactly how each driver/application will start.
Here's an outline of the steps required to boot directly into Photon with your application(s) running.
Each of these steps requires certain files to be installed in your target system. By predetermining exactly what graphics hardware you have and what fonts your application needs, you can keep the number of files (and required disk space) to an absolute minimum.
We'll go through all the steps in detail and discuss the files needed for each step. At the end of this process, you should know exactly what Photon files you'll need to run your embedded application.
The PHOTON_PATH environment variable is intended to hold the base directory of the installation. By default, this directory is /usr/photon. This location is expected to hold at least the following subdirectories:
You should set the PHOTON_PATH environment variable:
export PHOTON_PATH=/usr/photon
If you don't need to pass any command-line arguments to the Photon server, you can start it as follows:
Photon &
![]() |
If your embedded environment has a touchscreen or pen input device, you can
adjust the input values for pointer events by specifying the -D,
-R, and -U options. For example, to prevent
random changes in position because the size of a finger press is
larger than a pixel, specify the -U option.
For more information, see Photon in the QNX Neutrino Utilities Reference. |
The server must be located in the current PATH and you must define the path before running the command. In QNX Neutrino, this path is /usr/photon/bin. For example:
export PATH=:/bin:/usr/bin:/usr/photon/bin
![]() |
If your boot image is too large because you've included Photon or other
executables, you can mount a filesystem, wait for it to appear, and then
load the executables from a filesystem at boot time.
For more information, see
mkifs
in the QNX Neutrino Utilities Reference.
If you do include any of the Photon executables in your boot image, you must also include /usr/photon/bin in MKIFS_PATH. |
/usr/photon/bin/Photon
Normally in a desktop environment, you use the inputtrap utility to automatically generate the correct command line and to invoke the appropriate devi-* driver. For example:
kbd fd -d/dev/kbd msoft
is the output from the inputtrap command which identifies the input device as a Microsoft keyboard and invokes the command to run the correct device driver.
You typically run inputtrap because you don't know in advance what the appropriate command line should be.
In an embedded system, the input devices are often found at unusual locations, are incapable of PnP identification, or are simply not supported by an existing devi-* driver. In addition, the inputtrap utility tends to be quite large and could waste precious storage and memory in a constrained environment. For these reasons, you typically specify the command line to the devi-* driver manually. (You can temporarily install inputtrap and use it to generate the correct command line.)
You can customize the input drivers by using the Input Driver Development Kit (Input DDK). For example, you can change the size of the memory footprint, or you can create a custom module to support new devices.
The appropriate devi- driver in /usr/photon/bin
When building an embedded system, you need to make several decisions about the level of font support, including which fonts you need, and whether or not you need scalable fonts.
The first step is to decide which fonts you need:
Check the browser's configuration to see which fonts are expected, and use those fonts, modifying the configuration to reflect what you have installed, or use the fontmap file to map them at runtime.
You can map, or substitute, font names by using the fontmap file, or the Mappings section of the fontadmin. For more information, see those entries in the Utilities Reference.
You can configure the fonts on the embedded system itself, but it's easier to use the development system to configure the fonts for the embedded system and assemble the font data and configuration files in the appropriate Embedded File System (EFS) build image directory.
![]() |
You should use the phfont.so io-graphics plugin for font manager services. This plugin offers better performance, with no noticeable impact on system resources. |
For example, suppose the root directory of this image is /usr/phembed (the real pathname depends on your development environment).
Change your current directory to be the root of your build subdirectory:
export PHEMBED_DIR=/usr/phembed cd /usr/phembed
Copy /etc/system/config/font-traplist to the same location in the embedded system:
cp /etc/system/config/font-traplist etc/system/config/font-traplist
Create a font repository for your embedded system. The phfont.so plugin requires that the font repository reside in /usr/photon/font_repository. For example:
mkdir -p /usr/photon/font_repository
Copy the necessary font files into the build image framework for collection by mkefs:
cp font_filename usr/photon/font_repository
(Repeat for each font)
cp /usr/photon/font_repository/font* usr/photon/font_repository cp /usr/photon/font_repository/mappings usr/photon/font_repository
This example creates an initial configuration and copies any font files into the specified target directory. Options may be supplied through the fontopt configuration file. For information about the format of this configuration file, see the documentation for phfont.
To change mappings, invoke fontadmin:
fontadmin -c usr/photon/font_repository -d usr/photon/font_repository
Run the embed_font script to copy the font system binaries and associated shared libraries:
embed_font /usr/phembed
If the target fails to start the font manager:
The Photon graphics subsystem is started by running io-graphics. Here are some sample invocations:
io-graphics -g640x480x8 -dldevg-vga.so -P/usr/photon/palette/vga4.pal io-graphics -g1024x768x16 -dldevg-vesabios.so io-graphics -g1024x768x16 -dldevg-rage.so -d0x1002,0x4755 -I0
Here's what the options mean:
For more information about io-graphics, see its entry in the QNX Neutrino Utilities Reference.
This step is optional if only a single application is used, or if your embedded system doesn't require the services provided by the window manager. The workspace configuration file ($HOME/.ph/wm/wm.cfg) may be modified dynamically using the pwmopts. Alternatively, nondefault options may be set with command-line options or through the PHWMOPTS environment variable.
The personalized PWM menu ($HOME/.photon/wm/wm.menu), if used, may pose a problem if commands are given as absolute pathnames (unqualified command names should be portable across systems, provided that the PHOTON_PATH environment variable is consistent). The standard PWM menu invokes all commands from $PHOTON_PATH/bin. For embedded systems, note that you can disable this menu completely by using the -W option to pwm.
/usr/photon/bin/pwm
If your application is a single executable and doesn't require the window manager, then you can link your application static -- you won't need the Photon shared library.
If you need the window manager or have more than one Photon program running, then it's best to use the Photon shared library.
Your application files.
If your application needs the Photon shared library:
/usr/lib/libph.so
![]() |
The libraries in /usr/photon/lib are provided for runtime compatibility with Photon for QNX Neutrino 6.0 (x86 only). The libraries for QNX Neutrino 6.1 and newer are located in /usr/lib. |
The following are observations that some customers have encountered when moving Photon to an embedded system.
By default, mkifs strips Photon resource names from executable files. To prevent this, specify the +raw attribute for all Photon Application Builder applications.
The following flash filesystem properties will affect how you configure Photon:
$(ABOBJ) $(MYOBJ) $(LD) $(LDFLAGS) $(ABOBJ) $(MYOBJ) -M -o mine usemsg mine ../Usemsg phabbind mine $(ABMOD)
to:
$(ABOBJ) $(MYOBJ) $(LD) $(LDFLAGS) $(ABOBJ) $(MYOBJ) -M -o mine usemsg mine ../Usemsg phabbind mine.res $(ABMOD)
You'll also need to export the AB_RESOVRD path variable if the resource records aren't in the same directory as the executables. This avoids searching the directory containing the executables.
![]() |
The config file routines aren't compatible with the flash filesystem. |
Many embedded systems lack components that are typical on a desktop machine. Here are a few items to watch for:
Here are some miscellaneous considerations:
Photon -D1000 &
The example described below is of an x86 buildfile in Photon. Note that you can also import a buildfile into the System Builder in the IDE. See the IDE User's Guide for more detail. A Photon system can be built with the following minimal capabilities:
Embedding Photon requires defining the required:
The following binaries are required:
The following libraries are required for the binaries listed above: (Note that libc.so is not listed.)
Some applications explicitly load a font in the source code. When this is the case, you'll need to install the font on your target system. If the application standardizes on a certain family/style of fonts, then the number of fonts needed can be reduced and possibly mapped to other fonts.
You can create a custom font directory for an embedded system that has no particular font needs. The process is as follows:
mkdir /tmp/font_repository cd /tmp/font_repository
cp /usr/photon/font_repository/phcursor.phf ./ cp /usr/photon/font_repository/pcterm*.phf ./ cp /usr/photon/font_repository/tt2001m_.ttf ./ cp /usr/photon/font_repository/tt2002m_.ttf ./ cp /usr/photon/font_repository/tt2003m_.ttf ./ cp /usr/photon/font_repository/tt2004m_.ttf ./ cp /usr/photon/font_repository/tt2009m_.ttf ./ cp /usr/photon/font_repository/tt2011m_.ttf ./ cp /usr/photon/font_repository/font* ./ cp /usr/photon/font_repository/mappings ./
mkfontdir -d ./
![]() |
Some versions of Photon have a bug in the fontdir file. You may
have to edit the fontdir file manually. Make sure the
phcursor line is as follows:
phcursor,.phf,Photon Cursor,0,,E900-E921,Np,32x32,3K |
term = pcterm ? = primasansbtsThis command maps the terminal fonts to pcterm and maps all other fonts to the primasansbts command included in the fontdir file.
You'll also need configuration files in your system to allow the devi-hirun input driver to function. At a minimum you'll need the following directory and configuration file for mapping an English keyboard:
/usr/photon/keyboard/en_US_101.kbd
If you require other languages, you can find entries for them in the supported keyboard files:
/usr/photon/keyboard
Now that all the pieces are ready, you can create a boot image capable of running Photon. Note that the font repository you created is included in this image as:
/usr/photon/font_repository
This image also contains some debug services that enable you to access the system via a serial port.
The easiest way to test the image generated from this build file is to install it as /.altboot on an x86 QNX Neutrino 6.3 self-hosted installation.
For details on how this file was generated and how it may be further optimized, please refer to the Photon in Embedded Systems appendix to the Photon microGUI for QNX Neutrino Programmer's Guide section in the QNX Momentics Help Documentation.
For details on how buildfiles work, please refer to the help documentation for mkifs in the QNX Neutrino Utilities Reference in the QNX Momentics Help Documentation.
This embedded Photon 6.3 buildfile for x86 has a VESA2-compliant video card and is only an example of a working embedded Photon system.
![]() |
In a real buildfile, you can't use a backslash (\) to break a long line into shorter pieces, but we've done that here, just to make the buildfile easier to read. |
[virtual=x86,bios +compress] .bootstrap = {
startup-bios -v
PATH=:/proc/boot:/usr/bin:/bin:/usr/photon/bin
LD_LIBRARY_PATH=:/proc/boot:/usr/lib:/lib:/lib/dll \
PHOTON_PATH=/usr/photon procnto -v
}
[+script] .script = {
procmgr_symlink ../../proc/boot/libc.so.2 /usr/lib/ldqnx.so.2
display_msg Welcome to QNX Neutrino 6.3 on an x86 platform with Photon
slogger &
pipe &
display_msg Starting PCI
pci-bios
waitfor /dev/pci 10
display_msg Starting Serial
devc-ser8250 -e &
reopen /dev/ser1
SYSNAME=nto
TERM=qansi
PHOTON=/dev/photon
PATH=:/proc/boot:/usr/bin:/bin:/usr/photon/bin
LD_LIBRARY_PATH=:/proc/boot:/usr/lib:/lib:/lib/dll
PHOTON_PATH=/usr/photon
PHOTON=/dev/photon
PHFONT=/dev/phfont
HOME=/
display_msg Starting Photon
Photon
waitfor /dev/photon 10
display_msg Starting Input
devi-hirun kbd kbddev ps2 mousedev &
display_msg Starting Graphics
io-graphics -dvesabios photon,xres=1024,yres=768,bitpp=16,refresh=60 -pphoton
waitfor /dev/phfont 10
display_msg Starting Window Manager
pwm &
bkgdmgr &
devc-pty &
display_msg Starting Terminal
pterm /proc/boot/ksh &
# debug shell on /dev/ser1 at 57600
[+session] ksh
}
[type=link] /bin/sh = /proc/boot/ksh
[type=link] /dev/console = /dev/ser1
[type=link] /tmp = /dev/shmem
# standard libs
libc.so
libm.so
# photon libs
libph.so
libAp.so
libphexlib.so
libphimg.so
libjpeg.so
pi_io_jpeg.so
# io-graphics libs
gri-photon.so
libphrender.so
libgri.so
libdisputil.so
libffb.so
# graphics driver
devg-vesabios.so
/etc/system/config/crtc-settings = /etc/system/config/crtc-settings
/usr/photon/palette/default.pal = /usr/photon/palette/default.pal
# font libs
/lib/dll/font/ttfFFcore.so = /lib/dll/font/ttfFFcore.so
/lib/dll/font/PHFcore.so = /lib/dll/font/PHFcore.so
libfontharnessutils.so
libfontutils.so
libblkcache.so
libFF-T2K.so
libFF-T2K-cache.so
libFF-T2K-fm.so
libfont.so
phfont.so
# font config
/usr/photon/font_repository/tt2009m_.ttf = /usr/photon/font_repository/tt2009m_.ttf
/usr/photon/font_repository/phcursor.phf = /usr/photon/font_repository/phcursor.phf
/usr/photon/font_repository/mappings = /usr/photon/font_repository/mappings
/usr/photon/font_repository/fontopts = /usr/photon/font_repository/fontopts
/usr/photon/font_repository/fontkey = /usr/photon/font_repository/fontkey
/usr/photon/font_repository/fontdir = {
;
; fontdir config file
;
phcursor,.phf,Photon Cursor,0,,E900-E921,Np,32x32,3K
primasansmonobts,0@tt2009m_.ttf,PrimaSansMono BT,0,,0020-F002,f,79x170,109K
}
/usr/photon/font_repository/fontext = {
;
; fontext config file
;
+normal = primasansmonobts, phcursor
}
/usr/photon/font_repository/fontmap = {
;
; fontmap config file
;
? = primasansmonobts
}
# input config
/usr/photon/keyboard/en_US_101.kbd = /usr/photon/keyboard/en_US_101.kbd
[data=c]
pci-bios
devc-pty
devc-ser8250
ls
ksh
cat
pipe
pidin
uname
slogger
sloginfo
slay
Photon
io-graphics
devi-hirun
pwm
[+raw] /usr/photon/bin/pterm = pterm
[+raw] /usr/photon/bin/phcalc_sm = phcalc_sm
[+raw] /usr/photon/bin/phshutdown = phshutdown
[+raw] /usr/photon/bin/bkgdmgr = bkgdmgr
[+raw] /usr/photon/bin/pwmopts = pwmopts
[+raw] /usr/photon/bin/phmenu = phmenu
# default image for bkgdmgr
[+raw] /usr/share/backdrops/1024x768/default.jpg = \
/usr/share/backdrops/1024x768/default.jpg
# pwm and bkgdmgr config
/usr/photon/config/wm/wm.cfg = /usr/photon/config/wm/wm.cfg
# The parts of each entry in the wm.menu file must be separated by tabs.
/usr/photon/config/wm/wm.menu = {
= Desktop Menu
Terminal T pterm
Calculator a phcalc_sm
-4
< Configure C C
Appearance W pwmopts
Desktop Menu D phmenu
>
Shutdown... u phshutdown
}
# allow pterm to save its configuration to RAM, if the user changes it.
[type=link] /.ph/pterm = /dev/shmem
# allow pwm and bkgdmgr to save their configuration to RAM, if the user changes it.
[type=link] /.ph/wm = /dev/shmem
Now that you have a better understanding of how BSPs work in an embedded system, you'll want to start working on your applications. The following table contains references to the QNX documentation -- these may help you find the information you'll need to get going.
| For information on: | Go to: |
|---|---|
| Writing "hello world" | The section "A simple example" in the chapter Compiling and Debugging in the Programmer's Guide, or the IDE User's Guide. |
| Debugging your programs | The section "Debugging" in the chapter Compiling and Debugging in the Programmer's Guide. |
| Setting up NFS | The section "Complete example -- TCP/IP with network filesystem" in the appendix Sample Buildfiles in this manual. See also the fs-nfs2 utility page in the Utilities Reference. |
| Setting up an Ethernet driver | The section "Complete example -- TCP/IP with network filesystem" in the appendix Sample Buildfiles in this manual. See also the various network drivers (devn*) in the Utilities Reference. |
| Writing device drivers and/or resource managers | The chapter Writing a Resource Manager in the Programmer's Guide. |
The following table contains references to help you find more information if you require it.
| For more information on: | Go to: |
|---|---|
| Building flash filesystems | The chapter Customizing the Flash Filesystem in this guide. |
| IPL | The chapter Writing an IPL program in this guide. |
| Startup | The chapter Customizing Image Startup Programs in this guide. |
In QNX Neutrino BSPs, we use the following conventions for naming files:
| Part of filename | Description | Example |
|---|---|---|
| .bin | Suffix for binary format file. | ifs-artesyn.bin |
| .build | Suffix for buildfile. | sandpoint.build |
| efs- | Prefix for QNX Embedded Filesystem file; generated by mkefs. | efs-sengine.srec |
| .elf | Suffix for ELF (Executable and Linking Format) file. | ipl-ifs-mbx800.elf |
| ifs- | Prefix for QNX Image Filesystem file; generated by mkifs. | ifs-800fads.elf |
| ipl- | Prefix for IPL (Initial Program Loader) file. | ipl-eagle.srec |
| .openbios | Suffix for OpenBIOS format file. | ifs-walnut.openbios |
| .prepboot | Suffix for Motorola PRePboot format file. | ifs-prpmc800.prepboot |
| .srec | Suffix for S-record format file. | ifs-malta.srec |
![]() |
![]() |
![]() |
![]() |