目录

pnna2_driver PNNALiteDrv 驱动仓库

概述

pnna2_driver 用于集中发布 PNNA / PNNA2 平台的 PNNALiteDrv 驱动源码。仓库按 PNNALiteDrv 的代码大版本和目标运行场景组织,便于使用者选择与硬件、操作系统及上层 SDK 相匹配的驱动实现。

PNNALiteDrv 包含 PNNA 设备驱动、硬件抽象层、NBG 解析与链接组件,以及对应用层开放的头文件。Linux 场景下,驱动的内核模块运行在内核空间,用户态库和头文件用于上层应用或 SDK 集成。

不同代码大版本及不同场景的实现存在较大差异,尤其是 PCIe EP 场景包含 PCIe DMA 相关实现,bare metal 场景使用独立的裸机适配。因此各目录中的代码应作为独立交付物使用,不应混合源码、头文件、编译产物或配置文件。


版本与场景说明

代码大版本 场景 说明 当前状态
PNNALiteDrv 2.1.6 soc SoC Linux 平台驱动 已提供
PNNALiteDrv 2.1.6 pcie_ep PCIe EP 场景驱动 已提供
PNNALiteDrv 2.1.6 Bare_metal 裸机驱动 目录预留,待补充源码
PNNALiteDrv 2.4.11 soc SoC Linux 平台驱动 待补充
PNNALiteDrv 2.4.11 pcie_ep PCIe EP 场景驱动 待补充
PNNALiteDrv 2.4.11 Bare_metal 裸机驱动 待补充

目录结构与规划

下列为本仓库完整发布后的目标目录结构。当前分支仅包含表格中标注为“已提供”的源码;标注为待补充的目录将在对应驱动导入后出现。

pnna2_driver/
├── PNNALiteDrv_2.1.6/
│   ├── soc/
│   │   └── PNNALiteDrv/            # SoC Linux 驱动源码
│   ├── pcie_ep/
│   │   └── PNNALiteDrv/            # PCIe EP 驱动源码
│   └── Bare_metal/                 # 裸机驱动预留目录
├── PNNALiteDrv_2.4.11/             # 2.4.11 各场景驱动待补充
│   ├── soc/
│   ├── pcie_ep/
│   └── Bare_metal/
└── README.md

目录名中的 PNNALiteDrv_2.1.6PNNALiteDrv_2.4.11 表示驱动代码大版本;socpcie_epBare_metal 表示运行场景。后续新增同一大版本的补丁版本时,应在对应场景目录中通过 Git tag 标识,不应覆盖已发布版本。

PNNALiteDrv 源码目录职责

每个 Linux 场景目录下的 PNNALiteDrv/ 均采用相同的核心源码组织形式:

PNNALiteDrv/
├── build/                  # SDK 输出及构建相关目录
├── common/                 # 公共源文件、配置和版本信息
├── include/                # 对应用层开放的头文件
├── nbg_fmt/                # NBG 文件解析与可执行 NBG 生成
├── nbg_linker/             # NBG 重定位、链接与命令缓冲构建
├── pnna_drv/               # Linux/Android 内核驱动和设备管理实现
├── pnna_hal/               # 硬件抽象层
├── build_linux.sh          # Linux 构建入口
├── makefile.linux          # Linux 构建规则
└── Android.mk              # Android 构建规则

各目录职责如下:

  1. common 包含 PNNALiteDrv 共用的源文件、编译配置和版本信息。其中 pnna_lite_config.h 用于控制部分驱动编译选项。

  2. include 包含对应用层公开的接口、公共类型、特性定义和头文件。应用或上层 SDK 应使用与所选驱动目录完全一致的头文件。

  3. nbg_fmt 负责读取和解析 NBG 文件,并生成驱动可执行的 NBG 数据。

  4. nbg_linker 负责 NBG 的重定位、链接及网络命令缓冲构建。

  5. pnna_hal 提供 PNNALite 的硬件抽象层,实现与具体硬件相关的访问和控制。

  6. pnna_drv 包含任务管理、视频内存管理、电源管理和设备管理等驱动层实现。Linux/Android 场景下,其中的内核模块运行在内核空间。

Linux 构建说明

Linux 驱动从对应场景目录下的 PNNALiteDrv/ 开始构建。例如构建 2.1.6 SoC 驱动:

cd PNNALiteDrv_2.1.6/soc/PNNALiteDrv
./build_linux.sh -y yhft release
./build_linux.sh yhft release

构建 PCIe 场景时,进入对应目录后选择构建脚本支持的目标板配置。例如当前脚本包含 ARM64_PCIE_PNNA2 配置:

cd PNNALiteDrv_2.1.6/pcie_ep/PNNALiteDrv
./build_linux.sh -y ARM64_PCIE_PNNA2 release
./build_linux.sh ARM64_PCIE_PNNA2 release

-y 仅打印最终构建配置,不执行编译。正式构建前,应先确认以下配置与目标环境一致:

KERNEL_DIR       Linux 内核构建目录或内核头文件目录
TOOLCHAIN_ROOT   交叉编译工具链根目录
CROSS_COMPILE    交叉编译器前缀
ARCH_TYPE        目标架构
VENDOR_NAME      厂商代码路径
SOC_CONFIG       板级或工程配置

这些参数目前在各目录的 build_linux.sh 中按目标板设置。KERNEL_DIR 必须与目标系统内核匹配,否则生成的模块可能无法加载;交叉编译时还需将 TOOLCHAIN_ROOTCROSS_COMPILE 修改为本地工具链路径。可使用以下命令清理构建产物:

./build_linux.sh <BOARD> release clean

使用注意事项

  1. 选择驱动前,先确认代码大版本、运行场景、目标 CPU 架构、Linux 内核版本和上层 SDK 版本。
  2. socpcie_epBare_metal 的代码独立维护。PCIe EP 驱动包含 PCIe DMA 相关逻辑,不能以 SoC 驱动替代。
  3. 不同代码大版本之间的 API、配置及二进制兼容性不作保证。应用头文件、用户态库、内核模块应来自同一版本和同一场景目录。
  4. 构建 Linux 内核模块前,必须准备目标内核对应的完整构建目录或 headers,并确保工具链与目标架构一致。
  5. 代码中的构建脚本可能包含特定开发环境路径。发布或使用前应根据本地环境修改工具链和内核路径,不应直接依赖脚本中的默认路径。

发布约定

每次对外发布应在 master 分支提交完整源码,并为具体版本和场景创建明确的 Git tag,例如:

pnna-lite-drv-v2.1.6-soc-r1
pnna-lite-drv-v2.1.6-pcie-ep-r1

新增 2.4.11 或 bare metal 源码时,应放入对应目录并同步更新本 README 中的版本与场景状态。

关于

PNNA2部件的PNNALiteDrv驱动

1.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号