原创 Linux网卡驱动程序设计(一)

2012-8-31 14:33 2452 11 11 分类: MCU/ 嵌入式

Linux网卡驱动程序

一. Linux系统设备驱动程序概述 

1.1 Linux设备驱动程序分类 

与字符设备不同,网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字成与网络设备的接口。因而在网络设备身上并不能体现出“一切都是文件”的思想。    

Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种。字符设备是指存取时没有缓存的设备(必须串行顺序访问,鼠标、键盘、触摸品、LED等)。块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access),字符设备则没有这个要求。块设备主要包括硬盘软盘设备,CD-ROM等。一个文件系统要安装进入操作系统必须在块设备上。 

Linux的网络系统主要是基于BSD unix的socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递

1.2 以太网接口

以太网接口由MAC和PHY组成。

以太网MAC由IEEE-802.3以太网标准定义,实现了数据链路层。常用的MAC支持10Mbit/s或100Mbit/s两种速率。

以太网PHY则实现物理层功能IEEE-802.3标准定义了以太网PHY,它符合IEEE-802.3K中用于10BaseT和100BaseTX的规范。

MAC和PHY之间通常采用MII连接,它是IEEE-802.3定义的以太网行业标准,包括1个数据接口和1个MAC和PHY之间的管理接口。数据接口包括分别用于发送和接收的两条独立信道,每条信道都有自己的数据、时钟和控制信号,MII数据接口总共需要16个信号,MII管理接口包含两个信号,分别是时钟和数据,通过管理接口,上层能监视和控制PHY。 

以太网接口原理图如下图所示,以太网隔离变压器时以太网收发芯片与连接器之间的磁性组件,在其两者之间起着信号传输、阻抗匹配、波形修复、信号杂波抑制和高电压隔离作用。


二.Linux系统网络设备驱动程序 

2.1 网络驱动程序的结构 

网络协议接口层:向网络层协议提供统一的数据接口,使得上层协议独立于具体设备。

网络设备接口层:struct net_device描述具体网络设备属性和操作。

设备驱动功能层:驱动硬件完成相应的收发数据过程,具体和硬件相关。

网络设备与媒介层:具体的硬件实体,包括网络适配器和具体的传输媒介。

在设计具体的网络设备驱动程序时,我们要完成的主要工作是编写设备驱动功能层的相关函数以填充net_device数据结构的内容并将net_device注册入内核。


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条