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

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-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驱动框架与用户空间协议栈_文火冰糖的硅基工坊的博客-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环境变量)
  • .....

以上是关于[架构之路-57]:目标系统 - 平台软件 - 用户空间驱动与硬件抽象层HAL的主要内容,如果未能解决你的问题,请参考以下文章

[架构之路-58]:目标系统 - 平台软件 - 中间件软件(嵌入式)与中间件平台(中台)

[架构之路-61]:目标系统 - 平台软件 - 基础中间件 - 远程过程(函数)调用RPC原理与其网络架构

[架构之路-60]:目标系统 - 平台软件 - 基础中间件 - Linux进程间通信的主要方式

[架构之路-59]:目标系统 - 平台软件 - 基础中间件 - POSIX(可移植操作系统接口)与标准库函数libc

[架构之路-63]:目标系统 - 平台软件 - 基础中间件 - TIPC透明进程间通信与AF_TIPC Socket

[架构之路-19]:目标系统 - 硬件平台 - 案例1 - 用单片机STM8/STM32搭建目标系统(以无线传感器LoRa终端为例)