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

news2024/11/18 21:50:21

目录

前言:

第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环境变量)
  • .....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Android的五子棋游戏APP设计

目 录 第一章:绪论 1 1.1智能手机与Android系统的发展历程 1 1.1.1 智能手机 1 1.1.2 Android系统基本情况介绍 2 1.2课题现状及应用前景 3 1.2.1 五子棋简介 3 1.2.2 课题现状及应用前景 3 第二章:开发环境的搭建 5 2.1 系统开发环境 5 2.2 系统开发环境…

SpringCould(一)

视频链接:https://www.bilibili.com/video/BV1f94y1U7AB/?vd_source9545770e4a2968c05878ffac8589ec6c 视频选集:P1— P15 文章目录1.微服务简介1.1 单体架构不足1.2 微服务1.3 微服务的特点1.4 微服务的自动部署(CI/CD)(持续集成…

一文了解数据结构

目录 数据结构 什么是数据结构 链表 数组 栈 队列 哈希表 堆 数据结构 什么是数据结构 「数据结构」决定了数据的顺序和位置关系.数据存储于内存时,决定了数据顺序和位置关系的便是「数据结构」 链表 「链表」中的数据呈线性排列。链表中添加删除数据比较…

多旋翼无人机仿真 rotors_simulator:基于PID控制器的位置控制---水平位置控制

多旋翼无人机仿真 rotors_simulator:基于PID控制器的位置控制---水平位置控制前言水平位置控制串级P控制收敛结果收敛过程串级PID控制收敛结果收敛过程结果总结前言 无人机(Unmanned Aerial Vehicle),指的是一种由动力驱动的、无…

机器学习从零到入门 GBDT 梯度提升决策树

GBDT 梯度提升决策树详解一、 梯度的概念1、日常生活中的梯度2、函数中的梯度2.1、走进数学2.2、从数学到机器学习(1)、损失函数的理解 loss function(2)、梯度的理解 gradient(3)、损失函数的梯度下降二、GBDT1、回归树 - Regression Decision Tree,DT2、梯度提升 …

利用Python实现mysql数据库的基础操作

一:环境准备: 1.安装第三方库:pymsql 在pycharm的terminal中执行命令:pip3 install pymsql 2.导入第三方库到py文件中 import pymsql 二:创建mysql数据库的链接对象: 1.封装一个Python类,在该…

Python爬虫入狱小技巧

呀,来坐牢的是吧,坐牢是不可能坐牢的,骚年,下面就是方法,早上学,晚上进去 一、整体思路 爬虫一开始要把思路理清楚,即从网页源代码或者网页数据接口,获取需要的数据.大致思路如下 …

【Java进阶】JUC并发基础

文章目录1.概念1.1 什么是JUC1.2 线程与进程1.3 线程的几种状态1.4 守护线程1.5 死锁与活锁1.6 乐观锁与悲观锁1.7 自旋锁2.Lock2.1 使用Lock2.2 Lock与Synchronized2.3 虚假唤醒3.八锁问题3.1 创建一个Phone实例多线程调用两个方法3.2 创建一个Phone实例多线程调用两个方法&am…

基于热传导矩阵(HCM)边缘检测方法在红外图像中的应用(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

3道真题训练|学会链表的前世今生

🙋很多朋友都问我学完基础知识以后怎样提高编程水平?当然是刷题啦!很多小伙伴都在纠结从哪里开始,今天给大家推荐一个身边朋友都在使用的刷题网站:点击进入牛客网刷题吧! 🙋‍♂️今天是Java …

中文文本分类,基本模型的pytoch实现

学习说明:最近发现了一个宝藏仓库,将常见的文本分类方法做了一个介绍、及封装。现在将学习这仓库的一些笔记记录如下 参照资料 649453932/Chinese-Text-Classification-Pytorch: 中文文本分类,TextCNN,TextRNN,FastT…

宣布 .NET MAUI 支持 .NET 7 Release Candidate 2

支持 .NET 7 Release Candidate 2的 .NET 多平台应用程序 UI (MAUI) 现在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主题是质量和对带有 iOS 16 的 Xcode 14 的 .NET 支持。此版本包含在生产中使用的上线支持许可证。 在相关新闻中&#xff0…

Linux 内存node和zone

文章目录前言一、内存模型二、(N)UMA2.1 简介2.2 节点2.3 UMA节点与Flat Memory Model2.4 zone2.4.1 zone2.4.2 zone_type参考资料前言 一、内存模型 所谓memory model,其实就是从cpu的角度看,其物理内存的分布情况,…

图解操作系统-cpu cache

不同物理器件的访问速度不一:速度快的代价高、容量小;代价低且容量大,速度较慢。 为充分发挥各种器件优点,计算机存储数据的物理器件不会只选择一种,而是以CPU为核心,由内而外地组建一整套存储体系结构。它…

亿可控_第2章_指标数据采集与断连监控

亿可控_第2章_指标数据采集与断连监控 文章目录亿可控_第2章_指标数据采集与断连监控第2章 指标数据采集与断连监控学习目标1. EMQ指标主题订阅1.1 Eclipse paho简介1.2 发送与订阅消息1.2.1 发送消息1.2.2 订阅消息1.3 订阅指标主题1.3.1 需求分析1.3.2 实现思路1.3.3 代码实现…

23模式---单例模式

单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例) 这个也是23设计模型中最…

Python 图像处理OpenCV:几何变换(笔记)

包括图像缩放、图像平移、图像旋转、图像的仿射变换、图像的透射变换及图像金字塔等内容。 图像缩放: 缩放是对图像的大小进行调整,即使图像放大或缩小。cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)src : 输入图像dsize: 绝对尺寸&a…

Linux运维面试题总结—Linux基础、计算机网络基础

文章目录一、三次握手四次挥手二、如何划分vlan三、为什么划分vlanvlan三个模式:vxlan和vlan区别是什么?四、OSI七层模型及对应协议五、Linux中 查找大于10M的文件并删除六、查看cup占用情况,查看内存,查看磁盘IO使用情况&#xf…

图像处理黑科技——弯曲矫正、去摩尔纹、切边增强、PS检测

目录0 前言1 弯曲矫正2 去摩尔纹3 图像切边增强4 PS检测5 总结0 前言 合合信息是行业领先的人工智能及大数据科技企业,专注文字识别领域16年,在智能文字识别及商业大数据等核心领域处于国内领先地位,全球企业和个人用户提供创新的数字化、智…

代码随想录动态规划——一和零

题目 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:strs [“10…