当前位置: 代码迷 >> 驱动开发 >> 对Linux停PCI驱动的困惑。求解。
  详细解决方案

对Linux停PCI驱动的困惑。求解。

热度:71   发布时间:2016-04-28 10:23:38.0
对Linux下PCI驱动的困惑。。求解。。
各位好:
    我目前正在学习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);