BCM SDK初始化学习笔记
(注:以下文档整理的都是针对BCM5614x和BCM5633x芯片的相关学习总结,这两款芯片都属于XGS系列,非ROBO系列,所以文档中部分描述可能对ROBO系列芯片不适用)
一、SDK代码架构:
1SDK目录结构如下:sdk
●build:主要用来存放编译出的SDK二进制对象文件,该目录会在编译sdk后
自动生成,但目录位置可由用户自己指定;
●src:存放sdk的主要源代码,该目录中有一些重要的子目录,如下图所示
➢bcm、bcmx:主要是sdk为上层提供的api接口,向上屏蔽了芯片之间的
区别,为用户提供了一套统一的接口;
➢soc:是sdk的功能和逻辑的主体,其中包括对芯片寄存器的设置,和任务的处理;
➢sal:提供与操作系统相关的一些代码,该目录中的文件主要对操作系统相关的函数进行了封装,向上屏蔽操作系统之间的差异,以便sdk能够在
不同的系统间进行移植;
➢appl:提供了BCM Diag Shell工具,方便用户使用该工具对交换芯片进行测试和诊断;
●include:存放sdk相关头文件;
●systems:存放与硬件板卡相关的代码文件;
●make:存放编译sdk所需的相关makefile文件;
●doc:提供了许多对sdk内部处理逻辑和处理方式的描述和解释文档,对理解
sdk非常有用;
●rc:存放了一些sdk的脚本文件,可通过BCM Diag Shell执行;
●reldocs:提供了其他一些sdk相关的文档,如驱动版本差异,api说明;
2模块逻辑关系如下图所示:
通过上图可以看出:
Appl属于整个驱动SDK的最上层,大致可以看做应用示例和调试诊断接口,BCM Diagnostic Shell工具就属于这一层,通过使用这个Shell工具,用户可以直接
对交换芯片的几乎所有功能进行配置和相关信息获取,为用户了解交换芯片提供了
非常有用的工具,同时,在产品开发完成之后,保留该Shell工具可以为调试和诊
断提供大量有用的信息,方便用户定位问题,具体BCM Diag Shell工具的使用方
法详见:《BCM SDK Shell使用.doc》文档。
在Appl层之下是BCMX和BCM层,这两层都是SDK为上层提供的标准API 接口,像ROS的SSP和BCM Diagnostic Shell之类的上层应用会直接调用这一层
的接口函数,BCMX与BCM之间的最大区别就是是否针对多设备场景,我们通常
使用的都是BCM的API接口。
BCM和BCMX之下就是SOC层,SOC部分可以说是整个SDK的核心,与芯片相关的逻辑处理,以及驱动中的任务都在这里,SOC层提供了对所有BCM交
换芯片和PHY芯片的支持,是一个功能的全集,单一交换芯片所支持的功能只是
这个全集功能的一个子集,用户如没有特殊需要不应当直接调用这一层提供的函
数。
SAL是SDK的基础部分,主要是提供一些系统相关的支持,通过对不同操作系统的基础函数进行封装,
并向上屏蔽了操作系统之间的区别,使得BCM的SDK
可以在不同的系统中顺利被移植。
3SDK中的数据结构:
3.1SDK中的数据结构
从上面的描述中可以看到,BCM SDK的代码按照逻辑关系大致可以分成SAL、SOC和BCM三层,与代码逻辑层次对应的是SDK的数据层次结构,SDK
的数据组织与代码层次基本一致,最上面是BCM层对应的数据结构bcm_control,
用于记录BCM层的相关数据,然后是SOC层的soc_control,用于记录SOC层相
关的数据,SAL中封装的操作系统函数和读写函数通过注册的方式注册给了SOC
层,供SDK代码使用。
3.2BDE
在交换芯片刚启动的时候,由于使用的是PCI的访问方式,所以芯片内只有PCIC(cpu)和PCIM(cmic)寄存器区可以访问,这时需要通过一些底层的操作
对PCIC区寄存器进行初始化配置(驱动代码自动完成,不需要用户参与),让PCI
设备能够正常工作,有了这个基础之后,就可以开始对软件和芯片进行初始化了,
个人理解完成这些底层操作的那个层就是BDE。
二、SDK初始化:
1初始化基本流程:
BCM SDK初始化的大致流程如下:
●首先,通过读取PCIC的PCI_CONF_VENDOR_ID寄存器,在PCI总线上查
所有设备,如果查到有设备,并且设备属于BCM交换芯片,那么会通过调
用_setup()函数,对交换芯片的PCI控制器进行配置(主要完成了如下几个
工作,分别是:1、写PCI设备的基地址进行;2、配置PCI中断引脚;3、芯
片大小端设置),经过这个配置步骤之后,PCI设备所需的配置就算基本完成
了,这之后开始进行其他的初始化流程;
●有了上面的硬件初始化基础之后,驱动开始创建并初始化SOC层的软件数据
结构soc_control,并注册中断处理函数;
●然后,SDK驱动开始对芯片的硬件进行初始化,这其中即包括最底层的DMA、
大小端等初始化,还包括了各功能模块的初始化;
●最后,SDK开始对BCM层的数据结构bcm_control进行创建和初始化,然后
开启BCM层的相关任务,如:统计任务bcmCNTR、异步发送任务bcmTX和
bcmXGS3AsyncTX、连接检测任务bcmLINK;
通过上面的各初始化流程之后,SDK就算正式地完成了初始化工作,此时如果想对SDK进行操作,可以为BCM Diag Shell开辟一个任务,并使用BCM Diag
Shell工具对驱动进行调试和诊断(BCM Diag Shell的开启方式为:调用diag_init 完成Shell的相关初始化工作,然后不停地调用sh_process完成Shell的输入和输出操作)
2各初始化函数的主要作用
三、SDK中一些重要简称:
●DPC:Defferred Procedure Call module
●BDE:Broadcom Device Enumerator
●ESW(SDK中的ESW缩写):Enterprise Switching
●CM:Configuration Manager
●DCB:DMA Control Block
●CMIC:CPU Management Interface Controller

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。