broadcom sdk是为了给broadcom交换设备StrataSwitch and StrataXGS系列开发目标系统而设计的套件。提供的源代码可以被任何平台编译执行。源代码以模块化的形式组成,客户可以用最合适的方式利用这些模块,执行以下步骤即可以使系统正常运行:
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接口。
// 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的一部分.
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 |
博通提供SAL软件层针对VxWorks与Linux操作系统,其他的操作系统需要移植SAL。SAL是把操作系统的接口再次统一封装,以便给BCM API中的系统调用提供函数接口,因为不同的操作系统,提供的系统操作接口不一样,这一层其实就是封装了一下操作系统中常用的的系统函数接口。
SAL分为core SAL API和application sal API,core SAL主要提供以下函数接口:
注:一些定义及简写
A0 | B0 |
---|---|
BCM API | A family of function calls that operate on specific devices. |
BCMX API | A family of function calls that provide a system-wide view,with a global list of logical ports. |
BSC | Broadcom Serial Control |
BDE | Broadcom Device Enumerator |
BSP | Board Support Package |
CFE | Broadcom Common Firmware Environment |
CMIC | CPU Management Interface Controller |
COSQ | Class of Service Queue, COSQ subsystem |
DMA | Direct Memory Access |
DPC | Deferred Procedure Call |
FE | Fast Ethernet |
GbE | Gigabit Ethernet |
GMII | Gigabit Medium Independent Interface |
GPL | GNU Public License |
IRQ | Interrupt Request |
L2 | Layer 2, referred to as the datalink layer or MAC layer. |
L3 | Layer 3 referred to as the network layer or IP layer. |
MAC | Media Access Control |
MDA | Model Driven Architecture |
MMU | Memory Management Unit |
MTU | Message Transfer Unit |
mutex | mutual exclusion |
OS | Operating System |
PCI | Peripheral Component Interconnect |
PHY | Physical layer |
PLI | Programming Language Interface |
RFC | Request for Comments |
RPC | Remote Procedure Call |
RTL | Register Transfer Language |
SAL | System Abstraction Layer |
SFP | Small Form-factor Pluggable |
SGMII | Serial Gigabit Medium Independent Interface |
SMII | Serial Medium Independent Interface |
SNMP | Simple Network Management Protocol |
SOC | System-on-Chip |
TBl | Ten-bit Interface |
UDP | User Datagram Protocol |
UTC | Coordinated Universal Time |
VLAN | Virtual Local-area Network |
XE | 10 Gigabit Ethernet |
XGMII | 10 Gigabit Medium Independent Interface |