Broadcom芯片53262的SDK移植

IOT-OS之RT-Thread(十三)--- 网络分层结构 + netdev/SAL原理 一、网络分层结构 我们单独介绍网络协议栈时,经常使用TCP/IP分层结构,方便了解每一层的作用及实现原理。但当我们在操作系统中使用网络协议栈(比如LwIP协议栈)时,常把其看作一个整体,只关心协议栈对下层硬件与上层应用的接口,并不关心协议栈内部具体的实现过程。 二、RT-Thread网络分层结构 2.1 ENC28J60设备驱动层 2.2 设备无关接口层netdev 2.3 网络协议层LwIP 2.4 协议无关接口层SAL 2.5 系统调用接口层Socket API 三、HTTP Server示例程序 阅读详情

转载:http://blog.youkuaiyun.com/crstal_522/article/details/6038594 

我们这款产品的硬件搭配为PowerPC860+BCM53262,尽管PowerPC860在这个年代略显不够Power,但是它以极高的稳定性还是占有一席之地。BCM53262和BCM53242是兄弟,很多人都用过BCM53242,实际上它们是一样的,在Broadcom公司的家族系列中,这两款芯片只能算是中档,但是已经够用了。BCM53262共有24个百兆口,4个千兆口和一个管理口(CPU口),该管理口是和PowerPC直接相连的,用CPU来控制BCM53262交换芯片,我们的产品CPU用的是MII方式,交换芯片用的是RVMII,这种连接方式可以在Broadcom公司的datasheet中查到,这样就可以通过PowerPC860来控制BCM53262了,PowerPC860和交换芯片交换数据采用的是EB总线,也是CPU和BCM53262直接相连,这种数据交换方式的优点是高效,但是相对于PCI相连的方式,EB还是有点不足,因为EB只是针对于中高端的芯片,而PCI总线就是相对于高端产品了,比如48个口的交换机,它的数据交换效率比EB总线更高。

            硬件做出来后,需要硬件工程师写测试代码,来确保硬件工作正常,最主要的方式就是参照datasheet对寄存器操作,如果硬件的百兆口和千兆口都能工作正常的话,那么这款硬件基本上就做成功了,接下来就是移植Broadcom的SDK。SDK是个巨大无比的系统软件,这款软件集合了所有博通公司的芯片代码,如果不懂得它的工作原理,移植起来相当麻烦。接下来让我们移植这个SDK到硬件上,然后再在移植的平台上添加功能,最后对整个系统进行优化,使之性能达到最稳定,效率最高。SDK的默认编译平台为Linux,因此我们需要安装tornado2.2的Linux版,相信很多人都没有tornado2.2的Linux安装版,那我们就在Windows下面操作。SDK中的Makefile有几处地方和Windows不兼容,这几个地方都很隐蔽,当初我是调了两个礼拜的makefile才调通,如果你还不懂得makefile,那赶紧找本makefile的书来看看,最好是英文版的,千万别怕英文,有看不懂的地方再参照中文,不出一个礼拜就能通晓makefile,另外我们还需要了解GCC,因为broadcom公司的SDK的robo系列给出的是MIPS处理器,而我们用的是PowerPC,所以还要知道GCC中参数的意思。

 

             现在开始移植SDK,在这之前,还需要自己写BSP包,因为我们的处理器是powerpc,和broadcom公司的demo板处理器不样,所以这个必须自己写,BSP最好参照broadcom公司的样品BSP,SDK中有些函数会直接调用到BSP中的函数,若你的BSP中没有这些函数,会在链接阶段通不过,其实BSP包的串口和flash驱动还是比较好写的,难就难在网口驱动程序,我们用的网口驱动程序是motfecend,这个会在以后改写。如果BSP能正常下载到板子上,且能让板子跑起来稳定,那么恭喜你,我们可以往下走了。接下来调试Makefile,最重要的一个Makefile是config,很多人都喜欢修改local这个文件,实际上我是没有用到local文件的,直接修改config文件,最后我把config文件修改到100多行,把不需要的功能都去掉了,比如调试功能,不需要的phy驱动,不需要的芯片驱动,若你不去掉这些,最后编出来的系统会比较大,而且启动速度会比较慢。在make.tools这个文件中,我们可以看到需要perl解释器,那我们就从网上down个perl解释器,然后安装,perl会自动添加到环境变量中,这个比较easy。另外我还down了个cygwin,cygwin只是把linux移植到windows上面,其实不要cygwin也可以编译系统,最重要的就是你的PC机上必须安装tornado,我们安装的是tornado for powerpc,如果你还没有tornado,可以用电驴下,我就下了power和mips的tornado。等所有工具都安装好后,我们就可以编译该SDK了,首先我们进入到systems/vxworks/bsp-name/这个目录下,输入make命令,SDK中的源文件即开始编译。我总觉得SDK中的makefile没有Linux下的makefile写的好,那是因为SDK中的makefile是个循环嵌套结构,即这个makefile包含那个makefile,让人看了比较头疼,不像Linux下的makefile看起来那么清爽,这点是broadcom做的不到位的地方。若你的源文件编译出来有问题,不要怀疑源文件错了,比如找不到头文件,或者源文件中的某个变量没有定义,那肯定是你的makefile还没有修改成功,因为最初的我也是一样,总认为是别人的源文件有问题,结果是自己的makefile没有修改对,若说源文件有问题,还真被我找到一处地方,那就是va_copy,这个在tornado下面是不能通过的,我查过Linux的技术文档,好像把va_copy改成了_va_copy,最初我在编译到这个地方的时候,死活都通不过,后来还是自己查文档才找到问题的出处。若你编译还是很顺利的话,那么链接的时候或多或少的都会出现点问题,由于BSP包中包含了Telnet,而在SDK中也是包含了Telnet,结果在链接的时候会产生冲突,我开始不知道是什么问题,后来才知道需要关闭makefile中的Telnet,但我建议你还是打开Telnet,我是把BSP中的Telnet关掉了,这样链接就不会冲突了,另外我们的BSP中打开了nfs,SDK中似乎也有这个东东,搞的我在链接的时候总是报些莫名其妙的错误,这个就需要你修改BSP了,否则链接通不过。如果链接也通过了,那么你的第一个系统映像就出来了。

               

                 接下来就需要把系统映像下载到板子上,因为还是处于开发阶段,所以我就直接把系统下到Ram里面去,等到以后做稳定,我们再用程序把系统烧写到flash中,我们用的是Tornado的FTP,这个很简单。这里有个问题要交代下,由于SDK默认的系统映像为vxWorks.st,不是vxWorks,前者只是比后面多带了个符号文件,但是你会发现将vxWorks.st下到板子上,在还没有启动sdk前,会发现PC机ping不通板子的,起初我也很疑惑,为什么不带sdk就能ping通板子,而带了后在没有启动SDK前就ping不通了呢,后来才发现需要在config.h中添加一个组件,这里就不多交代了。接下来我们分析SDK是如何启动的,在BSP中最后一个函数是usrappinit,这个函数会调用SDK的入口函数vxSpawn,vxSpawn会调用sal_core_init,sal_appl_init和diag_shell,sal_core_init和sal_appl_init这两个函数不用管,它们是两个系统无关层的函数,我们要把SDK移植到非Linux和vxWorks系统上,就需要移植这个sal层,还要交代的是sal_core_init这个函数启动了DPC这个任务,它的优先级还是蛮高的(50),如果这个任务没有起来,其他的任务都将歇菜,要不怎么说这个任务是呆在core里呢,sal_appl_init这个函数无非就是用来搞些板子上的应用,比如ls,cd等,这些我都没有用到,屏蔽了这里面的一些函数。最重要的一个函数就是diag_shell,这个函数绝对是重量级的,因为它主要做了以下几件事情,查找交换芯片,然后将驱动和芯片attach,接着是初始化交换芯片的模块,比如vlan,stp等,最后是进入到博通公司的调试shell。让我们来看看是如何查找到硬件的,其实说白了,就是查找devId和revId。当你看到probe这样的函数时,一定要多加注意,因为这个函数就是查找硬件的函数,在Linux也是这样的,在我们的SDK中,diag_shell调用了sysconf_probe函数,sysconf_probe会bde_create函数来查找硬件,bde的意思为broadcom device Enumerate ,也就是博通公司的硬件枚举,在datasheet里会讲到博通就是用bde来查找硬件的,其实找硬件也很简单,就是读了两个寄存器,一个是phyidh,另一个是phyidl,将这两个读出来的值和H文件的硬件类型相比较,若有匹配的那个硬件,就说明你的硬件找到了,否则就失败了。这里有一个特别重要的提示,当初我在开发的时候,死活都找不到硬件,后来才发现是大小端的问题,虽然这个问题不是很严重,但是你不知道板子的大小端,程序找不到硬件的时候,会直接让你崩溃。若找到硬件了,那我们就要加载相应的驱动,接着我们会调用函数sysconf_attach来将驱动和硬件相互绑定,只有驱动加载成功了,我们这块芯片才能发挥作用。在这个函数里面,SDK定义了很多函数指针,只要是写过驱动的人,都很清楚这些函数指针,无非就是写读写函数,不用管它,只要知道有这些函数就行了,这些函数将会在整个系统中发挥最不起眼但又最重要的作用,有了device,又有了drive,它们两个一结合,那我们这个交换芯片就有了最基本的功能,可读可写,可打开可关闭。

                 接着往下走,diag_shell接着调用system_init这个函数,该函数是用来做上层模块初始化用的,我们要想用到vlan、trunk、生成树这些功能,就会在该函数中调用,system_init函数会调用到bcm_robo_init_selective函数,这个函数会对port、l2、vlan和生成树等做初始化,如果我们不需要其中的某些功能,直接可以在该函数中屏蔽掉。这个函数也是共系统平台起来后,我们可以调用上层函数接口写应用程序,比如创建vlan,创建生成树等等,等到所有这些都做完后,我们就进入了broadcom公司的调试shell,调试shell很简单,就是用来查看寄存器,修改寄存器,查看memory,修改memory和查看一些高层的应用,比较简单,只需要掌握cmdlist.c这个文件就ok了,比如我在后期给网管提供接口,基本上都是从这个文件里找到相应的接口。

 

              至此,整个系统就起来了,但还需要加强稳定性和效率。以后会写到如何添加生成树,如何修改网口驱动。

