第四季-专题15-网卡驱动程序设计

专题15-网卡驱动程序设计

第1课-网卡驱动架构分析

l  Linux网络子系统

l  系统调用接口层:为应用程序提供访问网络子系统的统一方法。

l  协议无关层:提供通用的方法来使用传输层协议。

l  协议栈的实现:实现具体的网络协议

l  设备无关层:协议与设备驱动之前通信的通用接口

l  设备驱动程序

  1. 重要数据结构

在Linux内核中,每个网卡都由一个net_device结构来描述,其中的一些重要成员有:

l  char name[IFNAMSIZ],设备名,如:eth%d

l  unsigned long base_addr,I/O 基地址

l  const struct net_device_ops *netdev_ops;

  1. 网卡描述结构

类似于字符设备驱动中的file_operations结构,net_device_ops结构记录了网卡所支持的操作。

static const struct net_device_ops dm9000_netdev_ops =

{

.ndo_open = dm9000_open,

.ndo_open = dm9000_open,

.ndo_stop = dm9000_stop,

.ndo_start_xmit = dm9000_start_xmit,

.ndo_do_ioctl = dm9000_ioctl,

.ndo_validate_addr = eth_validate_addr,

.ndo_set_mac_address = eth_mac_addr,

};

  1. 网卡操作集合

类似于字符设备驱动中的file_operations结构,net_device_ops结构记录了网卡所支持的操作。

static const struct net_device_ops dm9000_netdev_ops =

{

.ndo_open = dm9000_open,

.ndo_open = dm9000_open,

.ndo_stop = dm9000_stop,

.ndo_start_xmit = dm9000_start_xmit,

.ndo_do_ioctl = dm9000_ioctl,

.ndo_validate_addr = eth_validate_addr,

.ndo_set_mac_address = eth_mac_addr,

};

  1. 网络数据包

Linux内核中的每个网络数据包都由一个套接字缓冲区结构struct sk_buff 描述,即一个sk_buff结构就是一个网络包,指向sk_buff的指针通常被称做skb。

第2课-回环网卡驱动设计

第3课-网络子系统深度剖析

第4课-DM9000网卡驱动深度分析

第5课-DM9000网卡驱动实现

原文地址:https://www.cnblogs.com/free-1122/p/11452269.html

时间: 2024-11-13 04:16:05

第四季-专题15-网卡驱动程序设计的相关文章

第四季-专题14-串口驱动程序设计

专题14-串口驱动程序设计 第1课-tty驱动架构 TTY概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. l  串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备.Linux 把每个串行端口都看作是一个字符设备.这些串行 端口所对应的设备名称是/dev/ttySAC0; /dev/ttySAC1…… l  控制台终端(/dev/console) 在Linux系统中,计算机的输出设备通常被称为控制台终端(Conso

基于嵌入式Linux的千兆以太网卡驱动程序设计及测试

一. 引言 千兆以太网是一种具有高带宽和高响应的新网络技术,相关协议遵循IEEE 802.3规范标准.采用和10M以太网相似的帧格式.网络协议和布线系统,基于光纤和短距离同轴电缆的物理层介质,更适用于交换机.服务器等数据吞吐率大的设备.本文设计实现一种基于嵌入式Linux千兆以太网卡的驱动程序,并完成后续的测试工作和代码移植. 千兆以太网网卡工作在OSI网络架构的物理层和数据链路层,其中物理层由PHY芯片管理,数据链路层由千兆以太网控制器(GMAC)管理.硬件构架上,GMAC控制器由核心层.MT

Linux 网卡驱动程序设计(1)

一.网卡驱动架构分析 1. Linux 网络子系统 #系统调用接口层 为应用程序提供访问网络子系统的统一方法. #协议无关层 提供通用的方法来使用传输层协议. #协议栈的实现 实现具体的网络协议 #设备无关层 协议与设备驱动之前通信的通用接口 #设备驱动程序 2. 重要数据结构 2.1 网卡描述结构 在Linux内核中,每个网卡都由一个<net_device>结构来描述,其中的一些重要成员有: #char name[IFNAMSIZ] 设备名,如:eth%d #unsigned long ba

专题11 LED驱动程序设计

一.理论分析1.现实生活中,对一个设备除了能够读写之外,我们还希望能够对设备进行控制,比如说LED的亮灭,电机的转动等.2.一般希望能从应用程序传递命令给内核从而使得能够调用控制函数实现不同的控制.3.在用户空间,使用ioctl系统调用来控制设备:(应用程序接口)int ioctl(int fd,unsigned long cmd,...):4.重点是第二个参数cmd,他实质上就是一个整数.分成几块构成.5.在内核空间,相应的设备函数应该是(设备驱动方法)cmd是通过应用程序传递进来的.二.定义

第四季-专题11-LED驱动程序设计

专题11-LED驱动程序设计 第1课-字符设备控制 设备控制理论 (1)作用 大部分驱动程序除了需要提供读写设备的能力外,还需要具备控制设备的能力.比如: 改变波特率. (2)应用程序接口 在用户空间,使用ioctl系统调用来控制设备,原型如下: int ioctl(int fd,unsigned long cmd,...) fd: 要控制的设备文件描述符 cmd: 发送给设备的控制命令 …: 第3个参数是可选的参数,存在与否是依赖于控制命令(第2 个参数). (3)设备驱动方法 当应用程序使用

第四季-专题18-FLASH驱动程序设计

专题18-FLASH驱动程序设计 第1课-块设备驱动系统架构 块设备快速体验 块设备是指只能以块为单位进行访问的设备,块大小一般是512个字节的整数倍.常见的块设备包括硬件,SD卡,光盘等. l  insmod simple-blk.ko l  ls /dev/simp_blkdev0 l  mkfs.ext3 /dev/simp_blk0 l  mkdir –p /mnt/blk l  mount /dev/simp_blk0 /mnt/blk l  cp /etc/init.d/* /mnt

第四季-专题20-SPI驱动程序设计

专题20-SPI驱动程序设计 第1课-SPI总线介绍 总线结构 SPI(Serial Peripheral Interface)串行外设接口,是一种高速的,全双工,同步的通信总线.采用主从模式(Master Slave)架构,支持多个slave,一般仅支持单Master. SPI接口共有4根信号线,分别是:设备选择线(SS).时钟线(SCK).串行输出数据线(MOSI).串行输入数据线(MISO) 数据传输过程 主节点通过MOSI 线输出数据,从节点在SIMO 处从主节点读取数据.同时,也在通过

第四季-专题19-I2C驱动程序设计

专题19-I2C驱动程序设计 第1课-I2C总线介绍 I2C硬件结构 (1)     电气特性 I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备. I2C总线只有两根双向信号线.SDA: Serial Data Line-数据线SCL :Serial Clock-时钟线. (2)     总线寻址 I2C总线协议规定:从设备采用7位的地址.D7-D1:从设备地址.D0位:数据传送方向位,为“0”时表示主设备向从

第四季-专题21-USB驱动程序设计

专题21-USB驱动程序设计 第1课-USB总线介绍 USB发展史 USB(Universal Serial Bus ),通用串行总线,是一种外部总线标准,用于规范电脑与外部设备的连接和通讯.USB是在1994年底由英特尔.康柏.IBM.Microsoft等多家公司联合提出的,自1996年推出后,已成功替代串口和并口,成为当今个人电脑和大量智能设备的必配接口之一. USB 1.0出现在1996年的,速度只有1.5Mb/s1998年升级为USB 1.1,速度也提升到12Mb/s,称之为”full