hailo-PCIe驱动源码阅读(一)-代码整体架构
此项目是一个 Linux 内核驱动工程,主要用于支持 Hailo 的 AI 加速芯片。项目源码地址:https://github.com/hailo-ai/hailort-drivers.git
整体架构

代码总共分为5个部分:
- common:跨平台/跨驱动通用的基础定义和逻辑;
- linux/integrated_nnc:针对集成在 SoC 内部的 Hailo NNC(神经网络核心)的驱动。
- linux/pcie:针对通过 PCIe 接口连接的 Hailo 设备的驱动。
- linux/utils:驱动的辅助函数;
- linux/vdma : 通用的 DMA 模块,被 PCIe 和 Integrated 驱动复用。
common

fw_operation.h / .c:与固件交互的操作接口;
fw_validation.h / .c:固件文件的校验;
hailo_ioctl_common.h:定义了 IOCTL 命令码、驱动版本号、以及一些关键的硬件参数常量(如最大 VDMA 通道数);
hailo_resource.h / .c:定义了硬件资源结构体,并封装了读写寄存器/内存的函数,屏蔽了底层总线差异;
logs.h:日志相关;
pcie_common.h / .c:定义了 PCIe BAR 空间的布局(配置 BAR, VDMA BAR, FW Access BAR)、设备 ID (Vendor/Device ID)、中断掩码以及 PCIe 加载阶段的枚举;
soc_structs.h:定义 SoC 与设备通信的数据结构;
utils.h:通用工具;
vdma_common.h / .c:DMA 相关的通用结构体。
linux/integrated_nnc

src/main.c:平台驱动入口,注册 platform_driver ,解析设备树 (Device Tree) 获取内存区域和中断号,初始化集成 NNC 设备;
src/board.h:定义不同集成板卡(如 Hailo-15H, Hailo-15L)的中断偏移、共享内存布局等特定参数;
src/dram_vdma.c / .h:基于 DRAM 的数据传输;
src/file_operations.c / .h:驱动的文件操作,处理用户空间的打开、关闭和 IOCTL 请求;
src/integrated_nnc_cpu.c / .h:负责加载固件到指定的内存区域(SRAM/DDR),控制 NNC 核心的复位 ( reset_control ) 和启动流程;
src/fw_control.c / .h , src/fw_notification.c / .h:使用 Linux Mailbox 子系统 ( mbox_client ) 与固件进行通信,而不是 PCIe 寄存器。
linux/pcie

src/pcie.c / .h:驱动的核心入口;
src/fops.c / .h:文件操作的实现;
src/nnc.c / .h:处理与 NNC 固件的控制消息交互,包括发送控制命令、等待响应、处理固件发来的异步通知;
src/soc.c / .h:SoC 模式下的通信逻辑;
src/sysfs.c / .h:Sysfs 属性节点,在 /sys/class/hailo/ 下暴露设备信息,如板卡位置、设备 ID、加速器类型等,方便用户空间查询硬件状态。
linux/vdma

vdma.c / .h:DMA 引擎管理;
memory.c / .h:内存映射与管理;
ioctl.c / .h:DMA 相关的 IOCTL 实现。

浙公网安备 33010602011771号