各位好:
我目前正在学习linux的PCI驱动开发,有些疑惑希望各位高手赐教。
目前我想在用户态下访问某一个PCI设备,按照LDD书上所说,是否可以使用pci_get_device来获取一个设备?还是这个设备只能用于内核态?如果只能用于内核态,我想在用户态下直接访问pci设备进行IO操作应该怎么做呢?
而且,在编译的时候为啥提示我undefined reference to 'pci_get_device'呢??
#include <linux/pci.h>
#include <linux/pci_regs.h>
#include <linux/stddef.h>
#include <sys/io.h>
#include <stdio.h>
struct pci_dev *gpio_dev = NULL;
void main()
{
int bus = 0;
int dev = 0;
int func = 0;
unsigned long addr = 0, data = 0;
if(iopl(3) < 0)
{
printf("iopl error\n");
return;
}
for(bus = 0; bus < 256; bus++)
{
for(dev = 0; dev < 32; dev++)
{
for(func = 0; func < 8; func++)
{
addr = 0x80000000 | bus << 16 | dev << 11 | func << 8;
outl(addr, 0xcf8);
data = inl(0xcfc);
if((data != 0xffffffff) && (data != 0))
printf("ven:dev %04x:%04x\n", data & 0xffff, (data >> 16) & 0xffff);
gpio_dev = pci_get_device(data & 0xffff, (data >> 16) & 0xffff, gpio_dev);