除此之外,我的资源里还有一个doc文档:BCMSDK在Tornado下的编译

BCM_SDK命令 启动bcm的sdk,会进入一个类似shell的交互界面,在其中如入命令,可以配置交换机芯片。本文主要记录一下命令:   1.端口限速命令   2.链路聚合命令   3.i2c控制命令 启动方法: /tmp/bcm # ./bcm.user.proxy“?”显示帮助信息。直接输入会显示出sdk对所有型号芯片支持的命令,以及当前所支持的命令。BCM.0> ?help: "??" ... 阅读详情

相关推荐

BCM 芯片SDK初始化

BCM 芯片SDK初始化 作者: 北京—小武 邮箱:night_elf1020@163.com 新浪微博:北京-小武 SDK初始化前,需要对SDK的架构有所了解,具体如下图;可以看出SDK的代码结构是一个层次化分明的架构,这里对各层的作用和详细工作机制不阐述了,具体可以参见SDK的介绍文档。               SDK代码的结构图   S

night_elf_1020的专栏 1万+

BCM53262芯片开发手册----静态组播表

BCM53262 Switch芯片支持静态组播表人为设置,支持4K的组播地址索引。 使用NuDog 310C双网卡测试设备,A口发送,B口抓取。 一、发现B口网线在组播转发口插拔时,要10S左右才能正常收到组播报文?                 可能是开启了STP或RSTP功能,在生成树未完成之前端口状态不稳定,所以不能正常转发。 二、BCM53262芯片默认支持未知组播洪泛;

