|
|
||
|---|---|---|
| PNNALiteDrv_2.1.6 | ||
| README.md | ||
README.md
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.6 和 PNNALiteDrv_2.4.11 表示驱动代码大版本;soc、pcie_ep 和 Bare_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 构建规则
各目录职责如下:
-
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 驱动:
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_ROOT 和 CROSS_COMPILE 修改为本地工具链路径。可使用以下命令清理构建产物:
./build_linux.sh <BOARD> release clean
使用注意事项
- 选择驱动前,先确认代码大版本、运行场景、目标 CPU 架构、Linux 内核版本和上层 SDK 版本。
soc、pcie_ep和Bare_metal的代码独立维护。PCIe EP 驱动包含 PCIe DMA 相关逻辑,不能以 SoC 驱动替代。- 不同代码大版本之间的 API、配置及二进制兼容性不作保证。应用头文件、用户态库、内核模块应来自同一版本和同一场景目录。
- 构建 Linux 内核模块前,必须准备目标内核对应的完整构建目录或 headers,并确保工具链与目标架构一致。
- 代码中的构建脚本可能包含特定开发环境路径。发布或使用前应根据本地环境修改工具链和内核路径,不应直接依赖脚本中的默认路径。
发布约定
每次对外发布应在 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 中的版本与场景状态。