天天看点

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

目录

​​前言:​​

​​第1章 驱动程序功能设计​​

​​1.1 关于用户空间驱动​​

​​1.2 硬件驱动程序的四大功能概述​​

​​1.3 OAM管理面功能:站在管理源的角度,看如何监控使能和监控硬件。​​

​​1.4 控制面功能:站在业务的角度看,如何使能和监控硬件​​

​​1.5 数据面功能:站在业务的角度看,软件如何读写或发送接收数据​​

​​1.6 同步面功能:时钟同步​​

​​1.7 设备驱动程序需要的技能和知识​​

​​第2章 驱动程序的分类​​

​​2.1  硬件设备树​​

​​2.2 SOC内部控制器自身的驱动程序(SOC芯片厂家提供)​​

​​2.3 SOC外部硬件设备的驱动程序(设备厂家自己提供)​​

​​第3章 基站设备常见的硬件驱动程序​​

​​3.1 CPU 物理地址空间(包括内存和外设统一编址)​​

​​3.2 设备驱动概览​​

​​3.3 I2C总线设备​​

​​3.4 SPI总线设备​​

​​3.5 以太网控制器驱动​​

​​3.6 以太网交换机驱动(SDK由芯片厂家提供)​​

​​3.7 中断管理​​

​​3.8 CPLD相关的驱动​​

​​3.9 LED灯驱动程序​​

​​3.10 以太网交换机驱动程序​​

​​3.11  Rapid IO​​

​​3.12 CFPGA功能的驱动​​

​​3.12 FPGA_A/B/C驱动​​

​​3.13 传感器驱动​​

​​3.14 同步时钟驱动​​

​​3.15 CPRI相关的驱动程序​​

​​3.16 启动杂散功能设备驱动​​

前言:

不同的硬件设备,其功能是千差万别的,本文跳出具体硬件的差别,试图阐述所有驱动程序共性的内容,并加以总结。

第1章 驱动程序功能设计

1.1 关于用户空间驱动

​​[架构之路-46]:目标系统 - 系统软件 - Linux OS硬件设备驱动-UIO用户空间IO驱动框架与用户空间协议栈_文火冰糖的硅基工坊的博客

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硬件设备驱动必须熟悉的六大工作机制之(并发与互斥、阻塞与非阻塞、异步通知)_文火冰糖的硅基工坊的博客

  • 异步通知:

​​[架构之路-37]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之:内存与IO访问、中断、定时与延时_文火冰糖的硅基工坊的博客

  • SOC芯片手册
  • 各种总线规范:I2C/SPI/RapidIO/eth/PCIe/Flash/......

(2)用户空间驱动

  • FPGA芯片手册,包含了定义的各种业务功能
  • 以太网交换机手册以及相应的SDK手册、以太网协议规范
  • RapidIO交换机芯片手册

第2章 驱动程序的分类

2.1  硬件设备树

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

2.2 SOC内部控制器自身的驱动程序(SOC芯片厂家提供)

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL
  • Uart串口
  • 中断控制器
  • SPI控制器
  • GPI控制器
  • I2C控制器
  • 以太网控制器
  • 总线控制器
  • ......

2.3 SOC外部硬件设备的驱动程序(设备厂家自己提供)

  • 以太网交换机:芯片厂家提供
  • CPRI FPGA:设备厂家提供
  • I2C device:设备厂家提供
  • GPS receiver驱动:设备厂家提供
  • I2C SFP device:设备厂家提供
  • Flash驱动程序:设备厂家提供

第3章 基站设备常见的硬件驱动程序

3.1 CPU 物理地址空间(包括内存和外设统一编址)

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

3.2 设备驱动概览

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

在上图中:

HRAL子层:为OAM和应用程序提供硬件细节无关的、访问硬件设备功能的接口。

Driver子层:用户空间硬件设备驱动程序,需要访问硬件设备寄存器的信息。

内核子层:内核空间设备驱动程序,关注的是,如何为用户空间访问到硬件设备寄存器,不关心寄存器的内容。

3.3 I2C总线设备

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL
  • 温度传感器 * N
  • OCXO E2PROM
  • 电源管理芯片
  • DAC
  • 等等

3.4 SPI总线设备

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL
  • SPI Flash驱动 * N
  • 锁相环驱动 * N 

3.5 以太网控制器驱动

  • 以太网控制器在SOC芯片内部,有SOC芯片厂家提供

3.6 以太网交换机驱动(SDK由芯片厂家提供)

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

3.7 中断管理

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

 通过上图可以看出,大量的外设,都需要通过中断的方式通知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

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

(1)OAM管理面

  • 性能管理:性能统计
  • 故障管理:错误、故障管理
  • 状态管理:端口状态

(2)控制面

  • 端口属性
  • 环回检测
  • SRIO地址映射(Radid IO窗口映射)
[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

 备注:

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 同步时钟驱动

[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

时钟同步电路为整个硬件系统提供同步时钟。

同步时钟需要相依的驱动程序支持

  • 相位检测(寄存器访问)
  • GPS同步(1PPS + 频率) =》 GPS接收机驱动程序
  • synce同步(频率)
  • 1588/PTP同步(1PPS + 频率 + 硬件时间戳管理)
  • OCXO控制 (DAC驱动)
  • 10ms时钟对齐 (寄存器访问)
[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL

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:晶振的驱动程序

3.15 CPRI相关的驱动程序

  •  HQIQ驱动:CPRI互联总线驱动
  • SBBLINK驱动:CPRI交换矩阵驱动
  • CPRI驱动:RRU接口CPRI
  • xocb驱动:RRU接口SFP驱动

3.16 启动杂散功能设备驱动

  • one-wire外部总线告警驱动程序
  • 设备自检驱动程序
  • E2PROM驱动程序(uboot环境变量)
  • .....

继续阅读