js_xj的专栏 4806

博通Broadcom SDK源码学习与开发1——SDK源码探究与Cable Modem 系统编译

对于cable modem的代码,从编译的脚本:build_procedure.sh可看出,主要分为两块,一部分是source code,一部分是tool chains 解压后分别存在于文件夹:REV和zOEMtools_eCos中 编译从REV目录开始: 1. 首先在make后一路读取makefile,确定一个默认的目标 2. 然后根据依赖条件会编译几个.a库,mta.a, common.a等 3. 根据设置选择编译相应的功能模块(目标文件会集中放置在某文件夹下) 4. 最后生成img文件

eryunyong的专栏 5849

Zynq-Linux移植学习笔记之41-linux下通过SPI访问broadcom 5396交换芯片

1、背景介绍 板子硬件设计如下: ZYNQ通过PS内的SPI0控制器读写BCM5396寄存器,配置port状态并进行网络破环操作。由于BCM5396在上电配置一次后就不用管了,原先的做法是将配置代码全部放在UBOOT中实现,参考https://blog.youkuaiyun.com/zhaoxinfan/article/details/69662074。现在有需求要在Linux系统下读写BCM5396...

无知的我 9376

Broadcom-SDK-使用介绍

Complete software distribution – Reference code (the API libraries) – Sample system code (BSPs) – Sample applications • Runs on Broadcom SRDs – Compiles out-of-the-box and will run on our SRDs – Customers might need to port it to their own systems • Under the control of a supported OS – As with any other driver or application, a customer will need • An OS • A toolchain required by your OS in order to compile the software – A number of popular OSes are supported out-of-the-box – If a customer uses a different OS, the SDK has to be ported to it

