Linux网络通讯基础
linux上网络通讯
本文讨论五问题:
一 市面上网络设备的分类
二 通讯接口
三 RJ45接口
四 PHY驱动
五 linux内核网络驱动框架
一 市面上网络设备的分类
1 设别上使用的网卡 之前确实是外置扩展卡的形式 之后经过改善 网卡已经编程一个芯片 之后集成到主板上
2 网卡两大核心部分 一部分是 MAC 一部分是PHY芯片
3 对应嵌入式两种网络方案 一种是SOC内部有MAC,还有一种就是使用外置的扩展模块 扩展模块上有Mac还有PHY芯片
4 DM9000系列的芯片 都是Mac加上PHY形式的网络方式 三星的linux板子上基本都没有mac外设
5 W5500芯片中已经集成了TCP/IP协议栈 使用者在使用这种系列的芯片之后 不需要对协议栈进行移植 可直接使用
6 芯片中要是有MAC 就会有网络加速引擎 比如网络专用DMA 网络处理效率会大大提高
7 对比PHY芯片 此类芯片的成本是比较高的 可选择性较少
8 一般MAC外设会有专用的加速模块 外接PHY可选择性多 成本低 内部的MAC外设会通过MII 或者RMII接口来连接外部的PHY芯片
通讯接口
1 MAC和外部PHY芯片运行连接使用的两个接口 一个是MII/RMII和MDIO接口
2 MDIO管理数据输入输出接口 是一个简单的两线串行接口 一根MDIO数据线 一根MDC时钟线 驱动程序可以通过MDIO和MDC这两根总线访问PHY芯片的任意一个寄存器 MDIO接口支持多达32个PHY
4 正常芯片上都有对应的中断 复位 还有其他的引脚
RJ45接口
1 网络设备是通过网络连接起来的,接入网线的叫做RJ45
2 RJ45想要正常工作 需要在其前级加上变压器,主要是防止雷击 还有调整不同PHY中通讯使用的电压
3 不同的PHY芯片对应的工作方式不同 有些是电流型PHY芯片 有些是电压型PHY芯片 电流型芯片使用中需要在变压器的抽头上加上指定电压,电压型芯片使用中需要在抽头上加上GND即可
4 实际使用中可以使用集成过网络变压器的RJ45插座 减少电路中设计复杂度 缩小板子体积
5 RJ45带网络变压器的会稍微长一点 不带变压器的RJ45长度会稍微短一点
6 RJ45上指示灯 一般情况下 对应的是 绿色等常量就是网络连接正常 黄色闪烁 说明当前正在进行网络通信 这两个指示灯都是phy芯片直接进行控制的
7 嵌入式网络接口硬件 对应的就是MAC+外部PHY+RJ45(内置变压器)
8 不同的RJ45对应的电路布局不同 要是更换器件之后 需要根据硬件接口 重新绘制电路
9 电压型PHY芯片HR911105A电路连接原理图如下
10 硬件设计,要是MII或者是MDIO存在异常 PHY芯片中指示灯也是会亮的 灯不正常 不代表网络不正常
指示灯只是一个指示作用
PHY驱动
1 网络上自动协商 10/100/1000 三种网络可以自动进行切换
2 HP Auto-MDIX自动翻转功能
交叉直连的网线,现在的PHY芯片可以进行自动转换 老设备还是需要注意网线线序
3 LAN8720功能框图
4 对应设计原理图
5 常用的15个寄存器 数据交互方式基本上都是相同的 ,linux中使用通用的网络驱动也是可以对PHY芯片进行驱动
6 网络参数配置中存在四种情况 需要两个bit位 进行标志的区分 寄存器中也是使用两个位 区分此处的参数
7 可对网络上全双工以及半双工 模式进行配置 7-0bit暂时是没有使用的 通用手册中有对参数进行定义 实际使用中可以对不需要进行使用的参数进行参数定义
8 后续开发中需要经常接触PHY芯片 可以对手册中别的寄存器进行研究
linux内核网络驱动框架
1网络设备解释:并不是只有以太网设备(Ethernet)称为网络设备,光纤分布式数据接口(FDDI),红外数据接口(inDA),高性能并行接口(HDDI),CAN网络等,内核针对不同的网络设备 在alloc_netdev的基础上提供了一层封装
2 对于以太网 网络设备,申请函数如下
参数初始化中使用到的结构体
3 对于CAN网络中内存申请
4 对应的流程 基本上都是 申请内存 之后进行数据初始化,使用初始化的数据 注册到系统中
语录:冰冻三尺 非一日之寒