From: Bert Thomas <bert@brothom.nl>
To: linux-kernel@vger.kernel.org
Subject: PCI device driver writing newbie trouble
Date: Thu, 20 Apr 2006 16:04:07 +0100 [thread overview]
Message-ID: <4447A2E7.6000407@brothom.nl> (raw)
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);
next reply other threads:[~2006-04-20 14:05 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-20 15:04 Bert Thomas [this message]
2006-04-22 6:00 ` PCI device driver writing newbie trouble Greg KH
2006-04-23 7:50 ` Pekka Enberg
2006-04-23 16:02 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4447A2E7.6000407@brothom.nl \
--to=bert@brothom.nl \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox