PCI硬件驱动开发中为何无法对硬件进行操作?

近来,本人在QNX下进行PCI硬件驱动的开发。发现连最简单的pci_find_device都无法成功执行,猜测可能是进程没有获取root操作权限的问题,所以用了两种办法来试,但是都失败了:
第一、在进程中添加ThreadCtl(_NTO_TCTL_IO, 0)。调试编译都成功了,但是执行时还是发现执行不了硬件操作。
第二、以root身份登陆系统,然后在gcc时加-T1参数。这次干脆就连编译都不行了,显示缺少什么*-ld文件,而我打开看了一下有那个文件。

环境是QNX6.2.1。

请求高手帮忙!!!!!
问题1:获取ROOT权限的方法哪里出了问题?
问题2:是不是其他未考虑的问题,影响了程序执行?

源程序:

#define YOUR_PCI_DEVICE_ID 0x17D0 //设备标识
#define YOUR_PCI_VENDOR_ID 0x1093 //厂商标识

unsigned busnum; //总线号
unsigned devfuncnum; //设备功能号
int pci_index = 0; //标识为0表示第一块此种型号的设备

unsigned lastbus;
unsigned version;
unsigned hardware;

//获取操作权限
ThreadCtl (_NTO_TCTL_IO, 0);

//设备检测
if (pci_find_device (YOUR_PCI_DEVICE_ID,
YOUR_PCI_VENDOR_ID,
pci_index,
&busnum,
&devfuncnum)!=PCI_SUCCESS)
{
printf (“pci busnum : %d\n”, busnum);
printf (“devfuncnum : %d\n”, devfuncnum);
printf (“Can not find device!\n”);
exit (EXIT_FAILURE);
}

方法二就不用试了,那个是QNX4用的。

要对硬件进行操作,进程需要取得“IO特权”。也就是ThreadCtl(_NTO_TCTL_IO, 0)。这个函数只有root用户启动的进程可以使用,一般用户使用这个函数,会得到一个失败的返回结果。

要成为root用户,只有用root login。

具体到你的程序,这里有pci_find_device()的说明。
http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/p/pci_find_device.html

在Description里,专门指出了:
You must successfully call pci_attach() before calling any of the other PCI functions.

所以你的程序直接调用pci_find_device()会失败。

非常感谢xtang,长江中下游阴霾的乌云终于一扫而空了!工作终于可以继续进行了,饭碗不会丢了,^_^!