Linux操作系统分析与实践.ppt

Linux操作系统分析与实践.ppt

ID:51592863

大小:321.50 KB

页数:26页

时间:2020-03-25

Linux操作系统分析与实践.ppt_第1页
Linux操作系统分析与实践.ppt_第2页
Linux操作系统分析与实践.ppt_第3页
Linux操作系统分析与实践.ppt_第4页
Linux操作系统分析与实践.ppt_第5页
资源描述:

《Linux操作系统分析与实践.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux操作系统分析与实践第九讲:网络设备驱动程序《Linux操作系统分析与实践》课程建设小组北京大学二零零八年春季*致谢:感谢Intel对本课程项目的资助本讲主要内容网络接口驱动程序网络接口例子—snull9.1网络接口驱动程序网络接口驱动程序和字符设备、块设备驱动程序都不同本次课介绍一个不和真实硬件相关的“虚拟”网络接口设备注册structnet_device这个结构中包括了网络设备接口需要的很多信息必须动态分配,例如structnet_device*snull_devs[2];structne

2、t_device*alloc_netdev(intsizeof_priv,constchar*name,void(*setup)(structnet_device*));structnet_device*alloc_netdev(intsizeof_priv,/*私有数据区长度,驱动程序设计者设计*/constchar*name,/*接口名*/void(*setup)(structnet_device*)/*网络接口初始化函数*/);例子snull_devs[0]=alloc_netdev(sizeof(structsnull_priv)

3、,"sn%d",snull_init);snull_devs[1]=alloc_netdev(sizeof(structsnull_priv),"sn%d",snull_init);if(snull_devs[0]==NULL

4、

5、snull_devs[1]==NULL)gotoout;alloc_etherdev除了alloc_netdev,也有一些简化工作的函数,比如:structnet_device*alloc_etherdev(intsizeof_priv);这个函数不用驱动程序提供接口初始化函数,网络接口名是eth%d这样的形式在

6、中定义register_netdevfor(i=0;i<2;i++)if((result=register_netdev(snull_devs[i])))printk("snull:error%iregisteringdevice"%s"",result,snull_devs[i]->name);初始化设备ether_setup(dev);/*对dev的某些域先进行初始化*/dev->open=snull_open;dev->stop=snull_release;dev->set_conf

7、ig=snull_config;dev->hard_start_xmit=snull_tx;dev->do_ioctl=snull_ioctl;dev->get_stats=snull_stats;dev->rebuild_header=snull_rebuild_header;dev->hard_header=snull_header;dev->tx_timeout=snull_tx_timeout;dev->watchdog_timeo=timeout;/*keepthedefaultflags,justaddNOARP*/dev->

8、flags

9、=IFF_NOARP;dev->features

10、=NETIF_F_NO_CSUM;dev->hard_header_cache=NULL;/*Disablecaching*/网络设备的一系列操作和状态标志程序员定义的结构snull_privstructsnull_priv{structnet_device_statsstats;//统计信息intstatus;//状态structsnull_packet*ppool;structsnull_packet*rx_queue;/*Listofincomingpackets*/in

11、trx_int_enabled;inttx_packetlen;u8*tx_packetdata;structsk_buff*skb;spinlock_tlock;};通过netdev_priv()来获得设备的私有数据区清理工作voidsnull_cleanup(void){inti;for(i=0;i<2;i++){if(snull_devs[i]){unregister_netdev(snull_devs[i]);snull_teardown_pool(snull_devs[i]);free_netdev(snull_devs[i])

12、;}}return;}net_device结构中重要数据介绍charname[IFNAMSIZ];网络接口名,如果名字中包括%d,那么register_netdev替换它为唯一名字,从0开始分

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。