博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网卡驱动程序都做了些什么
阅读量:6942 次
发布时间:2019-06-27

本文共 1895 字,大约阅读时间需要 6 分钟。

2010-06-28 20:55:54|  分类: |字号 订阅

网卡驱动程序主要是实现了结构体struct net_device *ndev 中的一些方法,和中断处理函数:

ndev->open   = &dm9000_open;

ndev->hard_start_xmit    = &dm9000_start_xmit;
ndev->tx_timeout         = &dm9000_timeout;
ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
ndev->stop   = &dm9000_stop;
ndev->set_multicast_list = &dm9000_hash_table;/p531
ndev->ethtool_ops  = &dm9000_ethtool_ops;
ndev->do_ioctl   = &dm9000_ioctl;

ndev->poll_controller  = &dm9000_poll_controller;

db->mii.mdio_read    = dm9000_phy_read;

db->mii.mdio_write   = dm9000_phy_write;

中断处理函数:static irqreturn_t dm9000_interrupt(int irq, void *dev_id)

其中最重要的是:dm9000_start_xmit和中断处理函数dm9000_interrupt。

dm9000_start_xmit:

初始化数据包的传输. 完整的报文(协议头和所有)包含在一个 socket 缓存区( sk_buff ) 结构.

整个网络系统的数据传输最终都是通过调用该函数来实现的。该函数把数据包写入网卡的SRAM中,并发出数据传输请求。

dm9000_interrupt:

在一个数据包发送完,一个数据包接收到,网络链路状态改变,触发中断,调用该中断处理函数。

在非中断模式下,被函数dm9000_poll_controller调用。

如果是接收到数据包触发了中断,则该中断函数调用函数dm9000_rx(dev);接收数据包,并调用函数netif_rx(skb);

将该数据包递交给上层。

int (*open)(struct net_device *dev): 打开接口. 任何时候 ifconfig 激活它, 接口被打开. open 方法应当注册它需要的任何系统资源( I/O 口, IRQ, DMA, 等等), 打开硬件, 进行任何别的你的设备要求的设置. void (*tx_timeout)(struct net_device *dev): 数据传输超时调用该方法,处理并恢复报文发送。 i这个超时时间由成员nt watchdog_timeo;来保存。 int (*stop)(struct net_device *dev): 停止接口. 接口停止当它被关闭. 这个函数应当恢复在打开时进行的操作. void (*set_multicast_list)(struct net_device *dev):   当设备的组播列表改变和当标志改变时调用的方法

ethtool_ops:

ethtool 是一个实用工具, 设计来给系统管理员以大量的控制网络接口的操作. 用 ethtool, 可能来控制各种接口参数, 包括速度, 介质类型, 双工模式, DMA 环设置, 硬件校验和, LAN 唤醒操作, 等等,

它的核心是一个 ethtool_ops 类型的结构, 里面包含一个全部 24 个不同方法来支持 ethtool. 大部分这些方法是相对直接地;

int (*do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd):

处理特定于接口的 ioctl 命令. 相应的 net_device 结构中的成员可留为 NULL, 如果接口不需要任何特定于接口的命令.

int (*mdio_read) (struct net_device *dev, int phy_id, int location);

void (*mdio_write) (struct net_device *dev, int phy_id, int location, int val);

媒介独立接口(或 MII) 是一个 IEEE 802.3 标准, 描述以太网收发器如何与网络控制器接口;

这两个函数就是对媒介独立接口的寄存器进行操作的方法。

转载地址:http://ykwnl.baihongyu.com/

你可能感兴趣的文章
mysql查询日志计数统计
查看>>
淘宝大数据之路
查看>>
【学习笔记】Python正则表达式
查看>>
靠谱外包公司真的不好找,先看看他的技术栈
查看>>
usermod命令 用户密码管理 mkpasswd命令
查看>>
unit 5
查看>>
Linux常用命令——echo
查看>>
windows命令行下用netsh实现端口转发(端口映射)
查看>>
glusterFS
查看>>
Django 之 分页功能
查看>>
pandas 操作-2
查看>>
centos6编译安装 httpd-2.4.28
查看>>
触摸屏点餐软件开发过程中的挂单取单编程思路视频课程
查看>>
结合博客园提供的免费功能服务,打造自己专业友善的软件功能组件(主要是思想)...
查看>>
Linux运维之道之admin命令罗列(由浅入深)
查看>>
C++--对象的构造顺序与对象的销毁
查看>>
防火墙基础小实验(1)
查看>>
新博客希望新的开始
查看>>
kafka集群安装
查看>>
php 异常和错误处理机制
查看>>