Linux网络设备驱动的实现-创新互联

结论:

1、对一个设备驱动而言,主要从两个方面进行着手,一个是控制流,一个是数据流。

专业从事网站设计、成都网站设计,高端网站制作设计,微信小程序定制开发,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用HTML5建站+CSS3前端渲染技术,响应式网站开发,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。

控制流就是如何控制网络设备,数据流则说的是报文的收发流程。

2、网络设备可以是Linux服务器的网卡,也可以是嵌入式设备的cpu或者交换芯片。

3、控制流分为低端的串行总线,如SMI、UART、SPI、USB等,也可以是高速总线,如PCI、PCIE总线等。

4、数据流则包含接收报文、发送报文,关键的内核数据结构是skb.

一、网络设备注册与初始化

1、 网络设备的注册

2、内核怎么知道调用驱动哪个发送函数呢?

    解答:在向内核注册网络设备时,会把驱动的实际发送函数挂接在ndo_start_xmit这个函数指针。

二、网络设备收包

1、接收报文的流程如下:

 2、驱动收包任务的处理流程:

三、网络设备发包

1、驱动发包处理。

发包时,不用任务,而是在内核调用驱动的发包函数中直接发送。

实现思路是,将skb中的data字段和长度信息得到,然后挂在芯片的BD结构体上,然后启动发送,硬件就会发送出去。

四、网络设备性能提升方法

1、总体思路:

   软硬件结合疗效好,再结合指令cache,优化收发流程处理、多核并发收发包(转发核直接使用轮询而不用中断收发包)。

五、skb常用操作方法

1、增、删、改、查接口:

分配skb: struct sk_buff *dev_alloc_skb(unsigned int length)

释放skb: void dev_kfree_skb_any(struct sk_buff *skb)

修改skb: 尾部增加内容:skb_put

       尾部减少内容:skb_trim

       头部增加内容:skb_push

       头部减少内容:skb_pull

查找skb的头部空间:skb_headroom

查找skb的尾部空间:skb_tailroom


当前文章:Linux网络设备驱动的实现-创新互联
转载注明:http://pwwzsj.com/article/djjgeo.html