在分析网卡驱动程序之前,我们先来了解一下linux网络驱动体系结构:
![linux网络驱动体系结构 - 小白 - 小白的博客](http://img5.ph.126.net/JunBIwzSFoeuwBIDcj7sUg==/2486831419256034355.jpg)
我们来说一下流程:当网络设备驱动加载时,首先在入口函数里面完成一些初始化工作,这主要就是对net_device结构体的设置,以及跟硬件相关的设置,其中发包和收包函数比较重要。
ifconfig xxx.xxx.xxx.xxx up来配置网卡的时候,会调用net_device结构体的open函数。
当发送数据包时,协议接口层的dev_queue_xmit会调用net_device结构体的hard_start_xmit函数来发送数据包,数据包被放在sk_buff结构体中,先被发送到发送缓冲区,然后通过设置相应的发送位将数据发送出去。
接受数据的时候,当数据到达后会产生一个中断,在中断处理函数中来处理收到的数据包,但是中断处理函数中对数据包只是做一个简单的处理,接着就把数据包上报给网络协议层,网络协议层的netif_rx会对接受到的数据包做进一步的处理。