求教:写了个PCI驱动框架 为什么probe里的printk没有输出?init里printk到是输出了
写了个PCI驱动框架 为什么probe里的printk没有输出?init里printk到是输出了
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/initval.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#define PCI_VENDOR_ID_ALC888 0x10ec
#define PCI_DEVICE_ID_ALC888 0x0888
static struct pci_device_id snd_alc888_ids[]={
{PCI_VENDOR_ID_ALC888,PCI_DEVICE_ID_ALC888,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0,},
{0,}
};
MODULE_DEVICE_TABLE(pci,snd_alc888_ids);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static int __devinit snd_alc888_probe(struct pci_dev *pci,const struct pci_device_id *pci_id)
{
int err=0;
printk( "snd_alc888_probe pci->vendor=%d!\n",pci->vendor);
return err;
}
static void __devexit snd_alc888_remove(struct pci_dev *pci)
{
snd_card_free(pci_get_drvdata(pci));
pci_set_drvdata(pci,NULL);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static struct pci_driver driver={
.name = "alc888",
.id_table=snd_alc888_ids,
.probe=snd_alc888_probe,
.remove=__devexit_p(snd_alc888_remove),
};
static int __init alas_card_alc888_init(void)
{
printk("alc888_init\n");
return pci_register_driver(&driver);
}
static void __exit alsa_card_alc888_exit(void)
{
printk("alc888_exit\n");
pci_unregister_driver(&driver);
}
MODULE_ALIAS("ALC888 8 Out 4 in");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("ALC888 HD-audio codec");
module_init(alas_card_alc888_init);
module_exit(alsa_card_alc888_exit);
[解决办法]
设备的VID是8086, PID是293e。
你的代码里面,改成新的VID/PID试一下,看看是不是有Probe打印了。
#define PCI_VENDOR_ID_ALC888 0x8086
#define PCI_DEVICE_ID_ALC888 0x293e