도와주세요!!
#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언어 초보라..해결방법좀 알려주세요
안녕하세요.
디바이스 드라이버에서 PCI 의 주소를 얻어 오는 함수 있는것으로 알고 있습니다.
그 함수를 찾아 해결하시면 될것 같습니다 ^^