目录
1.3 OAM管理面功能:站在管理源的角度,看如何监控使能和监控硬件。
1.5 数据面功能:站在业务的角度看,软件如何读写或发送接收数据
2.2 SOC内部控制器自身的驱动程序(SOC芯片厂家提供)
前言:
不同的硬件设备,其功能是千差万别的,本文跳出具体硬件的差别,试图阐述所有驱动程序共性的内容,并加以总结。
第1章 驱动程序功能设计
1.1 关于用户空间驱动
[架构之路-46]:目标系统 - 系统软件 - Linux OS硬件设备驱动-UIO用户空间IO驱动框架与用户空间协议栈_文火冰糖的硅基工坊的博客-CSDN博客
1.2 硬件驱动程序的四大功能概述
所谓驱动程序,就是能够让硬件设备按照期望的方式工作的软件。
一个硬件,有哪些功能需要软件来参与管理和控制呢?
-
管理面功能:站在管理源的角度,看如何监控使能和监控硬件。
-
控制面功能:站在业务的角度看,如何使能和监控硬件,使得硬件能够完成其业务功能,基本上所有的硬件都需要控制面功能,大部分硬件设备,都需要软件进行控制,硬件才能完成数据的传输或处理。这就是控制面的功能。控制面与管理面的区别,是视角不同,一个站在设备管理的角度看,一个站在硬件的业务功能角度看。
-
数据面功能:站在业务的角度看,嵌入式系统是用来传输或处理特定业务的数据,硬件本身可以实现对数据的传输或处理,软件也可以,如网络驱动程序,就存在数据面的数据的收发。并非所有的硬件都需要软件参与数据面的转发,如二层以太网交换机,就不需要软件来转发数据,二层以太网交换机只有控制面的功能,如配合VLAN。
-
同步面功能:时钟同步功能,任何嵌入式数字系统,都需要时钟同步。
1.3 OAM管理面功能:站在管理源的角度,看如何监控使能和监控硬件。
硬件设备的管理面的功能包括:
(1)配置管理
- 按照用户的需求,对设备进行配置。如1588时钟同步,就需要配置1588 server的IP地址。如网卡驱动,就需要配置MAC地址。比如,对以太网交换机的VLAN配置,对端口速率的控制。
(2)状态管理
- 监控设备的运行状态,以便于客户清楚知道硬件的运行状态,主要通过读取硬件相关的状态寄存器完成。
(3)软件管理
- 有些硬件设备,有固件firmware,对固件的下载、升级就是软件管理。
- 如果没有固件升级,就不需要提供此功能。
(4)故障管理
- 对设备的状态进行监控或者说能够获取硬件设备的告警状态
(5)性能统计管理
- 能够监控硬件设备的性能统计数据
备注:
硬件驱动程序应该能够提供相应的API函数,以完成上述功能。
1.4 控制面功能:站在业务的角度看,如何使能和监控硬件
(1)对硬件设备初始化
- 完成对硬件设备的初始化
- 完成驱动程序自身的初始化
(2)控制硬件接收数据
- 配置硬件寄存器,使得硬件能够接收、转发数据。
- 硬件时序:如I2C接收时序
(3)控制硬件发送数据
- 配置硬件寄存器,使得硬件能够转发、发送数据。
- 硬件时序:如I2C发送时序
备注:
硬件的大部分功能的实现,都归属于控制面的功能。
1.5 数据面功能:站在业务的角度看,软件如何读写或发送接收数据
(1)驱动程序收数据
- 通过驱动程序,从硬件设备中读数据(I2C读)
- 通过硬件设备接收数据(如网卡接收数据)
(2)驱动程序发送数据
- 通过驱动程序,向硬件设备中写数据(I2C写)
- 通过硬件设备发送数据(如网卡发送数据)
备注:
数据面是指驱动软件直接参与数据的收发或读写。
并非所有驱动程序都有数据面,比如CPRI驱动程序、以太网交换机、三层交换机都没有数据驱动程序,只有控制面板或管理面驱动程序。
1.6 同步面功能:时钟同步
- 硬件设备时钟设置,如I2C时钟配置的接口。
1.7 设备驱动程序需要的技能和知识
(1)内核驱动
- 虚拟文件系统
- Linux内核驱动程序框架
- 中断
- 并发与互斥
- 阻塞与非阻塞:
[架构之路-38]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之(并发与互斥、阻塞与非阻塞、异步通知)_文火冰糖的硅基工坊的博客-CSDN博客
- 异步通知:
[架构之路-37]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之:内存与IO访问、中断、定时与延时_文火冰糖的硅基工坊的博客-CSDN博客
- SOC芯片手册
- 各种总线规范:I2C/SPI/RapidIO/eth/PCIe/Flash/......
(2)用户空间驱动
- FPGA芯片手册,包含了定义的各种业务功能
- 以太网交换机手册以及相应的SDK手册、以太网协议规范
- RapidIO交换机芯片手册
第2章 驱动程序的分类
2.1 硬件设备树
2.2 SOC内部控制器自身的驱动程序(SOC芯片厂家提供)
- Uart串口
- 中断控制器
- SPI控制器
- GPI控制器
- I2C控制器
- 以太网控制器
- 总线控制器
- ......
2.3 SOC外部硬件设备的驱动程序(设备厂家自己提供)
- 以太网交换机:芯片厂家提供
- CPRI FPGA:设备厂家提供
- I2C device:设备厂家提供
- GPS receiver驱动:设备厂家提供
- I2C SFP device:设备厂家提供
- Flash驱动程序:设备厂家提供
第3章 基站设备常见的硬件驱动程序
3.1 CPU 物理地址空间(包括内存和外设统一编址)
3.2 设备驱动概览
在上图中:
HRAL子层:为OAM和应用程序提供硬件细节无关的、访问硬件设备功能的接口。
Driver子层:用户空间硬件设备驱动程序,需要访问硬件设备寄存器的信息。
内核子层:内核空间设备驱动程序,关注的是,如何为用户空间访问到硬件设备寄存器,不关心寄存器的内容。
3.3 I2C总线设备
- 温度传感器 * N
- OCXO E2PROM
- 电源管理芯片
- DAC
- 等等
3.4 SPI总线设备
- SPI Flash驱动 * N
- 锁相环驱动 * N
3.5 以太网控制器驱动
- 以太网控制器在SOC芯片内部,有SOC芯片厂家提供
3.6 以太网交换机驱动(SDK由芯片厂家提供)
3.7 中断管理
通过上图可以看出,大量的外设,都需要通过中断的方式通知CPU事件的发生。
然而,CPU的外部中断是及其有限的,这就需要进行复用。
FPGA就充当了大量外设复用中断的角色。
3.8 CPLD相关的驱动
- CPLD寄存器的读取
- I2C控制器
- SPI控制器
- 复位管理
- 看门狗管理
- 中断
- LED灯
- 风扇控制
- Jtag
- 其他杂散控制
备注:
从用户空间来看,CPLD就是一段内存结构化的内存空间。
内存空间的内容,就是CPLD的所有的寄存器。
用户空间的驱动程序就是操作CPLD的寄存器,从而控制或驱动CPLD的功能。
3.9 LED灯驱动程序
由于LED的数量是有限的,因此LED灯的颜色和含义是复用的,不同的状态会定义灯的不同颜色和含义。
3.10 以太网交换机驱动程序
以太网交换驱动程序是基于boardcom(博通)公司的SDK进行的进一步的封装。
SDK软件通过MII接口访问交换机内部的寄存器。
以太网交换机的主要功能包括
(1)管理面
- VLAN配置管理
(2)控制面
- 端口镜像,用于调试功能
- Jumbo Frame
- 多播地址,如syncE SSM多播包转发
3.11 Rapid IO
(1)OAM管理面
- 性能管理:性能统计
- 故障管理:错误、故障管理
- 状态管理:端口状态
(2)控制面
- 端口属性
- 环回检测
- SRIO地址映射(Radid IO窗口映射)
备注:
RapidIO是一个基于远程直接内存访问的高速串行通信协议,可以通过窗口进行地址空间的直接映射,这样就可以在互联设备之间(SOC/DSPx)直接进行数据的传输。
即SOC P4080可以直接访问DSP的内存内存空间,DSP也可以直接访问P4080的内存空间。
DSP_A可以直接访问DSP_B的内存空间。这就是RapidIO Switch的神奇的强大功能。
3.12 CFPGA功能的驱动
- 通过local bus访问CFPGA的寄存器
- 获取FPGA的版本
- 时钟同步功能
- SFN管理
- I2C设备驱动
- FPGA image的下载
- One wire control interface总线驱动
- RS422/485驱动
3.12 FPGA_A/B/C驱动
- CPRI功能驱动
3.13 传感器驱动
3.14 同步时钟驱动
时钟同步电路为整个硬件系统提供同步时钟。
同步时钟需要相依的驱动程序支持
- 相位检测(寄存器访问)
- GPS同步(1PPS + 频率) =》 GPS接收机驱动程序
- synce同步(频率)
- 1588/PTP同步(1PPS + 频率 + 硬件时间戳管理)
- OCXO控制 (DAC驱动)
- 10ms时钟对齐 (寄存器访问)
mda_sfp:Backhual I2C SFP驱动程序
mda_phy:Backhual PHY物理层芯片驱动程序
synce_SSM :同步以太网SSM驱动程序(通过raw socket获取数据)
GRIP Driver:GPS接收机驱动chengx
Uart driver:GPS接收机Uart驱动程序
PTP driver:PTP 1588驱动程序
OM Driver:晶振的驱动程序
drvclock:同步时钟选择驱动程序
syn:1PPS秒脉冲时钟同步算法
3.15 CPRI相关的驱动程序
- HQIQ驱动:CPRI互联总线驱动
- SBBLINK驱动:CPRI交换矩阵驱动
- CPRI驱动:RRU接口CPRI
- xocb驱动:RRU接口SFP驱动
3.16 启动杂散功能设备驱动
- one-wire外部总线告警驱动程序
- 设备自检驱动程序
- E2PROM驱动程序(uboot环境变量)
- .....