broadcom SDK源代码(全)

broadcom sdk561源代码,学习broadcom sdk的绝好资料

基于BCM53262交换芯片平台的Linux操作系统移植(四)之代码调试与驱动书写

2018/05/09 10:49 zhoulinhua@2018-05-10 一、系统分区 name address size bootstrap 0x0 64k u-boot 0x10000 640k env 0xb0000 192k dtb 0xe0000 128k uImage 0x100000 4M rootfs 0x500000 -   spi0的设备树如下:at91...

ruolin0923的博客 2548

BCM532X2 系列手册

BCM532X2 BCM53242 BCM53212 BCM53202 BCM53222 BCM53262

Network Switching Software Platform Guide学习笔记

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

学而思之的博客 3112

Broadcom switch SDK介绍文档

BCM SDK总体介绍文档,适合交换芯片入门的用户学习使用,了解博通的SDK到底有什么?

BCM53262原理图参考设计源文件DSNPCB

BCM53262原理图参考设计源文件DSNPCB,原理图是Cadence DSN格式的,Layout是cadence格式的,cadence16.6可正常打开,是自己项目中设计的原理图,调试过都是没问题的

BCM以太网驱动初始化简要

环境 BCM6756驱动程序。 驱动初始化 源码路径: bcmdrivers/opensource/net/enet/impl7/ 以下为BCM网卡驱动初始化的概要。初始化工作主要在bcm_enet_init_post函数中,该驱动适配了支持设备树和不支持设备树两种,不支持设备树的情况下,bcm_enet_init直接调用bcm_enet_init_post完成网卡驱动的初始化。 bcm_enet_init(); /* 注册网卡设备(设备树),在prob函数中调用bcm_enet_init_post *

linxuew的博客 2155

CrewAI 多 Agent 实战包 v1(Mock免Key跑通+通义千问可选+流水线样例)

本资源是 CrewAI 风格多 Agent 可运行工程包:研究→写作→审校等流水线样例。无 API Key 时自动降级 Mock 引擎跑通;有 DASHSCOPE_API_KEY 时可接真实 CrewAI + 通义千问。含中文 README、samples、smoke 留档、单元测试。本包不含密钥。关联博客:https://blog.youkuaiyun.com/mtl1994

linux如何编译的sdk,编译BroadCom的SDK

芯片:交换芯片BCM56334,PHY5464,PHY5461交叉编译OS为TileproSDK版本:sdk-all-5.6.6BCM针对其出品的所有交换芯片和PHY芯片的配置源代码都在BCM的SDK软件包中,通过编译SDK可以生成针对你所需要的芯片的内核模块映像(.ko文件),加载到OS中即可自动完成配置。编译步骤:(1)解压SDK包,定义并导出以源码根目录的环境变量SDK在这之前知晓tilep...

weixin_39996141的博客 753

维纳(Wiener)复原滤波器的三种推导形式及其在图像处理中的应用

本文深入解析了维纳(Wiener)复原滤波器的三种核心推导形式:卷积形式、矩阵向量形式和频域形式,并重点阐述了其基于线性最小均方误差(LMMSE)估计的核心思想。通过Python实战演示,展示了频域形式如何高效地在图像去模糊与噪声抑制之间取得平衡,是图像复原领域的经典且实用的工具。

net55的博客 577

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程 1.NVIDIA驱动检测及安装 2.Anaconda的安装 3.安装cuda、cudnn、pytorch 4.其他报错

aaaccc444的博客 2424

编译broadcom SDK

以arm 为列来说明,如何编译broadcom SDK。 (1)     添加一个新的目录 mkdir –p $SDK/systems/linux/kernel/ 代表你平台的名称,最好带上内核版本。例如:arm-2_6。 (2)     拷贝并修改Makefile 拷贝相应的Makefile文件到$SDK/systems/linux/kernel/ 这里拷贝systems/linux

noted2011的专栏 8031

MT 103 Single Customer Credit Transfer单笔客户转账

MT 103 Single Customer Credit Transfer单笔客户转账 MT103电文能通过三种方式交换,依赖电文使用的业务场景。 (1)   核心MT103电文是一个通用电文,发送和接收此电文不需要在电文用户组(MUG)注册。允许使用所有MT103电文域来交换单客户转账,除了77T域(信封内容)。MT103电文如果是根据预先约定的双边/多边规则的格式,则可以直通处理。 (

shuytu 1万+
上一篇: MPC8641机制
下一篇: src/hwif和src/drv的区别
qingfengtsing
博客等级 码龄15年 343粉丝 110原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值