交换机SDK架构与使用指南
SAI是一个标准化的API接口规范,而不是SDK本身。│ 应用层 (Application) │ ← 用户开发的程序│ ┃ SDK用户空间库 (User Library) ┃ │ ┐├────────────────────────────────────┤ ├─ SDK完整包│ ┃ SDK内核驱动 (Kernel Driver) ┃ │ ┘│ 硬件层 (Hardware) │ ← 交换芯片。
交换机SDK架构与使用指南
概述
交换机SDK(Software Development Kit,软件开发工具包)是芯片厂商提供的完整软件开发包,包含了从底层硬件驱动到上层API接口的整套解决方案。SDK不是单一层次的软件,而是一个跨越多个层次的完整软件包,通常包括:
- 内核驱动层:直接操作硬件的驱动程序
- 用户空间库:API接口库、硬件抽象层(HAL)
- 开发工具:配置工具、调试工具、诊断工具
- 文档与示例:API文档、应用示例代码
- 辅助组件:协议栈、管理框架等(可选)
关键理解:厂商发布SDK的目的是让用户能够直接使用,因此必须提供完整的驱动+API库,否则用户无法真正操作硬件。
文档导航
本指南分为以下几个部分:
📚 第一部分:架构基础
- 软件分层架构:理解SDK在整个软件栈中的位置
- SDK组成结构:SDK包含哪些组件(驱动、库、工具、文档)
- 主流SDK示例:Broadcom、Marvell、Realtek SDK的结构
🚀 第二部分:加载与初始化(核心内容)
- 第一阶段:PCIe设备枚举 - 系统如何发现交换芯片
- 第二阶段:SDK内核驱动加载 - 驱动模块加载与初始化
- 第三阶段:应用程序加载SDK - 链接库与API调用
- 第四阶段:SDK内部初始化 - bcm_init()详细流程
- 第五阶段:运行时操作 - 数据包收发与状态监控
🔧 第三部分:实战指南
- 完整代码示例:从初始化到配置端口的完整流程
- 常见问题排查:驱动加载失败、设备未识别、初始化错误
- 调试技巧:使用lspci、dmesg、bcm.user等工具
🌐 第四部分:标准化接口
- SAI与SDK的关系:理解SAI标准接口与厂商SDK的关系
- 多厂商集成架构:如何在一个系统中支持多种芯片
- 开发模式对比:传统模式 vs SAI模式
目录
软件分层架构
典型的交换机软件架构(从下到上)
┌─────────────────────────────────────┐
│ 应用层 (Application Layer) │ ← 用户开发的应用程序
│ - CLI命令行接口 │
│ - Web管理界面 │
│ - SNMP代理 │
│ - 业务逻辑应用 │
└─────────────────────────────────────┘
▲
│ API调用
▼
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ╔═════════════════════════════════╗ ┃
┃ ║ SDK用户空间层 (User Space) ║ ┃
┃ ║ - API接口库 (bcm_api.so) ║ ┃
┃ ║ - 硬件抽象层 (HAL) ║ ┃
┃ ║ - 配置管理、状态管理 ║ ┃
┃ ║ - SDK工具集 ║ ┃
┃ ╚═════════════════════════════════╝ ┃
┃ ▲ ┃
┃ │ ioctl/系统调用 ┃ ← SDK完整包
┃ ▼ ┃
┃ ╔═════════════════════════════════╗ ┃
┃ ║ SDK驱动层 (Kernel Space) ║ ┃
┃ ║ - 网络芯片驱动 (bcm_knet.ko) ║ ┃
┃ ║ - PHY驱动 ║ ┃
┃ ║ - DMA管理 ║ ┃
┃ ║ - 中断处理 ║ ┃
┃ ║ - 寄存器操作 ║ ┃
┃ ╚═════════════════════════════════╝ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
▲
│ 硬件访问(MMIO/PCI)
▼
┌─────────────────────────────────────┐
│ 硬件层 (Hardware Layer) │ ← 芯片厂商硬件
│ - ASIC芯片 (Broadcom/Marvell) │
│ - 网络处理器 │
│ - PHY物理层芯片 │
└─────────────────────────────────────┘
说明:大框内的所有内容(用户空间库+内核驱动)都是SDK的组成部分。
SDK的组成结构
SDK典型包含的组件
交换机SDK作为完整的开发包,通常包含以下组件:
| 组件类别 | 运行空间 | 主要内容 | 示例文件 |
|---|---|---|---|
| 内核驱动 | Kernel Space | 芯片驱动模块、DMA管理、中断处理 | linux-kernel-bde.ko, linux-user-bde.ko, bcm_knet.ko |
| 用户空间库 | User Space | API函数库、硬件抽象层 | libbcm.so, libopennsl.so |
| 头文件 | 编译时 | API声明、数据结构定义 | bcm/port.h, bcm/vlan.h |
| 开发工具 | User Space | 诊断工具、配置脚本、Shell | bcm.user, diag_shell |
| 文档 | - | API参考手册、编程指南 | API_Reference.pdf |
| 示例代码 | - | 示例应用、测试程序 | example_port.c |
SDK的分层职责
┌─────────────────────────────────────────────┐
│ SDK用户空间层 (SDK User Space Library) │
│ ───────────────────────────────────────── │
│ 职责: │
│ ✓ 提供高级API接口 │
│ ✓ 参数检查与转换 │
│ ✓ 硬件抽象与功能封装 │
│ ✓ 多线程安全保护 │
│ ✓ 错误处理与日志记录 │
└─────────────────────────────────────────────┘
▲
│ ioctl(), mmap(), read/write
▼
┌─────────────────────────────────────────────┐
│ SDK内核驱动层 (SDK Kernel Driver) │
│ ───────────────────────────────────────── │
│ 职责: │
│ ✓ 硬件资源管理(寄存器、内存映射) │
│ ✓ DMA缓冲区管理 │
│ ✓ 中断处理与事件通知 │
│ ✓ PCIe/I2C/SPI总线访问 │
│ ✓ 内核与用户空间数据交换 │
└─────────────────────────────────────────────┘
主流交换机SDK示例
1. Broadcom SDK (OpenNSL/SDKLT)
Broadcom SDK是业界最常用的交换机SDK之一:
┌─────────────────────────────────┐
│ 应用程序 (用户开发) │
└─────────────────────────────────┘
↓
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┌─────────────────────────────┐ ┃
┃ │ OpenNSL API / BCM API │ ┃ ← SDK用户空间库
┃ │ (libbcm.so, libopennsl.so) │ ┃
┃ └─────────────────────────────┘ ┃
┃ ↓ ┃
┃ ┌─────────────────────────────┐ ┃
┃ │ Kernel BDE / KNET Driver │ ┃ ← SDK内核驱动
┃ │ (linux-kernel-bde.ko) │ ┃
┃ └─────────────────────────────┘ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
↓
┌─────────────────────────────────┐
│ Broadcom ASIC (Trident/Tomahawk)│
└─────────────────────────────────┘
SDK包含:
- 驱动:
linux-kernel-bde.ko,linux-user-bde.ko,bcm_knet.ko - 库文件:
libbcm.so,libopennsl.so - 工具:
bcm.user(诊断shell)
2. Marvell CPSS SDK
┌─────────────────────────────────┐
│ 网络协议栈/应用 │
└─────────────────────────────────┘
↓
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┌─────────────────────────────┐ ┃
┃ │ CPSS API层 │ ┃ ← SDK用户空间
┃ └─────────────────────────────┘ ┃
┃ ↓ ┃
┃ ┌─────────────────────────────┐ ┃
┃ │ PSS驱动层 │ ┃ ← SDK内核驱动
┃ └─────────────────────────────┘ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
↓
┌─────────────────────────────────┐
│ Prestera交换芯片 │
└─────────────────────────────────┘
3. Realtek SDK
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┌─────────────────────────────┐ ┃
┃ │ RTK API (用户空间) │ ┃
┃ └─────────────────────────────┘ ┃
┃ ↓ ┃
┃ ┌─────────────────────────────┐ ┃
┃ │ RTK驱动 (内核模块) │ ┃
┃ └─────────────────────────────┘ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
↓
┌─────────────────────────────────┐
│ Realtek交换芯片 │
└─────────────────────────────────┘
SDK的主要功能模块
SDK提供的主要功能模块包括:
- 端口管理 (Port Management):端口初始化、使能/禁用、速度配置、双工模式设置、状态统计
- VLAN管理:VLAN创建/删除、端口加入/移出VLAN、VLAN配置管理
- MAC地址表管理:MAC地址学习、静态MAC配置、MAC老化时间设置、地址表查询
- ACL管理:访问控制列表规则创建、匹配条件设置、动作配置
- 统计信息获取:端口统计、流量统计、错误统计、性能监控
- 链路聚合 (LAG):端口聚合配置、负载均衡、故障切换
- QoS管理:优先级队列、流量整形、拥塞控制
- 镜像功能:端口镜像、流镜像、RSPAN配置
- 多播管理:IGMP Snooping、组播转发表、MLD配置
SDK加载与使用流程
完整的系统启动流程
从系统上电到SDK可用,需要经历以下关键步骤:
图1:SDK系统启动流程
┌─────────────────────────────────────────────────────────────┐
│ SDK系统启动完整流程 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ 系统上电 │ 阶段0:硬件启动
└────────┬────────┘
│
▼
┌─────────────────┐
│ BIOS/UEFI初始化 │ - PCIe控制器初始化
└────────┬────────┘
│
▼
┌─────────────────┐
│ PCIe总线枚举 │ - 扫描PCIe设备
└────────┬────────┘ - 分配资源(BAR、IRQ)
│
▼
┌─────────────────┐
│ 发现交换芯片设备 │ - 读取Vendor ID/Device ID
└────────┬────────┘
│
▼
┌─────────────────┐
│ Linux内核启动 │ 阶段1:操作系统启动
└────────┬────────┘
│
▼
╔═════════════════╗
║ 加载SDK内核驱动 ║ 阶段2:驱动加载 ⚙️
╚═══════┬═════════╝ - insmod linux-kernel-bde.ko
│ - insmod linux-user-bde.ko
▼ - insmod bcm_knet.ko
╔═════════════════╗
║ 驱动初始化硬件 ║ - 映射BAR地址
╚═══════┬═════════╝ - 分配DMA内存
│ - 注册中断处理
▼ - 创建设备文件
┌─────────────────┐
│ 应用程序启动 │ 阶段3:应用启动
└────────┬────────┘
│
▼
╔═════════════════╗
║ 加载SDK用户空间库║ 阶段4:SDK初始化 🚀
╚═══════┬═════════╝ - 链接libbcm.so
│ - 打开/dev/linux-kernel-bde
▼
╔═════════════════╗
║ SDK初始化 ║ - bcm_driver_init()
╚═══════┬═════════╝ - bcm_attach()
│ - bcm_init()
▼
┌─────────────────┐
│ 配置交换芯片 │ - 端口配置
└────────┬────────┘ - VLAN配置
│ - 启动Linkscan
▼
╔═════════════════╗
║ 系统就绪 ✓ ║ 阶段5:运行状态
╚═════════════════╝ 可以处理网络流量
第一阶段:PCIe设备枚举
1.1 硬件初始化
系统上电后,BIOS/UEFI负责初始化PCIe总线:
1. 系统上电 (Power On)
↓
2. BIOS/UEFI执行
↓
3. PCIe总线扫描
↓
4. 检测PCIe设备
- 读取配置空间
- 分配内存地址(BAR)
- 分配中断号(IRQ)
↓
5. 构建设备树
1.2 交换芯片被识别
系统启动后,可使用lspci命令查看PCIe设备是否被正确识别。
以Broadcom交换芯片为例,系统识别出的关键信息包括:
- Vendor ID:
14e4(Broadcom) - Device ID:
b850(BCM56850)、b960(BCM56960)等 - BAR地址: 内存映射基地址(如
f7000000、f6000000),用于访问芯片寄存器 - IRQ中断号: 分配给该设备的中断号(如50)
- 内存大小: 每个BAR映射的内存区域大小(通常16MB)
- PCIe功能: 支持的电源管理、MSI中断等能力
这些信息将在驱动初始化时使用,用于建立CPU与交换芯片之间的通信通道。
第二阶段:SDK内核驱动加载
2.1 驱动模块加载
使用insmod命令手动加载Broadcom SDK驱动模块:
linux-kernel-bde.ko- 内核设备驱动linux-user-bde.ko- 用户空间桥接驱动bcm_knet.ko- 网络内核模块
加载后可通过lsmod查看模块状态,通过dmesg查看内核日志确认设备被正确识别和初始化。
2.2 驱动初始化流程
内核驱动的初始化过程包括:
- 注册PCI驱动:向内核注册PCI设备驱动
- 设备探测(Probe):当匹配到设备时触发
- 使能PCI设备:激活PCI设备并设置为总线主控
- 内存映射:映射BAR0/BAR1到内核虚拟地址空间
- DMA分配:分配DMA缓冲区用于数据传输
- 中断注册:注册中断处理函数
- 字符设备创建:创建
/dev/linux-kernel-bde等设备文件 - 芯片复位:对交换芯片执行复位操作
2.3 创建的设备文件
驱动加载后会创建以下设备文件供用户空间访问:
/dev/linux-kernel-bde- 内核驱动接口/dev/linux-user-bde- 用户空间接口/dev/bcm-knet- 网络数据包接口
第三阶段:应用程序加载SDK
3.1 链接SDK库
应用程序编译时需要链接SDK库文件:
- 指定头文件路径(
-I):包含SDK API声明 - 指定库文件路径(
-L):指向SDK动态库位置 - 链接库文件(
-l):如libbcm.so、libopennsl.so
3.2 SDK初始化流程
应用程序的SDK初始化包括以下关键步骤:
步骤1:SDK系统初始化
- 调用SDK驱动初始化函数
- 建立用户空间与内核驱动的连接
步骤2:附加设备
- 指定要控制的芯片单元(unit)
- 指定芯片型号(如BCM56850)
- 附加成功后可对该设备进行操作
步骤3:初始化设备
- 触发SDK内部的完整初始化流程
- 包括芯片识别、内存分配、表项初始化等
步骤4:端口初始化
- 使能需要的端口
- 配置端口速度(1G/10G/25G/40G/100G)
- 设置双工模式(全双工/半双工)
步骤5:VLAN配置
- 创建VLAN
- 将端口加入VLAN
- 配置VLAN属性
步骤6:启动Linkscan
- 启动链路状态监控线程
- 设置扫描间隔
- 自动检测端口UP/DOWN状态
步骤7:进入运行状态
- 应用程序主循环运行
- 处理业务逻辑
- 响应链路状态变化
第四阶段:SDK内部初始化流程
4.1 bcm_init() 内部执行流程
bcm_init(unit)
↓
1. 芯片识别与验证
- 读取芯片ID寄存器
- 验证芯片型号
- 检查芯片版本
↓
2. 内存初始化
- 分配共享内存
- 初始化DMA描述符
- 设置内存保护
↓
3. 表项初始化
- L2地址表 (ARL)
- L3路由表
- ACL规则表
- VLAN表
↓
4. 端口子系统初始化
- PHY驱动加载
- 端口映射配置
- SerDes初始化
↓
5. 包处理引擎初始化
- RX DMA配置
- TX DMA配置
- CPU端口配置
↓
6. 协议栈初始化(可选)
- L2学习引擎
- STP协议
- IGMP Snooping
↓
7. 中断系统启用
- 注册中断回调
- 使能中断
↓
完成,返回BCM_E_NONE
4.2 关键数据结构
SDK内部维护设备控制块,用于管理芯片状态,包含以下关键信息:
- 设备单元号(unit)
- 芯片型号字符串
- 芯片ID和版本
- BAR地址映射
- DMA内存池
- 端口数量和端口信息数组
- 表项管理结构
- 线程和锁资源
第五阶段:运行时操作
5.1 数据包收发流程
发送数据包(TX):
- 分配包描述符
- 填充数据包内容
- 设置出端口
- 调用TX函数发送
- 释放包描述符
接收数据包(RX):
- 配置RX参数(包大小、队列深度、速率限制)
- 启动RX引擎
- 注册接收回调函数
- 在回调中处理接收到的数据包
- 返回处理结果
5.2 系统运行状态检查
SDK提供诊断工具(如bcm.user)用于查看系统运行状态:
端口统计信息:
- RX/TX数据包计数
- RX/TX字节数
- 错误计数器
- 丢包统计
端口状态信息:
- 端口状态(UP/DOWN)
- 速度(1G/10G/25G/40G/100G)
- 双工模式(FULL/HALF)
- 链路状态
- 自动协商状态
VLAN配置信息:
- VLAN列表
- 每个VLAN的成员端口
- VLAN属性
常见问题排查
问题1:驱动加载失败
排查步骤:
- 检查内核版本兼容性:使用
uname -r查看内核版本,确认驱动是否与该版本兼容 - 查看驱动编译信息:使用
modinfo命令查看驱动模块信息,确认编译参数正确 - 检查依赖关系:使用
lsmod查看模块是否加载,检查依赖模块 - 查看内核日志:使用
dmesg查看详细错误信息
常见原因:
- 内核版本不匹配
- 缺少依赖库或模块
- 驱动未正确编译
- 权限不足
问题2:设备未识别
排查步骤:
- 检查PCIe设备:使用
lspci命令查看设备是否被识别 - 检查硬件连接:确认芯片物理连接正常
- 检查设备文件:确认
/dev/linux-kernel-bde等设备文件已创建 - 检查设备权限:确保应用程序有权限访问设备文件
常见原因:
- 硬件故障或连接问题
- PCIe枚举失败
- 驱动未正确加载
- 设备文件权限错误
问题3:SDK初始化失败
排查步骤:
- 添加详细日志:在初始化失败时打印错误码和错误信息
- 检查设备状态:确认设备是否成功附加
- 验证配置文件:检查SDK配置是否正确
- 查看芯片状态:确认芯片是否处于正常工作状态
常见原因:
- 芯片型号不匹配
- 内存分配失败
- 配置参数错误
- 芯片复位失败
SAI与SDK的关系
SAI (Switch Abstraction Interface)
SAI是一个标准化的API接口规范,而不是SDK本身。
SAI的定位
┌─────────────────────────────────────┐
│ SONiC / 网络操作系统 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ SAI API (标准接口层) │ ← 统一的抽象接口
│ - sai_port_api_t │
│ - sai_vlan_api_t │
│ - sai_switch_api_t │
└─────────────────────────────────────┘
↓
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┌─────────────────────────────┐ ┃
┃ │ SAI实现 (厂商SDK适配层) │ ┃ ← 各厂商基于自己的SDK实现SAI
┃ │ - Broadcom SAI │ ┃
┃ │ - Marvell SAI │ ┃
┃ │ - Mellanox SAI │ ┃
┃ └─────────────────────────────┘ ┃
┃ ↓ ┃
┃ ┌─────────────────────────────┐ ┃
┃ │ 厂商SDK (驱动+API) │ ┃ ← 各厂商的原生SDK
┃ │ - Broadcom SDK │ ┃
┃ │ - Marvell CPSS │ ┃
┃ │ - Mellanox SX SDK │ ┃
┃ └─────────────────────────────┘ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
↓
┌─────────────────────────────────────┐
│ 交换芯片硬件 │
└─────────────────────────────────────┘
SAI与SDK的关系说明
| 对比项 | SDK | SAI |
|---|---|---|
| 本质 | 完整的软件开发包(驱动+API+工具) | 标准化的API接口规范 |
| 提供者 | 芯片厂商(Broadcom/Marvell等) | OCP社区/微软主导 |
| 包含内容 | 驱动、库文件、头文件、工具、文档 | 仅API头文件定义(.h) |
| 硬件相关 | 高度硬件相关 | 硬件无关(标准接口) |
| 实现方式 | 厂商直接提供 | 需要厂商基于SDK实现 |
| 应用场景 | 传统网络设备 | 白盒交换机、SDN |
SAI实现原理
厂商的SAI实现实际上是在原生SDK之上的一层适配器(Adapter):
SAI提供标准化的API接口定义,各厂商需要基于自己的SDK实现这些接口。当应用程序调用SAI接口时,SAI实现层会将标准调用映射到厂商特定的SDK API。例如:
- SAI的端口创建接口会调用Broadcom SDK的端口创建函数
- SAI的VLAN设置接口会映射到BCM的VLAN API
这种适配器模式使得应用程序可以使用统一的SAI接口,而无需关心底层使用的是哪个厂商的SDK。
开发模式对比
传统模式(直接使用厂商SDK)
应用程序 → Broadcom SDK → Broadcom芯片
应用程序 → Marvell SDK → Marvell芯片
应用程序 → Realtek SDK → Realtek芯片
问题:应用需要适配多个厂商的SDK
SAI模式(标准化接口)
应用程序 → SAI接口 → {Broadcom SAI实现 → Broadcom SDK}
→ {Marvell SAI实现 → Marvell SDK}
→ {Realtek SAI实现 → Realtek SDK}
优势:应用只需对接SAI,厂商负责实现SAI到SDK的映射
完整的交换机软件架构(Mermaid图)
多厂商SDK集成架构
下图展示了在Docker容器中运行的交换机应用如何通过SDK与不同厂商芯片交互:
图2:多厂商SDK集成架构图
架构说明
- 应用层:运行在Docker容器中的交换机应用程序
- SDK用户空间层:各厂商SDK提供的用户空间库(
.so文件) - SDK驱动层:各厂商SDK提供的内核驱动(
.ko模块) - 硬件层:物理交换芯片
关键点:
- SDK包含用户空间库和内核驱动两部分
- 用户空间库通过
ioctl/mmap与内核驱动通信 - 应用程序不直接访问硬件,必须通过SDK
结论
交换机SDK的准确定位
交换机SDK是完整的软件开发包,跨越驱动层和中间层,具有以下特点:
✅ 核心特征
- 包含驱动:提供内核驱动模块(
.ko)用于硬件访问 - 包含API库:提供用户空间库(
.so)供应用调用 - 完整方案:驱动+API+工具+文档的完整包
- 厂商提供:芯片厂商负责维护和发布
✅ 为什么包含驱动
- 用户需要直接可用的解决方案
- 驱动层是操作硬件的必要组件
- 厂商最了解自己的硬件特性
- 保证驱动与API的兼容性
✅ 与SAI的关系
- SAI是标准化的API接口规范
- SDK是厂商提供的完整实现
- SAI需要基于SDK实现(适配层)
- SDK可以独立使用,无需SAI
总结图示
┌────────────────────────────────────┐
│ 应用层 (Application) │ ← 用户开发的程序
├────────────────────────────────────┤
│ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ │
│ ┃ SDK用户空间库 (User Library) ┃ │ ┐
│ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │
├────────────────────────────────────┤ ├─ SDK完整包
│ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ │ │
│ ┃ SDK内核驱动 (Kernel Driver) ┃ │ ┘
│ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │
├────────────────────────────────────┤
│ 硬件层 (Hardware) │ ← 交换芯片
└────────────────────────────────────┘
参考资源
官方文档
- Broadcom SDK: OpenNSL Documentation
- Marvell CPSS: Marvell Prestera SDK Developer Guide
- SAI规范: Switch Abstraction Interface
- SONiC: Software for Open Networking in the Cloud
开源项目
- OpenNSL: Broadcom的开源SDK
- SAI实现: 各厂商的SAI适配层
- OF-DPA: OpenFlow数据平面抽象
- DPDK: 数据平面开发套件
技术文档
- Linux Kernel Driver Development
- PCI/PCIe Driver Programming
- Network Switch Architecture
- OCP (Open Compute Project) Switch Specifications
文档版本:v3.1
创建日期:2025年11月19日
更新日期:2025年11月19日
适用范围:网络设备、交换机、路由器SDK开发
主要修订:
- v1.0: 初始版本,基础层次架构介绍
- v2.0: 修正SDK定义为完整开发包(包含驱动+API),补充SAI关系
- v3.0: 新增SDK加载与使用流程(PCIe枚举、驱动加载、初始化、运行时操作),文档改名为《架构与使用指南》
- v3.1: 删除所有代码示例和数据结构定义,专注于架构原理和流程说明
文档内容覆盖:
- ✅ SDK概念与组成结构
- ✅ 软件分层架构
- ✅ 主流SDK示例(Broadcom/Marvell/Realtek)
- ✅ SDK加载与初始化完整流程(文字描述)
- ✅ PCIe设备枚举与驱动加载原理
- ✅ 应用程序开发流程说明
- ✅ SAI与SDK的关系
- ✅ 多厂商集成架构
- ✅ 常见问题排查思路
文档特点:
- 📖 纯理论与架构说明,无代码实现细节
- 🎯 适合理解SDK整体架构和工作原理
- 🔄 流程驱动,从上电到运行的完整过程
- 🌐 覆盖多厂商SDK和SAI标准化接口
更多推荐


所有评论(0)