驱动部分 1 主机和操作系统环境介绍

PCIe SerDes 全流程实战

驱动部分——主机和操作系统环境介绍

1 驱动的意义

PCIe 的应用层采用内存语义。当 DMA 将数据写入内存后,主机程序只需读取内存即可获得数据,那么为何仍需要驱动?
在嵌入式等简单场景下,这样的直接读写确实足够。但在高性能计算环境中,现实系统往往由众多程序与驱动共同协作,还必须综合考虑 SoC 与硬件缓存、AXI 总线、内存、硬盘、网络、操作系统线程与进程、中断、内核态与用户态、虚拟化以及安全机制等因素。驱动正是协调这些组件共同工作的关键纽带。

2 主机(RC)硬件配置

  • CPU:AMD 5700G
  • 主板:华硕 B550M PLUS
  • 启动介质:U 盘(UEFI 引导)

3 操作系统

本项目选用由 Rust 编写的 Redox OS 运行于实际硬件平台。
选择 Redox 而非 Linux 的原因与 1.1 小节相同:驱动的价值不止于设备本身,更在于与 SoC、系统组件及上层算法的协同。Redox 仅用不到 3 000 行代码实现了基础且可用的 PCIe 驱动,非常适合初学者学习 PCIe 驱动和操作系统。
驱动代码仓库:https://gitlab.redox-os.org/redox-os/drivers

4 Redox 操作系统的编译

5 硬件设备连接

鉴于 Redox 对部分主板外设(USB 与网络)支持尚不完善,本项目通过串口与 PS/2 设备进行交互。

  • 主机 ↔ 串口 ↔ CH340/USB ↔ 上位机
  • 主机 ↔ PS/2 键盘 / 鼠标
  • 主机 ← U 盘启动 Redox OS
  • 主机(5700G + B550M + Redox OS)↔ PCIe插槽 ↔ XCKU5P FPGA(Xilinx PCIe PHY + PCIe IP + 矩阵加法模块)

alt text