QNX on Imote2

Hi,

I am currently trying to build a BSP for QNX on the Imote2. As a starting point, I am working with the code QNX released for the DBPXA270DP, which uses the PXA270, and the imote2 uses the PXA271.

So far i have managed to make a working IPL and Startup program, but the final step of the startup program seems a little unclear to me. It’s final step is to jump the the procnto kernel, but i’m not exactly sure what address this value should be. On the arm, startup does not turn on any virtual addressing from what i read, so my guess is that jump destination should be the entry point for the kernel in the Flash. This was tried, and didn’t show any results.

Below is my .build script, and the vboot value we have tried useing is 0x40000, which is the location we load the image to in flash.

Any help, or explanation of this final step would be greatly appreciated.

-Keith

###########################################################################

START OF BUILD SCRIPT

###########################################################################

[image=0xa0000000]
[virtual=armle,binary] .bootstrap = {
startup-dbpxa270dp
#######################################################################
## PATH set here is the safe path for executables.
## LD_LIBRARY_PATH set here is the safe path for libraries.
## i.e. These are the paths searched by setuid/setgid binaries.
## (confstr(_CS_PATH…) and confstr(_CS_LIBPATH…))
#######################################################################
PATH=/proc/boot procnto -v
}

[+script] .script = {
procmgr_symlink …/…/proc/boot/libc.so.2 /usr/lib/ldqnx.so.2

BLINK
#######################################################################
## Start the main shell
#######################################################################

[+session] ksh &

}

[type=link] /dev/console=/dev/ser1
[type=link] /tmp=/dev/shmem

libc.so

[data=copy]
BLINK
ls

The _start.S assembly code in the BSPs pxa270 IPL does turn on the MMU.

The shipped BSP boot code scans the flash for an image, copies the image into RAM and then jumps to it.

What are you doing differently? Are you trying to XIP?

I only noticed that the _startup.S code turns on the caches and writes a value to the co-processors register, which our IPL does.

And yes, our ipl does the same basic steps of finding an image in flash, copying it to ram, and then jumping to it. But it only does this for the startup program, and not the entire image.

Is the neutrino kernel meant to be XIP? or does it need to be copied to ram at some point prior to the startup program completing? from the 270 bsp, i didn’t notice any copying being done.

In the shipped BSP _start.S jumps to main, main calls image_scan() to find the image, image_setup() to copy it to RAM, and image_start() to jump to it. The image is generally a complete image filesystem which includes the kernel, startup code, some shared libraries, and other items that are configured to be in the IFS. The shipped BSP is not XIP and I’ve never played with that.