PCI device driver writing newbie trouble

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

I'm attempting to write a PCI device driver. I've read chapters 2, 9 and 12 of the linux device driver book (3rd ed) and it got me going with the code below. However, I never see the message printed from cif50_probe, so appearantly the kernel doesn't consider my driver the correct driver for the hardware.

I tried to load the driver with insmod, but I also rebooted the system in the hope that some part of the kernel would find the hardware and try to load my driver. Is that how it is supposed to work? At least my driver is listed in /lib/modules/2.6.15.7/modules.pcimap. Modprobe doesn't find it, I don't know why. The hardware contains a PLX chip. The hardware is found by the kernel, as it correctly shows up in /proc/pci:

  Bus  1, device  13, function  0:
    Class 0680: PCI device 10b5:9050 (rev 1).
      IRQ 5.
      Non-prefetchable 32 bit memory at 0xd1005000 [0xd100507f].
      I/O at 0xd100 [0xd17f].
      Non-prefetchable 32 bit memory at 0xd1000000 [0xd1001fff].

Also in the corresponding /sys files.

Does anyone have a suggestion why my probe function is not being called?

TIA
Bert

#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
MODULE_LICENSE("Dual BSD/GPL");

static const struct pci_device_id cif50_ids[] = {
        {
        .vendor = 0x10B5,
        .device = 0x9050,
        .subvendor = PCI_ANY_ID, //0x10B5,
        .subdevice = PCI_ANY_ID, //0x1080,
        .class = PCI_ANY_ID,
        .class_mask = PCI_ANY_ID
        },
        { 0 }
};

MODULE_DEVICE_TABLE(pci,cif50_ids);

int cif50_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
  printk("<1>Joehoe, de kernel wil me een PCI device geven!\n");
  return -1;
}

void cif50_remove(struct pci_dev *dev)
{
}

static struct pci_driver pci_driver = {
        .name = "cif50pb",
        .id_table = cif50_ids,
        .probe = cif50_probe,
        .remove = cif50_remove,
};
static int hello_init(void)
{
  printk("<1>Hello, world\n");
  return pci_register_driver(&pci_driver);
}
static void hello_exit(void)
{
  printk("<1>Goodbye cruel world\n");
  pci_unregister_driver(&pci_driver);
}
module_init(hello_init);
module_exit(hello_exit);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux