1、/* XXX select between memPartLibInit */初始化内存;调用 sysClkConnect (FUNCPTR) usrClock, 0);/* connect clock interrupt routine */ sysClkRateSet (60); /* set system clock rate */ sysClkEnable (); /* start it */ 初始化系统时钟;调用 iosInit (NUM_DRIVERS, NUM_FILES, /null);初始化文件系统;根据配置的串口和控制台口个数,初始化串口;调用 wdbConfig(); /
2、* configure and initialize the WDB agent */初始化WDB; 调用 pipeDrv (); /* install pipe driver */ excInit (); /* init exception handling */ excHookAdd (FUNCPTR) bootExcHandler); /* install exc handler */ logInit (consoleFd, 5); /* initialize logging */ 初始化相关功能模块;调用 hashLibInit (); /* hashLib used by dosFS
3、 */初始化DOS文件系统;根据配置选择 bootAoutInit (); /* use a.out format */ #else /* coff or ecoff */ #if defined(INCLUDE_ECOFF) bootEcoffInit (); /* use ecoff format */ #else /* coff */ #if defined(INCLUDE_COFF) bootCoffInit (); /* use coff format */ #else /* coff */ #if defined(INCLUDE_ELF) bootElfInit (); /* us
4、e elf format */ 之上的其一初始化;调用 if (muxLibInit() = ERROR)初始化MUX;根据END个数加载END;调用bootCmdLoop创建tBoot任务,启动下一步初始化;四、bootCmdLoop()流程 调用key = autoboot (timeout);启动初始化;五、autoboot()流程 调用 if (bootLoad (BOOT_LINE_ADRS, &entry) = OK) go (entry); /* . and never return */ 从FLASH中读出BOOTLINE配置的启动文件,并运行该启动文件。三、usrConfig
5、.C中的usrRoot流程(是版本启动用的) usrRoot()流程 usrRoot()是VXWORKS进入多任务环境下创建的第一个任务,用来初始化各种系统参数,并启动其它任务。入口参数: char * pMemPoolStart, /* start of system memory partition */ unsigned memPoolSize /* initial size of mem pool */ /* initialize memory pool */ 或memPartLibInit (pMemPoolStart, memPoolSize);/* initialize memo
6、ry pool */ 初始化系统内存池;调用memShowInit ()初始化内存显示例程;调用usrMmuInit ()初始化MMU单元; /* connect clock ISR */ /* set system clock rate */ sysClkEnable (); /* start it */ 初始化系统时钟;初始化_func_selWakeupListInit;初始化I/O系统;安装控制台驱动,创建控制台设备,设置BAND率;初始化PC控制台设备;调用 ioGlobalStdSet (STD_IN, consoleFd);ioGlobalStdSet (STD_OUT, con
7、soleFd);ioGlobalStdSet (STD_ERR, consoleFd);将标准输入、输出、错误输出定向到控制台设备上;调用hashLibInit (); /* initialize hash table package */ symLibInit (); /* initialize symbol table package */ symShowInit (); /* initialize symbol table show */ 初始化系统符号表;调用excInit ()初始化异常处理;调用logInit (consoleFd, MAX_LOG_MSGS)初始化登录;调用sig
8、Init ()初始化信号量库;调用dbgInit ()初始化调试库;调用pipeDrv ()初始化管道;stdioInit (); /* initialize standard I/O library */ stdioShowInit ();初始化标准I/O;调用sigqueueInit (NUM_SIGNAL_QUEUES); /* initialize queued signals */ semPxLibInit ();semPxShowInit ();mqPxLibInit (MQ_HASH_SIZE);mqPxShowInit ();aioPxLibInit (MAX_LIO_CALL
9、S);aioSysInit(MAX_AIO_SYS_TASKS, AIO_TASK_PRIORITY, AIO_TASK_STACK_SIZE);初始化POSIX; /* initialize hash table package */ dosFsInit (NUM_DOSFS_FILES); /* init dosFs filesystem */ 初始化DOS文件系统;调用 rawFsInit (NUM_RAWFS_FILES); /* init rawFs filesystem */ 初始化原始文件系统; 调用rt11FsInit (NUM_RT11FS_FILES)初始化RT11文件系统
10、;调用ramDrv ()初始内存虚拟盘;初始化SCSI;调用fdDrv (FD_INT_VEC, FD_INT_LVL)初始化软驱;调用ideDrv (IDE_INT_VEC, IDE_INT_LVL, IDE_CONFIG)初始化IDE盘; 初始化硬盘驱动;初始化LPT;调用 pcmciaShowInit (); /* install PCMCIA show routines */ pcmciaInit (); /* init PCMCIA Lib */ 初始化PCMCIA;调用tffsDrv ()初始化TFFS;调用fioLibInit ()初始化格式化I/O;调用floatInit ()
11、初始化浮点设备;调用mathSoftInit ()初始化软浮点设备;调用mathHardInit ()初始化硬浮点设备;调用spyLibInit ()初始化CPU监视工具;调用timexInit ()初始化函数定时工具;调用envLibInit (ENV_VAR_USE_HOOKS)初始化环境变量;初始化NTPASSFS;调用moduleLibInit ()初始化模块管理器;调用symSyncLibInit ()同步目标机与主机的符号表;调用sysFFSMount ();调用 usrBootLineInit (sysStartType); /* crack the bootline */ us
12、rNetInit (BOOT_LINE_ADRS); /* initialize network support */ 初始化网络通讯协议;初始化PASSFS;初始化DOS_DISK;调用usrSmObjInit (BOOT_LINE_ADRS)初始化共享内存对象;初始化WindMP;写保护文本段和向量表;调用selectInit ()初始化SELECT;调用sysSymTbl = symTblCreate (SYM_TBL_HASH_SIZE_LOG2, TRUE, memSysPartId)创建系统符号表;调用sysSymTbl = symTblCreate (SYM_TBL_HASH_S
13、IZE_LOG2, TRUE, memSysPartId);netLoadSymTbl () 创建网络符号表;初始化C+库;初始化Wind Web服务器;调用httpd ()初始化HTTP;调用rBuffLibInit();rBuffShowInit (); /* install rBuff show routine */ 初始化RBUFF;调用windviewConfig ()初始化WINDVIEW;调用wdbConfig();初始化调试接口;打印SHELL界面;初始化交互界面,提示用户输入信息,口令验证;调用usrUglInit ()初始化UGL;调用javaConfig ()初始化JAV
14、A;调用usrHtmlInit ()初始化HTML;调用USER_APPL_INIT初始化用户应用程序;TmsAppInit() 四、网络协议栈初始化流程 在usrnetwork.C中:在usrRoot()中调用 usrNetInit ( char *bootString /* boot parameter string */ ) 初始化网络协议栈 将BOOTLINE中的初始化字串写入初始化结构变量中,没有的赋缺省值。 初始化CPU号,以利用VME通讯;初始化插口层、BSD插口和路由插口;调用hostTblInit ()初始化主机表;(在hostlib。C中,该表用于DNS) 调用usrNet
15、ProtoInit ()初始化各种协议,包括IP、RIP、IP过滤、UDP、TCP、ICMP、IGMP、多播路由、OSPF;调用netLibInit ()初始化网络库,包括创建网络任务环、创建网络处理任务、初始化缓冲区、接口初始化、 添加INTE域、INTE域初始化、路由表初始化、增强路由初始化、多播HASH表初始化、网络类型初始化;调用muxLibInit()初始化MUX;调用muxAddrResFuncAdd (M2_ifType_ethernet_csmacd, 0x800, ipEtherResolvRtn)初始化 以太网的IP地址解析;调用muxAddrResFuncAdd (M2_
16、ifType_atm, 0x800, ipAtmResolvRtn)初始化ATM的IP地址解析;调用muxAddrResFuncAdd (M2_ifType_ppp, 0x800, ipPppResolvRtn)初始化POS的IP地址解析;(此处初始化了所有外部链路类型的IP地址解析函数,形成函数链表,在IP绑定时, 根据END接口类型和协议类型,获取地址解析函数,就可以完成地址解析了) 读endDevTbl,调用muxDevLoad()加载END并调用muxDevStart()启动END;初始化PPP;初始化DHCP,如果定义了Relay且未定义Server,则初始化Relay,初始化Cli
17、ent; 初始化UL接口;设置加载启动接口,从PPP、SLIP和BACKPLANE中挑选其一,如果没有则查其它选项定义了其它设备, 则从其它设备加载;根据其它设备的不同属性, 添加接口,设置IP地址;若从磁盘启动则初始化必要的END: 调用pEnd = endFindByName(params.other, params.unitNum);获取一个other中的END; 调用(ipAttach(params.unitNum, params.other) != OK)绑定IP协议栈到该END上; 设置attached = TRUE;如果attached,调用usrNetIfAttach (par
18、ams.other, params.unitNum,params.ead) != OK)则 初始化BSD类型的接口;调用usrNetIfConfig (params.bootDev, params.unitNum, params.ead, params.targetName, netmask) !=OK)配置IP地址 如果从以太网启动,则:调用(ipAttach(params.unitNum, params.other) != OK) 则初始化BSD类型的接口;=OK)配置IP地址;如果不从BACKPLANE启动,则设置此BACKPLANE为第二接口:调用usrNetIfAttach (bpD
19、ev, params.unitNum, params.bad);(void) usrNetIfConfig (bpDev, params.unitNum, params.bad, (char *) NULL, netmask);配置BACKPLANE;如果params.targetName0目标主机名不为空,则调用:usrNetIfAttach (lo, 0, 127.0.0.1 usrNetIfConfig (, localhost, 0);添加环回接口;若从BACKPLANE启动,则更改DHCP Client属性;初始化ARP代理服务器;初始化DHCPClient,并设置IP地址到BOOT
20、LINE中;如果定义了网关地址,则设置路由;调用hostAdd (params.hostName, params.had);将HOST加入到主机表; 设置与其它VXWORKS通讯的名字和联系 创建远程文件访问设备;初始化ZBUF插口;(目前没有使用) 初始化tcpTraceInit()跟踪调试接口;调用rlogInit (),启动远程登录;调用telnetInit (),启动TELNET;调用rpcInit (),启动RPC;调用ftpdInit(FUNCPTR) loginUserVerify, 0),启动FTP;调用tftpdInit (0, 0, 0, FALSE, 0),启动TFTP
21、Server;初始化NFS;初始化DHCP Server或Relay;调用sntpcInit (SNTP_PORT),初始化SNTP;调用pingLibInit(),初始化PING;调用usrSnmpdInit (),初始化SNMP Agent;调用 ripLibInit(RIP_SUPPLIER, RIP_GATEWAY, RIP_MULTICAST, RIP_VERSION, RIP_TIMER_RATE, RIP_SUPPLY_INTERVAL, RIP_EXPIRE_TIME, RIP_GARBAGE_TIME);初始化RIP;调用usrResolvInit ()初始化DNS;五、co
22、nfigTms.H定义 在configTms.H中:定义:#define BOARD_NAME Broadcom#define HOST_NAME_DEFAULT TMS_HOST #define TARGET_NAME_DEFAULT WRN-Broadcom #define HOST_USER_DEFAULT TMS_User #define HOST_PASSWORD_DEFAULT #define SCRIPT_DEFAULT #define OTHER_DEFAULT #define PRODUCT_NAME TMS BCM5600 Switch Product等初始化BOOTLIN
23、E缺省名。此外还定义了 TMS相关的实现宏。六、在sysSwitch.C中 TMSAppInit()流程:调用sysClkRateSet( SYSTEM_CLK_RATE )设置时钟速率;调用 sysNvmCreate();初始化NVM,需要一段时间;调用portMapInit()初始化端口映射;调用portMapIfStructInit()初始化端口、接口映射;调用TASK_START( NVM_APPNAME, nvmInit, &nvmData, NULL, high, (8 * 1024) ); 创建NVM数据维护任务;调用 appManagerClr( APP_MANAGER_IDB
24、 ); MODULE_START(IDB_APPNAME,idbInit,NUM_OF_OBJECTS, UM_OF_MODULES );appManagerSet( APP_MANAGER_IDB ); 初始化IDB+模块;读取NVM更新系统的MAC地址;调用muxIterateByName( SW_DEVICE_NAME, updateEndDevices, SW_DEVICE_NAME );muxIterateByName( AG_DEVICE_NAME, updateEndDevices, AG_DEVICE_NAME );muxIterateByName( AP_DEVICE_NAM
25、E, updateEndDevices, AP_DEVICE_NAME );muxIterateByName( HW_DEVICE_NAME, updateEndDevices, HW_DEVICE_NAME );更新END的MAC地址;调用muxIterateByName( SW_DEVICE_NAME, swIpAttach, NULL )添加相应的网络接口;初始化虚拟I/O消息服务;初始化LOGO-TO-NULL;如果环回接口未初始化,则初始化环回接口;如果禁止IP路由,则调用m2IpGroupInfoSet( varToSet, &ipVars )设置协议栈全局变量;调用sysMib2
26、Init();初始化MIB;调用 envoyTMSInit ();初始化SNMP;调用 MODULE_START( SWAPI_APPNAME, bcmSwapiInit, 0, 0 ); MODULE_START( RFC1213_APPNAME, rfc1213Init, 0, 0 ); MODULE_START( RFC1907_APPNAME, rfc1907Init, 0, 0 ); MODULE_START( RFC1493_APPNAME, rfc1493Init, 0, 0 ); MODULE_START( RFC2233_APPNAME, rfc2233Init, 0, 0 ); MODULE_START( RFC2665_APPNAME, rfc2665Init, 0, 0 ); 设置基本MIB;调用MODULE_START( RFC2571_APPNAME, rfc2571Init, 0, 0 ); MODULE_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1