当前位置: 首页 > news >正文

hailo-PCIe驱动源码阅读(一)-代码整体架构

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

整体架构

image
代码总共分为5个部分:

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

common

image
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

image
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

image
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

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

http://www.jsqmd.com/news/275127/

相关文章:

  • 大数据毕设项目:基于机器学习的网络购物平台的智能推荐(源码+文档,讲解、调试运行,定制等)
  • AI 学术科研与论文写作的正确打开方式!不套提示词模板,靠这个思路完美实现人机共创
  • 深度探索篇!提示工程架构师解读自动驾驶提示工程
  • solaris 设置永久静态路由
  • 【前瞻创想】Kurator:站在巨人肩膀上的分布式云原生创新实践 - 指南
  • 救命神器!9款AI论文写作软件测评:研究生毕业论文必备工具推荐
  • Excel高频技巧应对工作难题
  • 20260120 省选模拟赛
  • 大数据领域列式存储:加速数据查询的利器
  • 国内网络环境下 MiniConda + Jupyter + ChromaDB 安装教程
  • JavaScript对象深浅拷贝及解析
  • sfda
  • [豪の算法奇妙冒险] 代码随想录算法训练营第三十四天 | 62-不同路径、63-不同路径Ⅱ
  • 大数据毕设项目:基于django的电子产品电商平台主数据管理系统(源码+文档,讲解、调试运行,定制等)
  • microblaze是怎么通过把数据通过axi总线给到ip的
  • C++课后习题训练记录Day71
  • 【Android 美颜相机】第十天:YUV420SP和RGB
  • fpga 低频模块和高频模块之间单脉冲信号传输 verilog
  • CAD一键批量标注线长度——CAD c#二次开发
  • 【Android 美颜相机】第十一天:GPUImageFilter解析
  • 换根 DP 简介
  • 【毕业设计】基于机器学习的网络购物平台的智能推荐(源码+文档+远程调试,全bao定制等)
  • 强烈安利8个AI论文软件,本科生搞定毕业论文!
  • 强烈安利8个AI论文软件,本科生搞定毕业论文!
  • 第 470 场周赛Q2——3702. 按位异或非零的最长子序列
  • 文字标注旋转角度设置(防止文字倒立)
  • 储能辅助电力系统调峰的容量需求研究 Matlab代码
  • 咋的,寒假 1 个月学门黑客技术,难道很难吗?
  • 储能辅助电力系统调峰的容量需求研究 Matlab代码
  • 【Matlab】 CRC-8 计算数组Checknum