#include<linux/pci.h>
#include<linux/module.h>
#include<linux/kernel.h>

static int pci_access(void)
{
        struct pci_bus *bus;
        u16 deviceid, vendorid;
        u32 base_addr;
        bus = pci_find_bus(0, 6);
        pci_bus_read_config_word(bus, PCI_DEVFN(1, 0), PCI_DEVICE_ID, &deviceid);
        pci_bus_read_config_word(bus, PCI_DEVFN(1, 0), PCI_VENDOR_ID, &vendorid);
        pci_bus_read_config_dword(bus, PCI_DEVFN(1, 0), PCI_BASE_ADDRESS_0, &base_addr);

        printk("Device ID = %x ", deviceid);
        printk("Vendor ID = %x\n", vendorid);
        printk("Base Address_0 = %x\n", base_addr);

        return 0;
}

static void pci_deny(void)
{
        printk("End of Access\n");
}

module_init(pci_access);
module_exit(pci_deny);

MODULE_LICENSE("Dual BSD/GPL");


코딩은 이렇게 해서 carrier card의 device id와 vendor id, base address의 정보는 출력이 됩니다.

이제 IP A에 꽂혀있는 IP의 ID PROM을 읽으려고 하는데요 c에서 코딩을 어떻게 해야 하나요?

base address+0040 이 ID SPACE이구요 포인터 선언하고 주소값을 바로 입력하면 안되더라구요..;;아직 c언어 초보라..해결방법좀 알려주세요