vlambda博客
学习文章列表

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(内置变压器)

Linux网络通讯基础

8 不同的RJ45对应的电路布局不同  要是更换器件之后 需要根据硬件接口 重新绘制电路

9 电压型PHY芯片HR911105A电路连接原理图如下

Linux网络通讯基础

10 硬件设计,要是MII或者是MDIO存在异常  PHY芯片中指示灯也是会亮的  灯不正常  不代表网络不正常

指示灯只是一个指示作用


PHY驱动

1 网络上自动协商  10/100/1000 三种网络可以自动进行切换 

2 HP Auto-MDIX自动翻转功能 

 交叉直连的网线,现在的PHY芯片可以进行自动转换   老设备还是需要注意网线线序

3 LAN8720功能框图

Linux网络通讯基础

4 对应设计原理图

Linux网络通讯基础

5 常用的15个寄存器 数据交互方式基本上都是相同的 ,linux中使用通用的网络驱动也是可以对PHY芯片进行驱动

6 网络参数配置中存在四种情况 需要两个bit位 进行标志的区分  寄存器中也是使用两个位  区分此处的参数

Linux网络通讯基础

7 可对网络上全双工以及半双工 模式进行配置    7-0bit暂时是没有使用的   通用手册中有对参数进行定义  实际使用中可以对不需要进行使用的参数进行参数定义

8 后续开发中需要经常接触PHY芯片  可以对手册中别的寄存器进行研究



linux内核网络驱动框架

1网络设备解释:并不是只有以太网设备(Ethernet)称为网络设备,光纤分布式数据接口(FDDI),红外数据接口(inDA),高性能并行接口(HDDI),CAN网络等,内核针对不同的网络设备 在alloc_netdev的基础上提供了一层封装

2   对于以太网 网络设备,申请函数如下

Linux网络通讯基础


参数初始化中使用到的结构体

Linux网络通讯基础

3 对于CAN网络中内存申请

4  对应的流程 基本上都是  申请内存  之后进行数据初始化,使用初始化的数据  注册到系统中


语录:冰冻三尺 非一日之寒