设为首页 加入收藏

TOP

网络驱动移植之解析Linux网络驱动的基本框架
2014-11-24 14:14:38 来源: 作者: 【 】 浏览:1
Tags:网络 驱动 移植 解析 Linux 基本 框架

概括而言,编写Linux网络驱动其实只要完成两件事即可,一是分配并初始化网络设备,二是注册网络设备。


1、分配并初始化网络设备


动态分配网络设备(从C语言角度来看,其实就是定义了一个struct net_device结构体变量,并对这个结构体变量的某些成员进行了初始化而已)及其私有数据的大致过程如下图(以以太网设备为例):



下面将结合linux-2.6.38.8中的代码详细分析网络设备的分配和初始化过程。


以前各类网络设备的分配函数(如以太网设备的alloc_etherdev)都只是alloc_netdev函数的封装而已,但对于linux-2.6.38.8而言已经不是这样了。


alloc_netdev_mqs函数的五个参数分别为私有数据大小、设备名称、默认初始化函数、发送队列数目和接收队列数目。


以太网设备的名称设为eth%d,默认初始化函数设为ether_setup,发送和接收队列数目都设为1。


函数alloc_netdev_mqs定义在linux-2.6.38.8/net/core/dev.c文件中,大概会完成以下各种操作:


(1)、为struct net_device和私有数据分配内存空间


对齐操作相关宏:


(2)、动态分配per-CPU变量


(3)、初始化硬件地址链表dev->dev_addrs,并把首元素赋给dev->dev_addr


(4)、初始化组播和单播地址链表


(5)、设置网络命名空间


(6)、设置GSO最大值


(7)、初始化各种链表


(8)、设置priv_flags值


(9)、执行默认初始化函数(以太网设备默认为ether_setup)


(10)、初始化数据包发送队列


(11)、初始化数据包接收队列


(12)、设置网络设备名称


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇DM6467 之视频采集(Linux)下mmap 下一篇网络驱动移植之简述CS8900A网络芯..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: