驱动问题请教

我是QNX初学者,现在试着将QNX6.21的SANDPOINT BSP移值到8245POWER PC的PMC卡上,刚刚搞定了CONSOLE口,遇到了两个问题,请大侠指教。
1 无法挂接PCI设备,启动的提示信息是“Unable to start “pci-sandpoint” (2)
Unable to access “/dev/pci” (2)”。(我的BUILD文件在后面),想到的可能原因是生成的elf文件中没有pci-sandpoint部分,执行make all后在image目录里确实没有pci-sandpoint文件,于是到src\hardware\pci\sandpoint\ppc\be目录中找到该文件,与ifs-sandpoint.srec联编成一个elf文件,启动后还是不行,为什么无法启动pci-sandpoint呢?
2 对中断管理callout文件中的如下行不太理解:
.set SANDPOINT_EPIC_BASE, 0x34040000
8245的EPIC寄存器基地址配的是0xfc040000,我在C代码init_intrinfo.c中也是这么用的,可是在这个callout文件中必须用0x34040000,否则串口就不响应中断,真是想不明白,看代码也没看出什么逻辑关系。是不是与syspage之类的东西有关啊?
另外感觉QNX的online help manu中有些东西说的不详细,不知哪里有更好的教材之类的东东?望大侠不吝赐教。

[image=0x1f0000]
[virtual=ppcbe/elf] .bootstrap = {
startup-sandpoint -vvv -D8250…9600
PATH=/proc/boot procnto-600 -vv
}

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

display_msg Rolling
devc-ser8250 -e -c100000000/16 -b9600 0xfc004500,121 &
reopen
display_msg Welcome to Neutrino on a Sandpoint

slogger &

#added for ethernet
#io-net -d tulip mac= 00e0fc012345,nosrom,-p tcpip
#ifconfig en0 10.1.168.146

These env variables inherited by all the programs which follow

SYSNAME=nto
TERM=qansi
PATH=/proc/boot

pipe &
waitfor /dev/pipe

reopen /dev/ser1
[+session] PATH=/bin:/proc/boot esh &

pci-sandpoint &
waitfor /dev/pci
}

[type=link] /dev/console=/dev/ser1
[type=link] /tmp=/dev/shmem
[type=link] /bin/sh=/proc/boot/ksh

libc.so

[data=c]
devc-ser8250
pidin
esh
ls
pipe
slogger
sloginfo

在你的[data=c]里面,加入 pci-sandpoint = /src/hardware/…/pci-sandpoint,应该就可以启动pci-sandpoint了。

那个中断寄存器的地址的问题,我也不太清楚,好象与MMU有关,地址空间的那几个bit有特殊的含义。

修改了BUILD后,确实可以启动pci-sandpoint了。还有一些错误,估计是代码移植的问题,但启动了pci-sandpoint后面就好琢磨多了。多谢xtang :smiley:

从0xf8000000到0xffffffff被映射到内核空间(0x30000000).于是EPIC的虚拟地址为0xfc040000 - 0xf8000000 + 0x30000000 = 0x34040000.
6.30以后就不存在固定的内核空间了,所以必须预先取得callout的虚拟地址callout才会工作.