lkml.org 
[lkml]   [2006]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectPCI device driver writing newbie trouble
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 majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-04-20 16:08    [W:0.035 / U:0.156 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site