linux驱动有哪些,Linux网络设备驱动编程有哪些呢?

本文详细介绍了PCI设备驱动的加载和卸载过程,包括PCI和PCMCIA规范的设备注册与初始化。通过tg3_init_one函数展示了如何启用设备,配置I/O和内存资源,设置DMA属性,映射寄存器,并注册网络设备。同时,讨论了驱动模块的module_init和module_exit函数用于驱动模块的加载和卸载。
摘要由CSDN通过智能技术生成

1,驱动模块的加载和卸载如果网络设备(包括wireless)是PCI规范的,则先是向内核注册该PCI设备(pci_register_driver),然后由pci_driver数据结构中的probe函数指针所指向的侦测函数来初始化该PCI设备,并且同时注册和初始化该网络设备。  如果网络设备(包括wireless)是PCMCIA规范的,则先是向内核注册该PCMCIA设备(register_pccard_driver),然后driver_info_t数据结构中的attach函数指针所指向的侦测函数来初始化该PCMCIA设备,并且同时注册和初始化该网络设备。  staticint__inittg3_init(void){//先注册成PCI设备,并初始化,如果是其他的ESIA,PCMCIA,用其他函数returnpci_module_init(&tg3_driver);}staticvoid__exittg3_cleanup(void){pci_unregister_driver(&tg3_driver);//注销PCI设备}module_init(tg3_init);//驱动模块的加载module_exit(tg3_cleanup);//驱动模块的卸载申明为PCI设备:staticstructpci_drivertg3_driver={。  name=DRV_MODULE_NAME,。id_table=tg3_pci_tbl,//此驱动所支持的网卡系列,vendor_id,device_id。probe=tg3_init_one,//初始化网络设备的回调函数。  remove=__devexit_p(tg3_remove_one),//注销网络设备的回调函数。suspend=tg3_suspend,//设备挂起函数。  resume=tg3_resume//设备恢复函数};2,PCI设备探测函数probe,初始化网络设备staticint__devinittg3_init_one(structpci_dev*pdev,conststructpci_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=(unsignedlong)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_mac_address=tg3_set_mac_addr;dev->do_ioctl=tg3_ioctl;dev->tx_timeout=tg3_tx_timeout;dev->hard_start_xmit=tg3_start_xmit;//网卡的MAC地址赋值dev->addrtg3_get_device_address(tp);//注册网络设备。

阅读全文 >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值