Network Switching Software Platform Guide学习笔记

谭池暝
2023-12-01

1 Broadcom SDK简介

broadcom sdk是为了给broadcom交换设备StrataSwitch and StrataXGS系列开发目标系统而设计的套件。提供的源代码可以被任何平台编译执行。源代码以模块化的形式组成,客户可以用最合适的方式利用这些模块,执行以下步骤即可以使系统正常运行:

  1. 启动BootLoader
  2. 在目标平台上启动操作系统,比如vxworks或者Linux内核,当然还有文件系统。
  3. 移植SAL(?没明白这个SAL抽象层是干嘛的?貌似是驱动程序封装的SAL层,应该是对操作系统与驱动层进行隔离,便于驱动移植到不同的操作系统而封装的)
  4. 上面这些起来后,可以跑Diag Shell or BCM shell,这个是博通提供的命令解释器,多用于开发调试(这个步骤可以跳过)
  5. 通过BCM API设计应用程序、业务。

1.1 broadcom libraries

  • BCM API
    BCM API隐藏配置硬件寄存器、内存映射、DMA操作、交换表结构等设计细节,以方便客户设计业务。

BCM API包含一个dispatch layer,这一层用于允许任一指定的CPU访问设备。同时还有一个RPC layer这个主要是多个CPU之间实现同步调用。

BCM API是在SOC API上实现的,SOC(Switch-on-Chip),这个SOC API是完全隐藏的,SOC API只抽象寄存器与内存访问,通常情况下不建议调用SOC API除非BCM API无法提供相应的操作,如需使用,需非常小心

  • PHY drivers
    博通的SDK提供了多种多样的PHYs驱动,以便构建完整的系统,新发现的PHY设备可以动态的注册PHY的驱动。将PHY驱动程序添加到API和设备驱动程序基础设施非常简单,只需将现有的源文件和头文件复制到新名称,重命名例程并提供驱动程序调用。后面还介绍了Copper SFP的PHY驱动,主要区别就是SFP模块内集成了PHY device,后面巴拉巴拉一大堆废话,可以暂时不用关注PHY drivers

  • System Abstraction Layer(SAL)
    SAL 是一个软件库将Broadcom设备驱动程序(如BCM、BCMX和SOC)以及Broadcom应用程序(如Broadcom命令shell)与目标平台上的系统依赖项隔离开来。这个软件库,它提供一组各种操作系统和体系结构进行交互的通用api接口。

1.2 broadcom applications

  • BCM shell
    BCM shell是一个在Broadcom SDK平台和Broadcom参考设计平台上运行的交互式应用程序。它允许用户访问交换机设备上的寄存器和内存,并提供了一种更高级别配置的方法。这个shell不仅可以调试同时还有很多测试功能。
    在这个模式下敲cint,可以调试C代码。
// fp init
int fp_init()
{
	int ret = 0;
	int unit = 0;
	
	ret = bcm_field_init(unit);
	if (ret < 0)
	{
		print("Init field failed. Error: %s\n", bcm_errmsg(ret));
		return ret;
	}	

	return ret;
}

print fp_init();
//执行函数用print

现目前没有分布式的设备,所以后面介绍的RPC API等应用不关注。

Broadcom CFE是一个引导加载程序(bootloader),它是Broadcom SDK平台上的默认引导加载程序。这个模块是单独发布的,不是SDK的一部分.

2 源代码目录介绍

SDK文件下的目录及介绍如下:

文件描述
Makefile最上层的Makefile文件
RELEASE正式版本号
doc/所有的sdk文档
include/编译所需头文件
RELDOCS发布文档
rc/BCM shell的实例脚本
src/独立于系统的BCM SDK源代码
systems/系统依赖的源代码(Linux、Vxworks)
tools/编译BCM SDK的工具的源代码
make/编译文件的组成结构
libs/???

接下来介绍上述文件夹下的子目录:

systems/

systems/子目录说明
bde/Broadcom Device Enumerator
drv/各平台设备驱动
linux/Linux平台代码
sim/Software simulator platform code
vxworks/BSPs for VxWorks platforms.

src/

src/子目录说明
appl/基于BCM和BCMX API编写的各种应用
bcm/BCM API实现的源代码
bcmx/BCMX API实现的源代码
customer/客户专用的源代码
sal/SAL API实现的源代码
shared/SOC和BCM API实现的通用源代码
soc/SOC API实现的源代码

src/appl
这个目录下的“应用程序”,指的并不是操作系统上运行的应用程序,而是基于BCM和BCMX API编写的一些应用实例,这个目录下包含已几个客户可以再利用的实例。

src/appl子目录说明
acl/broadcom 访问控制列表源代码
cint/C-interpreter module
cpudb/CPU数据库应用(CPU database application)
cputrans/CPU传输控制(CPU transport application)
dfe/BCM applications for Dune Fabric (DFE) devices
diag/BCM shell application
discover/Topology discovery application
dpp/BCM applications for Dune switching devices
stktask/Stacking task
test/Source code for device tests

