首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

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

2013-08-01 
对Linux下PCI驱动的困惑。。求解。。各位好:我目前正在学习linux的PCI驱动开发,有些疑惑希望各位高手赐教。目前

对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);


                if(gpio_dev)               
                    printf("find it.\n");
            }                
        }
    }
}


[解决办法]
用户态不能直接直接操作硬件以及内核数据结构,用户态只能通过少数被允许的系统调用进行间接访问,而且你的间接访问还要被审核,审核不通过就会被拒绝。
就跟你发帖要被审核一个意思。

热点排行