驱动部分 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 操作系统的编译
- 编译环境:Ubuntu 22.04
- 官方指南:https://doc.redox-os.org/book/podman-build.html
- 在网络通畅条件下,首次完整编译用时通常不超过 1 小时
- 编译完成后,可直接写入 USB 设备用于启动
5 硬件设备连接
鉴于 Redox 对部分主板外设(USB 与网络)支持尚不完善,本项目通过串口与 PS/2 设备进行交互。
- 主机 ↔ 串口 ↔ CH340/USB ↔ 上位机
- 主机 ↔ PS/2 键盘 / 鼠标
- 主机 ← U 盘启动 Redox OS
- 主机(5700G + B550M + Redox OS)↔ PCIe插槽 ↔ XCKU5P FPGA(Xilinx PCIe PHY + PCIe IP + 矩阵加法模块)