注:dune是博通一个芯片的系列名称

src/bcm
这个目录下的源代码可以分为Driver layer和Dispatch layer,驱动层通过访问特定设备的资源(比如SOC API)来实现BCM API功能。

src/bcm子目录说明
esw/the drivers for Strata and StrataXGS devices
common/所有设备共享的驱动功能
compat兼容性函数
dfe/The drivers for Dune fabric devices
dpp/The drivers for Dune switching devices
rpc/RPC driver
robo/The drivers for ROBO devices.

src/bcm/esw这个目录下包含了StrataSwitch and StrataXGS系列交换设备所有的BCM API,通用的函数及API直接位于这个目录下,不同设备间特有的则是在各子目录下,如下所示:

src/bcm/esw子目录说明
bradley/Code for BCM568XX devices
conqueror/Code for BCM95672X devices
enduro/Code for BCM5633X devices
firebolt/Code for BCM565XX devices
hercules/Code for BCM5670, BCM5671, BCM5675, and BCM5676 devices
hurricane/Code for BCM56142 devices
humv/Code for BCM567XX devices
katana/Code for BCM5644x devices
ptp/PTP API implementation
raptor/Code for BCM56218, BCM56018, BCM53710, and other devices
scorpion/Code for BCM5681X devices
regex/Appaware regex compiler
trident/Code for BCM56840 devices
titan/Code for BCM5674X devices
triumph3/Code for BCM565X and BCM566X devices
triumph/Code for BCM5664X, BCM5654X devices
triumph2/Code for BCM5663X, BCM56685, BCM56689, BCM5652X, BCM5653X devices.
trx/Code for BCM5662X, BCM56680, BCM5682X devices

src/shared 这个目录包含了一些通用代码,介于BCM与SOC层之间,比如端口bit位图操作

src/soc
这个目录下包含了SOC API的实现,提供了访问设备寄存器和内存的功能,BCM API通过SOC来控制设备寄存器。

src/soc子目录说明
common/Common code
dcmn/Dune common drivers (DFE and DPP)
dfe/Dune fabric drivers
dpp/Dune switching drivers
esw/XGS drivers
ea/EA drivers
i2c/BSC drivers
mcm/Register and memory definitions for all the supported devices
phy/PHY drivers
robo/ROBO drivers
sbx/XCore (SBX) drivers

3 System Abstraction Layer API

博通提供SAL软件层针对VxWorks与Linux操作系统,其他的操作系统需要移植SAL。SAL是把操作系统的接口再次统一封装,以便给BCM API中的系统调用提供函数接口,因为不同的操作系统,提供的系统操作接口不一样,这一层其实就是封装了一下操作系统中常用的的系统函数接口。

SAL分为core SAL API和application sal API,core SAL主要提供以下函数接口:

  • 线程或任务管理
  • 信号量或同步互斥操作
  • 内存分配
  • 时间服务
    文件位置:/src/sal/core
    application sal API提供以下函数接口:
  • DMA以及共享内存分配
  • 字符及块I/O
  • PCI

注:一些定义及简写

A0B0
BCM APIA family of function calls that operate on specific devices.
BCMX APIA family of function calls that provide a system-wide view,with a global list of logical ports.
BSCBroadcom Serial Control
BDEBroadcom Device Enumerator
BSPBoard Support Package
CFEBroadcom Common Firmware Environment
CMICCPU Management Interface Controller
COSQClass of Service Queue, COSQ subsystem
DMADirect Memory Access
DPCDeferred Procedure Call
FEFast Ethernet
GbEGigabit Ethernet
GMIIGigabit Medium Independent Interface
GPLGNU Public License
IRQInterrupt Request
L2Layer 2, referred to as the datalink layer or MAC layer.
L3Layer 3 referred to as the network layer or IP layer.
MACMedia Access Control
MDAModel Driven Architecture
MMUMemory Management Unit
MTUMessage Transfer Unit
mutexmutual exclusion
OSOperating System
PCIPeripheral Component Interconnect
PHYPhysical layer
PLIProgramming Language Interface
RFCRequest for Comments
RPCRemote Procedure Call
RTLRegister Transfer Language
SALSystem Abstraction Layer
SFPSmall Form-factor Pluggable
SGMIISerial Gigabit Medium Independent Interface
SMIISerial Medium Independent Interface
SNMPSimple Network Management Protocol
SOCSystem-on-Chip
TBlTen-bit Interface
UDPUser Datagram Protocol
UTCCoordinated Universal Time
VLANVirtual Local-area Network
XE10 Gigabit Ethernet
XGMII10 Gigabit Medium Independent Interface
 类似资料: