当前位置:首页 » 编程软件 » vxworks脚本

vxworks脚本

发布时间: 2023-06-11 07:40:37

㈠ 如何调bcm 芯片sdk初始化

SDK初始化前,需要对SDK的架构有所了解,具体如下图;可以看出SDK的代码结构是一个层次化分明的架构,这里对各层的作用和详细工作机制不阐述了,具体可以参见SDK的介绍文档。

SDK代码的结构图

SDK根据上述架构,BCM模式启动的时候进行的初始化包括以下几个步骤:

1. 根据操作系统(linux、vxworks或unix等)不同调用sal_core_init()和sal_appl_init()两个函数的对应版本,分别对Core SAL和Appl SAL两部分进行初始化;linux系统下的sal_core_init()函数的主要工作时调用了函数sal_dpc_init()创建DPC(Deferred Procere Call)的信号量和线程;sal_appl_init()函数的linux版本则直接返回,没有做任何工作;这两个函数虽然意义很大,但是值得我们研究的内容不多。

2. 然后调用sal_thread_create创建一个运行BCM模式的线程,并调用diag_shell()函数完成对BCM模式的数据进行初始化、命令行进行注册、设备探测和挂载、芯片初始化、客户命令注册、重启动和BCM模式退出等操作,主要通过调用diag_init()函数、sysconf_init()函数、diag_rc_set()函数、sysconf_probe()函数、sysconf_attach()函数、bcm_init()函数、custom_cmd()和sal_reboot()等函数实现,下面详细介绍下该函数的执行流程;

a. diag_init()调用cmdlist_init()函数、init_symtab()函数、sal_srand()函数、gvar_init()函数和sh_bg_init()函数等来完成命令行注册、芯片的寄存器和表项软件数据内存分配、随机数种子获取、全局变量初始化和所有设备可执行任务的内存分配(最多10条)和记录等工作;

b. sysconf_init()函数除了初始化管理接口的调式函数外还调用soc_cm_init()函数来完成SOC的配置的管理接口的初始化;

c. sysconf_probe()函数调用bde_create()函数和sysconf_chip_override()函数完成探测已经挂载的设备并建立对应的配置管理项,包括为每个设备的分配id等工作;

d. 然后对每个unit调用sysconf_attach()函数来对soc_cm_device_init ()初始的管理接口的设备挂载一些中断处理函数,注册PCI读写函数等,用管理接口的结构体的指针函数成员形式保存,以便可以删除和添加这些处理函数,并调用soc_cm_device_init()函数通过在里面再调用soc_attach()函数来对每一个unit建立并初始化芯片的soc_control_t structure信息及对其访问的互斥体;soc_attach()函数调用soc_feature_init函数、soc_intr_disable()函、soc_cmic_uc_msg_start函数、soc_info_config()函数(这个函数下面会继续调用)、soc_dcb_unit_init()函数和soc_counter_verify()函数分别进行支持特性赋值、关闭中断、开启对设备的CMIC的UC信息、soc信息初始化、CPU收发包缓存DCB初始化和各种counter寄存器软件记录特定初始化,并对SOC_CONTROL(unit)和SOC_PERSIST(unit)两个保存芯片设备信息的结构体一些成员进行赋值;

e. 调用diag_rc_set()函数来设置对每个芯片初始化配置的脚本文件名称和热启动的初始化配置脚本名称,如果没有指定全部用默认的配置;然后解析脚本中的配置项,运用脚本进行配置初始化(包括MMU的配置);

f. 然后对每个芯片调用bcm_init()函数开始芯片的初始化工作,其首先调用bcm_attach()函数对BCM_CONTROL(unit)信息的部分成员进行赋值,包括设备类型、设备名称和unit号等;然后调用_bcm_api_xlate_port_init()函数建立lport和bcm port的映射关系;并调用芯片各功能模块的初始化函数(trident是bcm_esw_init ()函数)来对各模块进行初始化;

g. 然后调用custom_cmd()函数加载BCM模式下用户配置的命令加载进去;

h. 这样整个SDK就初始化完毕,BCM模式就会提示BCM>等来等待用户输入命令;然后进入一个死循环一直调用sh_process()函数解析用户配置的命令,然后调用对应的SDK接口下发到驱动;

i. 如果用户输入退出命令,会调用sh_exit函数来处理,包括可选的是否回收已经分配的资源等任务;

j. 如果用户输入重启的命令则调用sal_reboot()函数linux版本是通过exit(0)实现。

另外,SDK为上层的初始化提供了调用接口system_init()函数对BCM交换芯片进行初始化,这部分是咱们应该重点关注的部分,当然该接口在BCM模式下用init命令也是可以被调用到的。下面详细讲解下:

a. 首先调用soc_reset_init()函数,ESW芯片里这个函数调用soc_do_init()函数来完事情;soc_do_init()函数会根据是否是重启动设备进行的配置不一样;

(1) 如果是热启动的设备则先调用soc_dma_abort()关闭所有DMA并调用soc_linkscan_config()函数设置CMIC(CPU Management InterfaceController)查询端口link状态,如果设置项为空则表示关闭端口link状态扫描;然后如果是初始化soc有失败标记的话调用soc_dma_abort()函数、soc_counter_stop()函数、soc_mem_scan_stop函数、soc_i2c_detach()函数和soc_l2x_stop()函数(有些其他芯片还调用soc_cmic_uc_msg_stop函数等)分别禁止所有的中断、禁止计数行为、禁止内存扫描动作、释放I2C
驱动内存、结束L2X(应该是用于mac地址学习和老化对CPU进行中断通知)相关线程和停止等;然后调用soc_info_config()函数来初始化芯片端口的各种信息,包括芯片型号、各种类型端口的位图、芯片称号、mod数目、端口数目、hg口的位置、堆叠口位置、CPU口队列数目、用于时间同步端口数目、端口最大支持速率、meter pools、入端口QOS支持的队列数目等信息,另外对trident芯片支持QOS三级调度,所以还会调用soc_trident_num_cosq_init()对各个端口支持的队列数做特殊初始化,最后调用soc_esw_dport_init()函数对User
to physical port map的映射及对user port的逆映射;总之soc_reset_init()函数偏重于对芯片信息、端口属性和QOS队列属性等初始化;然后调用soc_feature_init()函数和soc_dcb_unit_init()函数完成芯片特性支持添加和CPU收发包缓存DCB的初始化工作;然后调用soc_dma_attach()函数和soc_dma_init()函数对中断进行重新初始化,然后对通过PCI设置CMIC_CONFIG使能高级的DMA模式,包括Scatter/gather,
reload, annaligned transfers(这里具体含义不太明白),然后开启一些中断;然后是对MAC_CTRL寄存器读写配置一些MAC层的收发使能;然后是设置MAC表项、MPLS表项、vlan和egress vlan、 L3表项的一些hash冲突的级别,接着使能MAC地址学习和老化通知、 重新获取L3转发表项的长度和表项大小信息即可完成整个热启动的过程;

(2) 在不是热启动的情况下,会首先调用调用soc_info_config()函数、soc_feature_init()函数和soc_dcb_unit_init()函数来完成信么MMU、芯片特性支持和DCB初始化工作;然后调用soc_endian_config() 函数和soc_pci_burst_enable()函数来完成硬件大小端和支持PCI读写突发情形的使能;然后是调用soc_reset()函数来完成对芯片的一些配置,包括端口的phy配置和mac配置(比如寄存器有XLPORT_XMAC_CONTROL),及还会调用相应芯片的soc_reset_bcm56840_a0()函数完成对CPU口和出入方向属性的一些配置,如CMIC_XGXS1_PLL_CONTROL_*、CMIC_MISC_CONTROL、CMIC_SOFT_RESET_REG、ING_CONFIG_2、EGR_CONFIG_2、ING_Q_BEGIN和EGR_Q_BEGIN等寄存器;然后和热启动一样,通过PCI设置CMIC_CONFIG使能高级的DMA模式,对MAC_CTRL寄存器读写配置一些MAC层的收发使能就退出了soc_do_init()函数;

b. 然后调用soc_misc_init()函数对芯片的初始化信息进行核实判断,最终根据函数指针调用芯片相应的函数,trident调用的则是_soc_trident_misc_init()函数;_soc_trident_misc_init()函数首先_soc_trident_ser_init()函数对IFP、EFP、VFP和UDF等tcam表项的表项大小、起始地址等信息进行软件获取并记录,然后调用_soc_trident_clear_all_memory函数对CPU_COS_MAP_ONLY、FP_GLOBAL_MASK_TCAM、FP_GM_FIELDS、FP_TCAM、FP_UDF_TCAM、L2_USER_ENTRY_ONLY、L3_DEFIP_128_ONLY、L3_DEFIP_ONLY、L3_TUNNEL、MY_STATION_TCAM_ENTRY_ONLY、VFP_TCAM、VLAN_SUBNET_ONLY、EFP_TCAM、FP_GLOBAL_MASK_TCAM_Xm、FP_GLOBAL_MASK_TCAM_Ym、L3_ECMP_XM、L3_ECMP_YM、EGR_IPMC_CFG2、EGR_VLAN_CONTROL_1、_XLPORT_MIB_RESET等表项进行清空;然后_soc_trident_misc_init()函数继续对CPU_PBM、CPU_PBM_2m、ISBS_PORT_TO_PIPE_MAPPINGm、EGR_ING_PORTm、XLPORT_CONFIGr、XLPORT_MODE_REG、IARB_MAIN_TDMm、EGR_PERQ_XMT_COUNTERS_BASE_ADDR、MISCCONFIG、ING_BYPASS_CTRL、EGR_BYPASS_CTRL、EGR_ENABLE、EPC_LINK_BMAP、ING_CONFIG_64、EGR_CONFIG_1、EGR_VLAN_CONTROL_1、ING_EN_EFILTER_BITMAP、SW2_FP_DST_ACTION_CONTROL、RTAG7_FLOW_BASED_HASH、RTAG7_HASH_ECMP、CMIC_I2C_STAT、CMIC_RATE_ADJUST_I2C、CMIC_RATE_ADJUST_INT_MDIO等寄存器或表项进行初始化赋值操作,并调用_trident_lep_init对端口进行点灯操作,还调用_soc_trident_fcoe_config_init对芯片的FCOE功能进行初始化;

c. 然后调用soc_mmu_init()函数对MMU进行初始化,和soc_misc_init()函数一样,也是根据不同的芯片挂载不同的函数指针,这里会调用_soc_trident_mmu_init()函数对trident芯片的MMU进行初始化;包括GH、PG、SSP、SP、Port Min、PORT_MAX_SHARED_CELL、Queue Min等的划分,MMU port到phy port的映,及MCQ_CONFIG、OP_THR_CONFIG、OP_VOQ_PORT_CONFIG、OVQ_DROP_THRESHOLD0、OVQ_DROP_THRESHOLD_RESET_LIMIT、OVQ_FLOWCONTROL_THRESHOLD、OVQ_MCQ_CREDITS、MCQ_FIFO_BASE_REG、PORT_PAUSE_ENABLE0_64、INPUT_PORT_RX_ENABLE0_64、S3_CONFIG、S2_CONFIG、S2_S3_ROUTING等voq和Qos相关功能的MMU相关寄存器初始化;

d. 然后调用soc_l2x_start函数开启对MAC地址学习和老化的信息通知功能,主要是创建一个线程;

