feat: add PNNALiteDrv 2.1.6 vpm_run samples
pnna2_driver 用于集中发布 PNNA / PNNA2 平台的 PNNALiteDrv 驱动源码。仓库按 PNNALiteDrv 的代码大版本和目标运行场景组织,便于使用者选择与硬件、操作系统及上层 SDK 相匹配的驱动实现。
pnna2_driver
PNNALiteDrv 包含 PNNA 设备驱动、硬件抽象层、NBG 解析与链接组件,以及对应用层开放的头文件。Linux 场景下,驱动的内核模块运行在内核空间,用户态库和头文件用于上层应用或 SDK 集成。
不同代码大版本及不同场景的实现存在较大差异,尤其是 PCIe EP 场景包含 PCIe DMA 相关实现,bare metal 场景使用独立的裸机适配。因此各目录中的代码应作为独立交付物使用,不应混合源码、头文件、编译产物或配置文件。
soc
pcie_ep
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.6 和 PNNALiteDrv_2.4.11 表示驱动代码大版本;soc、pcie_ep 和 Bare_metal 表示运行场景。后续新增同一大版本的补丁版本时,应在对应场景目录中通过 Git tag 标识,不应覆盖已发布版本。
PNNALiteDrv_2.1.6
PNNALiteDrv_2.4.11
每个 Linux 场景目录下的 PNNALiteDrv/ 均采用相同的核心源码组织形式:
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 构建规则
各目录职责如下:
common 包含 PNNALiteDrv 共用的源文件、编译配置和版本信息。其中 pnna_lite_config.h 用于控制部分驱动编译选项。
common
pnna_lite_config.h
include 包含对应用层公开的接口、公共类型、特性定义和头文件。应用或上层 SDK 应使用与所选驱动目录完全一致的头文件。
include
nbg_fmt 负责读取和解析 NBG 文件,并生成驱动可执行的 NBG 数据。
nbg_fmt
nbg_linker 负责 NBG 的重定位、链接及网络命令缓冲构建。
nbg_linker
pnna_hal 提供 PNNALite 的硬件抽象层,实现与具体硬件相关的访问和控制。
pnna_hal
pnna_drv 包含任务管理、视频内存管理、电源管理和设备管理等驱动层实现。Linux/Android 场景下,其中的内核模块运行在内核空间。
pnna_drv
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 配置:
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 仅打印最终构建配置,不执行编译。正式构建前,应先确认以下配置与目标环境一致:
-y
KERNEL_DIR Linux 内核构建目录或内核头文件目录 TOOLCHAIN_ROOT 交叉编译工具链根目录 CROSS_COMPILE 交叉编译器前缀 ARCH_TYPE 目标架构 VENDOR_NAME 厂商代码路径 SOC_CONFIG 板级或工程配置
这些参数目前在各目录的 build_linux.sh 中按目标板设置。KERNEL_DIR 必须与目标系统内核匹配,否则生成的模块可能无法加载;交叉编译时还需将 TOOLCHAIN_ROOT 和 CROSS_COMPILE 修改为本地工具链路径。可使用以下命令清理构建产物:
build_linux.sh
KERNEL_DIR
TOOLCHAIN_ROOT
CROSS_COMPILE
./build_linux.sh <BOARD> release clean
每次对外发布应在 master 分支提交完整源码,并为具体版本和场景创建明确的 Git tag,例如:
master
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驱动
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
pnna2_driver PNNALiteDrv 驱动仓库
概述
pnna2_driver用于集中发布 PNNA / PNNA2 平台的 PNNALiteDrv 驱动源码。仓库按 PNNALiteDrv 的代码大版本和目标运行场景组织,便于使用者选择与硬件、操作系统及上层 SDK 相匹配的驱动实现。PNNALiteDrv 包含 PNNA 设备驱动、硬件抽象层、NBG 解析与链接组件,以及对应用层开放的头文件。Linux 场景下,驱动的内核模块运行在内核空间,用户态库和头文件用于上层应用或 SDK 集成。
不同代码大版本及不同场景的实现存在较大差异,尤其是 PCIe EP 场景包含 PCIe DMA 相关实现,bare metal 场景使用独立的裸机适配。因此各目录中的代码应作为独立交付物使用,不应混合源码、头文件、编译产物或配置文件。
版本与场景说明
socpcie_epBare_metalsocpcie_epBare_metal目录结构与规划
下列为本仓库完整发布后的目标目录结构。当前分支仅包含表格中标注为“已提供”的源码;标注为待补充的目录将在对应驱动导入后出现。
目录名中的
PNNALiteDrv_2.1.6和PNNALiteDrv_2.4.11表示驱动代码大版本;soc、pcie_ep和Bare_metal表示运行场景。后续新增同一大版本的补丁版本时,应在对应场景目录中通过 Git tag 标识,不应覆盖已发布版本。PNNALiteDrv 源码目录职责
每个 Linux 场景目录下的
PNNALiteDrv/均采用相同的核心源码组织形式:各目录职责如下:
common包含 PNNALiteDrv 共用的源文件、编译配置和版本信息。其中pnna_lite_config.h用于控制部分驱动编译选项。include包含对应用层公开的接口、公共类型、特性定义和头文件。应用或上层 SDK 应使用与所选驱动目录完全一致的头文件。nbg_fmt负责读取和解析 NBG 文件,并生成驱动可执行的 NBG 数据。nbg_linker负责 NBG 的重定位、链接及网络命令缓冲构建。pnna_hal提供 PNNALite 的硬件抽象层,实现与具体硬件相关的访问和控制。pnna_drv包含任务管理、视频内存管理、电源管理和设备管理等驱动层实现。Linux/Android 场景下,其中的内核模块运行在内核空间。Linux 构建说明
Linux 驱动从对应场景目录下的
PNNALiteDrv/开始构建。例如构建 2.1.6 SoC 驱动:构建 PCIe 场景时,进入对应目录后选择构建脚本支持的目标板配置。例如当前脚本包含
ARM64_PCIE_PNNA2配置:-y仅打印最终构建配置,不执行编译。正式构建前,应先确认以下配置与目标环境一致:这些参数目前在各目录的
build_linux.sh中按目标板设置。KERNEL_DIR必须与目标系统内核匹配,否则生成的模块可能无法加载;交叉编译时还需将TOOLCHAIN_ROOT和CROSS_COMPILE修改为本地工具链路径。可使用以下命令清理构建产物:使用注意事项
soc、pcie_ep和Bare_metal的代码独立维护。PCIe EP 驱动包含 PCIe DMA 相关逻辑,不能以 SoC 驱动替代。发布约定
每次对外发布应在
master分支提交完整源码,并为具体版本和场景创建明确的 Git tag,例如:新增 2.4.11 或 bare metal 源码时,应放入对应目录并同步更新本 README 中的版本与场景状态。