- 浏览: 34414 次
- 性别:
- 来自: 苏州
最新评论
Broadcom芯片53262的SDK移植
2010年11月27日
我们这款产品的硬件搭配为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了,比如我在后期给网管提供接口,基本上都是从这个文件里找到相应的接口。
至此,整个系统就起来了,但还需要加强稳定性和效率。以后会写到如何添加生成树,如何修改网口驱动。
Email:crstal-520@163.com
发表评论
-
Win7系统下VS2005_2008不识别WinCE5 SDK
2012-01-20 00:21 935Win7系统下VS2005_2008不识别WinCE5 SDK ... -
Windows Mobile SDK安装失败解决方法
2012-01-20 00:21 785Windows Mobile SDK安装失败解决方法 201 ... -
C# windows media encoder编程 JPG与MP3制作WMV视频-windows media encoder sdk解决方案
2012-01-20 00:21 760C# windows media encoder编程 JPG与 ... -
新的Windows Azure SDK for PHP 3.0版本现已推出
2012-01-20 00:21 560新的Windows Azure SDK for PHP 3.0 ... -
天铭本期热招岗位7.19-7.25
2012-01-19 01:13 0天铭本期热招岗位7.19-7. ... -
social game 前端思考
2012-01-19 01:13 583social game 前端思考 2011 ... -
Flash&Flex大全
2012-01-19 01:13 589Flash&Flex大全 2011年02月24日 ... -
小学语文毕业知识整理与复习题
2012-01-19 01:13 693小学语文毕业知识整理 ... -
安全bios手册(2)
2012-01-17 00:34 647安全bios手册(2) 2010年06月20日 BIOS ... -
电脑里面英文系统的中文简介
2012-01-17 00:34 1049电脑里面英文系统的中文简介 2010年06月22日 BO ... -
PHOTOSHOP初学者成长教材
2012-01-17 00:34 778PHOTOSHOP初学者成长教材 ... -
各大软件公司笔试题
2012-01-17 00:33 1372各大软件公司笔试题 2011年10月23日 网易游戏20 ... -
成人笑话大全第019篇
2012-01-15 14:54 616成人笑话大全第019篇 20 ... -
怎么样写议论文
2012-01-15 14:54 592怎么样写议论文 2009年09月25日 首 页 ┆ 教 ... -
学生操行评语
2012-01-15 14:54 537学生操行评语 2011年01月07日 优等生: 1 ... -
高中生自我评语 高中毕业生自我鉴定
2012-01-15 14:54 770高中生自我评语 高 ... -
笑话大全
2012-01-15 14:54 431笑话大全 2009年10月14日 不能随便起外号有个顽皮 ...
相关推荐
BCM SDK总体介绍文档,适合交换芯片入门的用户学习使用,了解博通的SDK到底有什么?
broadcom sdk561源代码,学习broadcom sdk的绝好资料
Broadcom53262M-DS302 Managed Switch with 24 FE Ports + 4-GbE Interface July 28, 2011
• 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 ...
broadcom提供的BCM SDK培训文档 SDK架构,SDK移植,SDK调试等
学习broadcom芯片资料笔记,网络设备交换机底层驱动设计使用文档
Broadcom车载以太网产品线SDK介绍
broadcom厂商带的sdk,供研究学习。欢迎下载
broadcom芯片 BSP代码 基于BCM1190芯片,低成本网络电话机开发
Broadcom以太网交换芯片培训
基于BroadCom芯片的千兆以太网交换机设计与实现.pdf
博通broadcom bcm 的培训文档,介绍了broadcom sdk代码架构,代码的调用关系。对于了解sdk的运行机制非常有帮助。
本文以broadcom56504/56300交换芯片为重点,介绍一下交换芯片的工作原理。
broadcom robo 系列芯片的SDK
Broadcom以太网交换芯片转发流程,便于下载学习
Broadcom 10G交换芯片 8705 芯片资料
Broadcom以太网交换芯片转发流程.doc
Broadcom PCI / PCIe SDK 这是适用于Linux的的版本。 Broadcom在GNU GPL v2下许可了该SDK,该仓库随附的LICENSE文件中提供了该SDK。 XIA LLC为其依赖产品维护此版本。 此版本的SDK已通过测试,并可以与我们的产品...
1、 交换芯片架构 2、 L2转发流程 2.1 L2转发原理 2.2 L2转发相关的表项 2.2.1 port表 2.2.2 egress port表 2.2.3 L2地址表 2.2.3 VLAN表 3、 L3转发流程 4、 L2组播转发流程 5、 L3组播转发流程 6、 流...