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

news/2026/1/20 21:43:15/文章来源:https://www.cnblogs.com/g777isbest/p/19508873

此项目是一个 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.mzph.cn/news/1190894.shtml

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

相关文章

大数据毕设项目:基于机器学习的网络购物平台的智能推荐(源码+文档,讲解、调试运行,定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

一文看透:提示工程架构师如何玩转智能教育提示工程

一文看透:提示工程架构师如何用「语言魔法」重构智能教育? 关键词 提示工程、智能教育、大语言模型(LLM)、个性化学习、认知负荷、反馈循环、教育Prompt设计 摘要 当你打开某款AI辅导APP,问「为什么月亮会跟着我走&…

深度探索篇!提示工程架构师解读自动驾驶提示工程

深度探索篇!提示工程架构师解读自动驾驶提示工程 一、引言 自动驾驶作为当前科技领域的前沿热点,融合了众多复杂的技术,从传感器感知到决策规划,每一步都关乎着行车的安全与效率。在这个过程中,提示工程逐渐崭露头角,它为自动驾驶系统提供了一种全新的思路和方法,能够…

AI 学术科研与论文写作的正确打开方式!不套提示词模板,靠这个思路完美实现人机共创

用AI辅助学术写作时,大多数人都在教怎么套用所谓的提示词模板,最后来不及用,还不是收藏夹落灰。 七哥之所以给出AI提示词模板,并不是让你们直接套用,而是根据自己的需求,一次写不好,就让AI反复改。 其实很多时候,我们只有模糊的需求,并不知道自己想得到什么内容。一…

solaris 设置永久静态路由

1. 查看永久路由: # route -p show2. 添加永久路由: # route -p add 10.10.10.0/24 192.168.1.13.删除永久路由: # route -p delete 10.10.10.0/24 192.168.1.14.查看路由表 $ route -p show $ net…

Excel高频技巧应对工作难题

Excel高频技巧应对工作难题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

【前瞻创想】Kurator:站在巨人肩膀上的分布式云原生创新实践 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

救命神器!9款AI论文写作软件测评:研究生毕业论文必备工具推荐

救命神器!9款AI论文写作软件测评:研究生毕业论文必备工具推荐 学术写作新工具测评:2026年AI论文软件全面解析 随着人工智能技术的不断进步,AI论文写作工具逐渐成为研究生群体在撰写毕业论文时的重要辅助。然而,市面上产…

20260120 省选模拟赛

20260120 省选模拟赛 https://htoj.com.cn/cpp/oj/contest/detail?cid=22635323962240 Problem B. 白点黑点 对于度数序列,求出它能构造出的最大匹配有哪些。 最大匹配考虑 Hall 定理。对于一个集合 \(S\),其 \(|N(…

国内网络环境下 MiniConda + Jupyter + ChromaDB 安装教程

国内网络环境下 MiniConda + Jupyter + ChromaDB 安装教程国内网络环境下 MiniConda + Jupyter + ChromaDB 安装教程 针对国内网络环境,使用国内镜像源加速下载。 第一部分:安装 MiniConda(使用国内下载源) 步骤 1…

大数据领域列式存储:加速数据查询的利器

大数据领域列式存储:加速数据查询的利器 关键词:列式存储、行式存储、数据压缩、大数据查询、存储架构、Parquet、数据仓库 摘要:在大数据时代,"数据查询慢"是许多企业的痛点——当你需要从TB级数据中提取某几列的统计结…

JavaScript对象深浅拷贝及解析

JavaScript对象深浅拷贝及解析下面这段代码使用了 JavaScript 中的对象展开运算符(...),核心作用是创建一个 obj1 的浅拷贝对象 obj2。1. 基础用法示例先看一个完整的可运行示例,帮你理解效果:// 原始对象 const …

sfda

hello world

大数据毕设项目:基于django的电子产品电商平台主数据管理系统(源码+文档,讲解、调试运行,定制等)

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

[豪の算法奇妙冒险] 代码随想录算法训练营第三十四天 | 62-不同路径、63-不同路径Ⅱ

LeetCode62 不同路径、LeetCode63 不同路径Ⅱ代码随想录算法训练营第三十四天 | 62-不同路径、63-不同路径ⅡLeetCode62 不同路径题目链接:https://leetcode.cn/problems/unique-paths/ 文章讲解:https://programmer…

第 471 场周赛Q1——3712. 出现次数能被 K 整除的元素总和

题目链接:3712. 出现次数能被 K 整除的元素总和(简单) 算法原理: 解法:哈希表 3ms击败54.15% 时间复杂度O(N) 思路很简单,先利用哈希表把数组中出现的元素对应的次数统计出来,然后遍历判断其次数…

C++课后习题训练记录Day71

1.练习项目: 题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词&#xff0c…

【Android 美颜相机】第十天:YUV420SP和RGB

YUV420SP转RGB及位图 本文将详细解析yuv-decoder.c文件中的JNI代码,该代码运行在Android平台,通过C语言实现YUV420SP格式图像数据到RGBA/ARBG格式的转换,以及位图像素调整功能,借助JNI完成Java与C层的交互,兼顾图像处理…

fpga 低频模块和高频模块之间单脉冲信号传输 verilog

User: fpga 低频模块和高频模块之间单脉冲信号传输 verilog Kimi: 在 FPGA 里,低频时钟域(<几十 MHz)和高频时钟域(>100 MHz)之间如果只用一根线传“单脉冲”,最核心的问题是: 高频域对这根线的采样窗口非…

CAD一键批量标注线长度——CAD c#二次开发

效果如下&#xff1a;支持直线、多段线、圆、圆弧、椭圆、椭圆弧、样条曲线、云线等曲线。