学习笔记
1 Broadcom SDK简介
broadcom sdk是为了给broadcom交换设备StrataSwitch and StrataXGS系列开发目标系统而设计的套件。提供的源代码可以被任何平台编译执行。源代码以模块化的形式组成,客户可以用最合适的方式利用这些模块,执行以下步骤即可以使系统正常运行:
- 启动BootLoader
- 在目标平台上启动操作系统,比如vxworks或者Linux内核,当然还有文件系统。
- 移植SAL(?没明白这个SAL抽象层是干嘛的?貌似是驱动程序封装的SAL层,应该是对操作系统与驱动层进行隔离,便于驱动移植到不同的操作系统而封装的)
- 上面这些起来后,可以跑Diag Shell or BCM shell,这个是博通提供的命令解释器,多用于开发调试(这个步骤可以跳过)
- 通过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
注:一些定义及简写
| 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 |
本文详细介绍BroadcomSDK,包括其设计目的、源代码模块、应用程序、系统抽象层API及目录结构。BroadcomSDK为StrataSwitchandStrataXGS系列设备开发提供支持,涵盖BCMAPI、BCMXAPI、SALAPI等关键组件。
5817

被折叠的 条评论
为什么被折叠?



