linux网卡的pci地址,Linux网络设备驱动_PCI网卡.doc

Linux网络设备驱动_PCI网卡

Linux网络设备驱动结构

struct pci_driver

如果网络设备(包括wireless)是PCI规范的,则先是向内核注册该PCI设备(pci_register_driver),然后由pci_driver数据结构中的probe函数指针所指向的侦测函数来初始化该PCI设备,并且同时注册和初始化该网络设备。

如果网络设备(包括wireless)是PCMCIA规范的,则先是向内核注册该PCMCIA设备(register_pccard_driver),然后driver_info_t数据结构中的attach函数指针所指向的侦测函数来初始化该PCMCIA设备,并且同时注册和初始化该网络设备。

1. 申明为PCI设备:

static struct pci_driver tg3_driver = {

.name = DRV_MODULE_NAME,

//此驱动所支持的网卡系列,vendor_id, device_id

.id_table = tg3_pci_tbl,

//初始化网络设备的回调函数

.probe = tg3_init_one,

//注销网络设备的回调函数

.remove = __devexit_p(tg3_remove_one),

//设备挂起函数

.suspend = tg3_suspend,

//设备恢复函数

.resume = tg3_resume

};

2. 驱动模块的加载和卸载

static int __init tg3_init(void)

{

//先注册成PCI设备,并初始化,如果是其他的ESIA,PCMCIA,用其他函数

return pci_module_init(&tg3_driver);

}

static void __exit tg3_cleanup(void)

{

pci_unregister_driver(&tg3_driver);//注销PCI设备

}

module_init(tg3_init); //驱动模块的加载

module_exit(tg3_cleanup); //驱动模块的卸载

3. PCI设备探测函数probe,初始化网络设备

主要工作:申请并设置pci资源(内存),申请并设置net_device网络设备结构,IO映射,注册网络设备

static int __devinit tg3_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)

{

//初始化设备,使I/O,memory可用,唤醒设备

pci_enable_device(pdev);

//申请内存空间,配置网卡的I/O,memory资源

pci_request_regions(pdev, DRV_MODULE_NAME);

pci_set_master(pdev);

//设置DMA属性

pci_set_dma_mask(pdev, (u64) 0xffffffffffffffff);

//网卡 I/O,memory资源的启始地址

tg3reg_base = pci_resource_start(pdev, 0);

//网卡I/O,memory资源的大小

tg3reg_len = pci_resource_len(pdev, 0);

//分配并设置网络设备

dev = alloc_etherdev(sizeof(*tp));

//申明为内核设备模块

SET_MODULE_OWNER(dev);

//初始化私有结构中的各成员值

tp = dev->priv;

tp->pdev = pdev;

tp->dev = dev;

……

//锁的初始化

spin_lock_init(&tp->lock);

//映射I/O,memory地址到私有域中的寄存器结构

tp->regs = (unsigned long) ioremap(tg3reg_base, tg3reg_len);

dev->irq = pdev->irq;

//网络设备回调函数赋值

dev->open = tg3_open;

dev->stop = tg3_close;

dev->get_stats = tg3_get_stats;

dev->set_multicast_list = tg3_set_rx_mode;

dev->set_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值