- 论坛徽章:
- 0
|
回复 2# goldenfort
源码如下:
#include <linux/pci.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/config.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#include <linux/ioport.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <linux/compiler.h>
#include <linux/completion.h>
#include <linux/mii.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Wu Donglei");
#define MODULE_NAME "adlink"
#define ADLINK_VENDOR_ID 0x1022
#define ADLINK_DEVICE_ID 0x2000
static struct pci_device_id adl_pci_tbl [] = {
{ADLINK_VENDOR_ID,ADLINK_DEVICE_ID,PCI_ANY_ID,PCI_ANY_ID,0,0,0},
{0,}
};
MODULE_DEVICCE_TABLE(pci,adl_pci_tbl);
//driver's member function prode
static int __devinit adl_probe(struct pci_dev *pci_dev,const struct
pci_device_id *pco_id)
{
u16 vendor,device;
printk(KERN_ALERT "adlink modules is probing!\n");
pci_read_config_word(pci_dev,0,&vendor);
pci_read_config_word(pci_dev,2,&device);
printk(KERN_INFO "%x:%x\n",vendor,device);
return 0;
}
//driver's member function remove
static int __devexit adl_remove(struct pci_dev *pci_dev)
{
printk(KERN_ALERT "adlink modules is removed!\n");
return 0;
}
//the detail of the driver module
static struct pci_driver adl_pci_driver= {
.name = MODULE_NAME,
.id_table = adl_pci_tbl,
.probe = adl_probe,
.remove = adl_remove,
};
//register adlink driver module
static int __init adl_init_module(void)
{
printk(KERN_ALERT "adlink modules is inited!\n");
return pci_register_driver(&adl_pci_driver);
}
//remove adlink driver module
static void __exit adl_exit_module(void)
{
printk(KERN_ALERT "adlink modules is exited!\n");
pci_unregister_driver(&adl_pci_driver);
}
module_init(adl_init_module);
module_exit(adl_exit_module);
在我insmod adlink.ko后,再卸载在/var/log/message中有输出:
Jan 13 17:01:51 localhost kernel: adlink modules is inited!
Jan 13 17:02:42 localhost kernel: adlink modules is exited!
但是为什么就没有调用probe函数呢?
我lspci -x:有这个设备:
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970
[PCnet32 LANCE] (rev 10)
00: 22 10 00 20 07 00 80 02 10 00 00 02 00 40 00 00
10: 01 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 22 10 00 20
30: 00 00 00 00 00 00 00 00 00 00 00 00 05 01 06 ff
从这里面来看:
#define ADLINK_VENDOR_ID 0x1022
#define ADLINK_DEVICE_ID 0x2000
应该是一致的吧? |
|