e. 然后调用bcm_init()函数对芯片进一步初始化,实际对trident芯片调用的是bcm_esw_init()函数,该函数再调用_bcm_esw_init()函数,该函数主要的是分别调用bcm_esw_linkscan_enable_set()函数、_bcm_moles_init()函数和bcm_esw_rcpu_init()函数,来实现关闭端口状态扫描、初始化芯片各个模块、初始化RCPU机制的主控模块:然后_bcm_esw_init()函数调用_bcm_esw_switch_init()函数来实现对CPU队列的初始化和对芯片的一些特殊控制信息,主要是通过调用bcm_esw_switch_rcpu_encap_priority_map_set()函数和bcm_esw_switch_control_set()函数来设置的。其中的_bcm_moles_init()函数调用芯片转发流程的各个模块的初始化函数,具体如下图:

此处内容较多但是非常重要,希望感兴趣的同学能查看对应代码实际学习下相关内容,只提一点,bcm_esw_l2_init函数会调用_bcm_l2_bp_init函数对l2_user_etry表项设置BPDU报文上CPU的规则;

f. 然后对unit的每个端口调用bcm_port_stp_set()函数、bcm_port_autoneg_set()函数和bcm_stat_clear()函数分别设置端口的STP的状态为转发、是否自动协商和清楚端口统计;

g. 然后调用bcm_linkscan_enable_set函数来定期查询端口的link状态;

h. 部分芯片还会调用bcm_linkscan_register注册trunk口的link状态查询回调函数;

㈡ labview 主要用来干吗的啊

石鑫华视觉网-软件工程方法在LabVIEW中的应用.pdf,免费下载

链接:https://pan..com/s/1Vwck1GcdbjuI8zEhGly77g

提取码:fwy1

本书介绍的技术非常易于理解。如果学会,那么我们认为每个人都能够成功运用其中之一二。我们的目的是通过易于理解和可应用的方式向大家介绍和解释使用LabVIEW进行软件设计的概念。许多技术和方法学都拘泥于计算机科学理论,从而忘记了设计的初衷,我们却一直关注设计并希望能够说明某些计算机科学理论。

㈢ jcp asp bsp什么意思

1、JCP(Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新。
2、ASP是动态服务器页面(Active Server Page)的英文缩写。[1] 是微庆雹软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网页文唤返件的格式是 .asp。现在常用于各种动态网站中。
3、板级支持包(BSP)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运和差饥行于硬件主板。

㈣ 嵌入式开发如何入门

嵌入式开发主要有两种,像STM32、飞思卡尔等系列单片机属于无操作系统的,直接对寄存器或者利用库函数操作的,这种学习来难度相对小一些,就业前景也不错。

还有一些像ARM9,或者CortexA8、A9系列的可以运行Linux或者安卓操作系统的嵌入式软件系统开发,由于需要学习的内容较多,学习时间较长,那么学习起来就有一定的难度,工资也相对高一些。

课程内容主要包括:

①C,Java核心编程:c语言核心编程,Java核心编程;

②Linux核心操作与算法:Linux系统使用,Linux-c编程核心技术,精品数据结构,Linux-c编程精髓;

③核心操作与算法:Linux系统编程,Linux网络编程核心技术,UI编程,Java核心编程,安卓核心技术;

④ARM+Linux底层开发:数字电路,ARM编程核心,Linux系统开发,嵌入式Linux驱动开发;

⑤大型项目实践:每期安排各类型真实的项目,详细可以找我要资料。

互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。

想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。

祝你学有所成,望采纳。

热点内容
liunxsvn服务器搭建 发布:2025-02-11 00:15:31 浏览:698
p7空间存储空间其他 发布:2025-02-10 23:58:33 浏览:393
怎样把多个文件压缩 发布:2025-02-10 23:53:04 浏览:45
南山存储器设备供应商哪家质量好 发布:2025-02-10 23:46:50 浏览:417
安卓沼泽激战哪里下载 发布:2025-02-10 23:45:03 浏览:261
网站服务器如何连接光纤 发布:2025-02-10 23:42:29 浏览:730
组合键脚本 发布:2025-02-10 23:32:43 浏览:554
安卓篮球手游在哪里下 发布:2025-02-10 23:21:55 浏览:135
linux改变所有者 发布:2025-02-10 23:04:13 浏览:650
源码曹毅 发布:2025-02-10 23:04:01 浏览:582