?? usrconfig.c
字號:
/* usrConfig.c - user-defined system configuration library *//* Copyright 1984-2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------19x,12nov02,dbt Reworked symbol table synchronization initialization code (SPR #25509).19w,15may02,sbs changing default sys clock rate to a macro (SPR #1918)19v,24apr02,j_s make WDB Banner the same as in target/config/comps/src/usrWdbBanner.c (SPR #76099) updated 2001 to 200219u,19apr02,pch SPR 74348: Enable PPC Machine Check exception ASAP19t,05apr02,hbh Fixed SPR# 30368 and improved ntPassFs initialization.19s,04mar02,pch SPR 7360919r,11feb02,jkf SPR#73173, adding INCLUDE_DOSFS_MAIN init section.19q,21jan02,sn added INCLUDE_CTORS_DTORS19p,10dec01,jlb Change UGL to WindML product19o,07dec01,wef add USB initialization code.19n,07dec01,sn added INCLUDE_CPLUS_DEMANGLER19m,08nov01,jmp removed useless routeAdd() for SIMNT.19l,31oct01,gls added pthread code19k,27oct01,dat Adding trap for misaligned data section SPR 900619j,21sep01,aeg updated initialization sequence of selectLib (SPR #31319).19i,17sep01,pcm added excShowInit() (SPR 7333), and lstLibInit () (SPR 20698)19h,15may01,pch Move call of usrAltivecInit() from sysLib.c to usrConfig.c, to fix an undefined reference when building bootrom.19g,20jan99,dbs change VXCOM to COM19f,18dec98,dbs add VXCOM as separate item19e,06nov98,dbs add DCOM init when INCLUDE_DCOM is set19g,22feb01,scm add fast dram support capabilities for XScale...19f,16mar99,jpd changed copyright yearfrom 1998 to 1999.19e,13nov98,jpd call usrMmuInit if INCLUDE_MMU_MPU defined; conditionally add sysHwInit0() call before cacheLibInit(); added INCLUDE_INITIAL_MEM_ALLOCATION cdp make Thumb support for ARM CPUs dependent on ARM_THUMB.19j,27feb01,hk update INCLUDE_WDB_BANNER copyright notice to cover 2001.19i,08jun00,csi Merginf usrConfig.c for vxfusion19h,19apr00,zl updated copyright year to 2000.19g,02mar00,zl merged SH support into T2.01g,07mar01,sn simplify job of host val by using creationDate (which is overridable) rather than __DATE__19g,14oct99,jk added conditional init code for sound driver support.19i,30jul99,jkf fixed SPR#4429. ideDrv, ataDrv, fdDrv, warn on ERROR.19h,16mar99,jpd changed copyright yearfrom 1998 to 1999.19g,10mar99,drm Changing WINDMP to VXFUSION to reflect new product name.19f,13nov98,jpd call usrMmuInit if INCLUDE_MMU_MPU defined; conditionally add sysHwInit0() call before cacheLibInit(); added INCLUDE_INITIAL_MEM_ALLOCATION cdp make Thumb support for ARM CPUs dependent on ARM_THUMB.19e,08oct98,rlp added support for UGL and HTML.19d,17sep98,ms call cplusDemanglerInit if INCLUDE_CPLUS and INCLUDE_LOADER19c,17sep98,cym added code to calculate proper IP address for PCSIM.19b,01sep98,drm added code to initialize WindMP19a,10aug98,cym added code to inform tornado when the NT simulator is up.18z,23apr98,yp merged in TrueFFS support18y,22apr98,elp created group 1 module when standalone (fixed SPR# 20301).18w,22apr98,hdn added comment for tffsDrv().18t,17apr98,nps added support for rBuffShow.18s,09mar98,sjw merge in HTTP and JAVA changes for conflict resolution18r,18dec97,cth replaced windview, timestamp initialization with windviewConfig18q,13nov97,cth changed WV evtInstInit to wvLibInit2; removed connRtnSet, evtTaskInit; added include wvLib.h, rBuffLib.h18p,18aug97,nps changed WV buffer initialization with the rBuff API.18x,06mar98,ms changed copyright year from 1996 to 1998.18v,04feb98,jpd fix unsigned/signed warning (usrRoot); updated copyright date.18u,25feb98,jgn removed call to excShowInit(), it is called by excInit() if needed (SPR #20625)18t,19jan98,hdn changed a condition macro to include tffsDrv().18p,06jan98,cym added SIMNT as processor not to clear bss.18s,23sep97,yp added support for TFFS.18r,13aug97,cdp add Thumb (ARM7TDMI_T) support; 'fix' unsigned/signed comparison in usrRoot.18q,26feb97,dat added INCLUDE_USER_APPL and USER_APPL_INIT, spr 8071.18p,05feb97,cdp remove ARM test hook (_func_armStartup).18o,12dec96,cdp added _func_armStartup for ARM platforms.18n,13dec96,elp changed syncLibInit() into symSyncLibInit().18m,18nov96,dds SPR 2529: return status for sysScsiInit is now checked.18l,06nov96,ms removed 17n hack to usrClock.18k,01nov96,hdn added support for PCMCIA.18j,21oct96,hdn changed paramerters for new LPT driver.18i,04oct96,elp added INCLUDE_SYM_TBL_SYNC (SPR# 6775).18h,11jul96,tam changed copyright year from 1995 to 1996.18l,19jul96,hdn added support for ATA driver.18k,25jun96,jmb Eliminated alternative WDB macro names (SPR #5707).18j,25jun96,dbt Initialized _func_selWakeupListInit before tyLib (SPR #3314).18i,21jun96,jmb update copyright. SPR #636418h,21jun96,jmb long modhist -- deleted entries prior to 1994. SPR #652818g,12mar96,tam removed all #if (CPU == PPC403).18p,06jun96,ism bumped copyright to 1996.18o,26jan96,ism cleaned up vxsim/solaris version18f,02oct95,kvk added sysHwInit2() for PPC603.18e,27sep95,tpr removed #if (CPU_FAMILY != PPC) staff.18n,07nov95,srh fixed C++ support comments.18m,29oct95,dat fixed warnings about printf arguments18l,11oct95,jdi doc: changed .pG to .tG.18k,10oct95,dat new BSP revision id. Added WDB Banner printing18j,15jun95,ms updated for new serial drivers.18i,09jun95,ms cleaned up console initialization18h,30may95,p_m added initialization of formatted I/O library. replaced spyStop() by spyLibInit().18g,22may95,p_m no longer initialize object format specific libraries if loader is not included.18f,22may95,myz modified new serial device initialization for x86 support18e,22may95,ms added some WDB agent support18e,30oct95,ism updated for SIMSPARCSOLARIS18d,28mar95,kkk added scalability support, changed edata and end to arrays (SPR #3917), changed baud rate to be a macro in configAll.h18g,25may95,yao changed to bzero bss segment for PPC.18f,04apr95,caf added PPC cache support.18e,03mar95,yao added shsHwInit2 () for PPC403.18d,24feb95,caf added PPC support.18c,20nov94,kdl added hashLibInit() when using dosFs.18b,09nov94,jds additions for scsi backward compatability ; scsi[12]IfInit()18a,04nov94,kdl merge cleanup.17l,02aug94,tpr added cacheEnable (BRANCH_CACHE) for the MC68060.17m,15oct94,hdn added LPT driver.17o,20jul94,ms changed INCLUDE_AOUT_HPPA to INCLUDE_SOM_COFF17n,02may94,ms added VxSim HP hack to usrClock().17q,15mar94,smb renamed tEvtTask parameters.17p,15feb94,smb defined WV_MODE, EVTBUFFER_ADDRESS for wvInstInit().17o,12jan94,kdl modified posix initialization; added queued signal init.*//*DESCRIPTIONThis library is the WRS-supplied configuration module for VxWorks. Itcontains the root task, the primary system initialization routine, thenetwork initialization routine, and the clock interrupt routine.The include file config.h includes a number of system-dependent parameters usedin this file.In an effort to simplify the presentation of the configuration of vxWorks,this file has been split into smaller files. These additional configurationsource files are located in ../../src/config/usr[xxx].c and are #included intothis file below. This file contains the bulk of the code a customer islikely to customize.The module usrDepend.c contains checks that guard against unsupportedconfigurations such as INCLUDE_NFS without INCLUDE_RPC. The moduleusrKernel.c contains the core initialization of the kernel which is rarelycustomized, but provided for information. The module usrNetwork.c nowcontains all network initialization code. Finally, the module usrExtra.ccontains the conditional inclusion of the optional packages selected inconfigAll.h.The source code necessary for the configuration selected is entirelyincluded in this file during compilation as part of a standard build inthe board support package. No other make is necessary.INCLUDE FILES:config.hSEE ALSO:.tG "Getting Started, Cross-Development"*/#include "vxWorks.h" /* always first */#include "config.h" /* board support configuration header */#include "usrConfig.h" /* general configuration header */#include "usrDepend.c" /* include dependency rules */#include "usrKernel.c" /* kernel configuration */#include "usrExtra.c" /* conditionally included packages */#if CPU==SIMNTextern int simUpMutex;extern int win_ReleaseMutex(int hMutex);#endif#ifdef INCLUDE_HTTP#include "http/httpLib.h" /* Wind Web Server interfaces */#endif#ifdef INCLUDE_COMextern int comLibInit ();#endif#ifdef INCLUDE_DCOMextern int dcomLibInit ();#endif/* defines - must be after include of usrDepend.c */#ifdef INCLUDE_WDB#define FREE_MEM_START_ADRS (FREE_RAM_ADRS + WDB_POOL_SIZE)#else#define FREE_MEM_START_ADRS FREE_RAM_ADRS#endif#ifdef INCLUDE_INITIAL_MEM_ALLOCATION#define MEM_POOL_START_ADRS \ (ROUND_UP(FREE_MEM_START_ADRS, (INITIAL_MEM_ALIGNMENT)) + \ (INITIAL_MEM_SIZE))#else /* INCLUDE_INITIAL_MEM_ALLOCATION */#define MEM_POOL_START_ADRS FREE_MEM_START_ADRS#endif /* INCLUDE_INITIAL_MEM_ALLOCATION *//* global variables */int consoleFd; /* fd of initial console device */char consoleName[20]; /* console device name, eg. "/tyCo/0" */SYMTAB_ID statSymTbl; /* system error status symbol table id*/SYMTAB_ID standAloneSymTbl; /* STANDALONE version symbol table id */SYMTAB_ID sysSymTbl; /* system symbol table id */BOOT_PARAMS sysBootParams; /* parameters from boot line */int sysStartType; /* type of boot (WARM, COLD, etc) *//* Two magic cookies used to detect data section misalignment */#define TRAP_VALUE_1 0x12348765#define TRAP_VALUE_2 0x5a5ac3c3LOCAL volatile UINT32 trapValue1 = TRAP_VALUE_1;LOCAL volatile UINT32 trapValue2 = TRAP_VALUE_2;/********************************************************************************* usrInit - user-defined system initialization routine** This is the first C code executed after the system boots. This routine is* called by the assembly language start-up routine sysInit() which is in the* sysALib module of the target-specific directory. It is called with* interrupts locked out. The kernel is not multitasking at this point.** This routine starts by clearing BSS; thus all variables are initialized to 0,* as per the C specification. It then initializes the hardware by calling* sysHwInit(), sets up the interrupt/exception vectors, and starts kernel* multitasking with usrRoot() as the root task.** RETURNS: N/A** SEE ALSO: kernelLib** ARGSUSED0*/void usrInit ( int startType ) { /* * This trap will catch improper loading of the data section. * We check the magic cookie values to make sure the data section is * in the expected memory location. We do not want * to proceed further if the data segment is not correct. * * It should be easy to detect entry into the trap using an ICE, JTAG, * or logic analyzer. Without the trap, the processor is likely to run * away out of control. * * Data section misalignment can occur when there is a change in tool * chain, build rules, compiler, host utilites, etc. */ while (trapValue1 != TRAP_VALUE_1 || trapValue2 != TRAP_VALUE_2) { /* infinite loop */; } #if (CPU_FAMILY == SPARC) excWindowInit (); /* SPARC window management */#endif#ifdef INCLUDE_SYS_HW_INIT_0 /* * Perform any BSP-specific initialisation that must be done before * cacheLibInit() is called and/or BSS is cleared. */ SYS_HW_INIT_0 ();#endif /* INCLUDE_SYS_HW_INIT_0 */ /* configure data and instruction cache if available and leave disabled */#ifdef INCLUDE_CACHE_SUPPORT /* * SPR 73609: If a cache is not to be enabled, don't require * its mode to be defined. Instead, default it to disabled. */# if (!defined(USER_D_CACHE_ENABLE) && !defined(USER_D_CACHE_MODE))# define USER_D_CACHE_MODE CACHE_DISABLED# endif /* !USER_D_CACHE_ENABLE && !USER_D_CACHE_MODE */# if (!defined(USER_I_CACHE_ENABLE) && !defined(USER_I_CACHE_MODE))# define USER_I_CACHE_MODE CACHE_DISABLED# endif /* !USER_I_CACHE_ENABLE && !USER_I_CACHE_MODE */ cacheLibInit (USER_I_CACHE_MODE, USER_D_CACHE_MODE);#endif /* INCLUDE_CACHE_SUPPORT */#if CPU_FAMILY!=SIMNT && CPU_FAMILY!=SIMSPARCSUNOS && CPU_FAMILY!=SIMHPPA && CPU_FAMILY!=SIMSPARCSOLARIS /* don't assume bss variables are zero before this call */ bzero (edata, end - edata); /* zero out bss variables */#endif /* CPU_FAMILY!=SIMNT && CPU_FAMILY!=SIMSPARCSUNOS && CPU_FAMILY!=SIMHPPA && CPU_FAMILY!=SIMSPARCSOLARIS */#if (CPU_FAMILY == PPC) /* * Immediately after clearing the bss, ensure global stdin * etc. are ERROR until set to real values. This is used in * target/src/arch/ppc/excArchLib.c to improve diagnosis of * exceptions which occur before I/O is set up. */ ioGlobalStdSet (STD_IN, ERROR); ioGlobalStdSet (STD_OUT, ERROR); ioGlobalStdSet (STD_ERR, ERROR);#endif /* CPU_FAMILY == PPC */ sysStartType = startType; /* save type of system start */ intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS); /* set vector base table */#if (CPU_FAMILY == AM29XXX) excSpillFillInit (); /* am29k stack cache managemt */#endif #if 1#ifdef INCLUDE_EXC_HANDLING# if (CPU_FAMILY == PPC) && defined(INCLUDE_EXC_SHOW) /* * Do this ahead of excVecInit() to set up _func_excPanicHook, in case * the enabling of Machine Check there allows a pending one to occur. * excShowInit() will be called again later, harmlessly. */ excShowInit ();# endif /* CPU_FAMILY == PPC && defined(INCLUDE_EXC_SHOW) */ excVecInit (); /* install exception vectors */#endif /* INCLUDE_EXC_HANDLING */#endif sysHwInit (); /* initialize system hardware */ usrKernelInit (); /* configure the Wind kernel */#ifdef INCLUDE_USB # ifdef INCLUDE_OHCI_PCI_INIT sysUsbPciOhciInit ();# endif#endif#ifdef INCLUDE_CACHE_SUPPORT#ifdef USER_I_CACHE_ENABLE cacheEnable (INSTRUCTION_CACHE); /* enable instruction cache */#endif /* USER_I_CACHE_ENABLE */#ifdef USER_D_CACHE_ENABLE cacheEnable (DATA_CACHE); /* enable data cache */#endif /* USER_D_CACHE_ENABLE */#if (CPU == MC68060)#ifdef USER_B_CACHE_ENABLE cacheEnable (BRANCH_CACHE); /* enable branch cache */#endif /* USER_B_CACHE_ENABLE */#endif /* (CPU == MC68060) */#endif /* INCLUDE_CACHE_SUPPORT */ /* start the kernel specifying usrRoot as the root task */ kernelInit ((FUNCPTR) usrRoot, ROOT_STACK_SIZE, (char *) MEM_POOL_START_ADRS, sysMemTop (), ISR_STACK_SIZE, INT_LOCK_LEVEL); }/********************************************************************************* usrRoot - the root task** This is the first task to run under the multitasking kernel. It performs* all final initialization and then starts other tasks.** It initializes the I/O system, installs drivers, creates devices, and sets* up the network, etc., as necessary for a particular configuration. It* may also create and load the system symbol table, if one is to be included.* It may then load and spawn additional tasks as needed. In the default* configuration, it simply initializes the VxWorks shell.** RETURNS: N/A*/void usrRoot ( char * pMemPoolStart, /* start of system memory partition */ unsigned memPoolSize /* initial size of mem pool */ ) { char tyName [20]; int ix; /* Initialize the memory pool before initializing any other package. * The memory associated with the root task will be reclaimed at the * completion of its activities. */#ifdef INCLUDE_MEM_MGR_FULL memInit (pMemPoolStart, memPoolSize); /* initialize memory pool */#else memPartLibInit (pMemPoolStart, memPoolSize);/* initialize memory pool */#endif /* INCLUDE_MEM_MGR_FULL */#ifdef INCLUDE_SHOW_ROUTINES memShowInit (); /* initialize memShow routine */#endif /* INCLUDE_SHOW_ROUTINES */#if defined(INCLUDE_MMU_BASIC) || defined(INCLUDE_MMU_FULL) || \ defined(INCLUDE_MMU_MPU) usrMmuInit (); /* initialize the mmu */#endif /* defined(INCLUDE_MMU_BASIC, INCLUDE_MMU_FULL, INCLUDE_MMU_MPU) */ /* set up system timer */ sysClkConnect ((FUNCPTR) usrClock, 0); /* connect clock ISR */ sysClkRateSet (SYS_CLK_RATE); /* set system clock rate */ sysClkEnable (); /* start it */#ifdef INCLUDE_FAST_DRAM/* * make use of data cache as fast DRAM, * establish parameters in config.h, MMU * must be initialed before data cache is * initialized as data ram... */ cacheCreateInternalDataRAM((UINT32 *)FD_ORIGIN, FD_NUMLINES);#endif /* * The select library needs to be initialized before the tyLib module * since the _func_selWakeupListInit FUNCPTR is required (SPR #3314). * The installation of the select task delete hooks is performed * later in usrRoot() after NFS and RPC have been initialized. */#ifdef INCLUDE_SELECT selectInit (NUM_FILES);#endif /* INCLUDE_SELECT */ /* initialize I/O system */#ifdef INCLUDE_IO_SYSTEM iosInit (NUM_DRIVERS, NUM_FILES, "/null"); consoleFd = NONE; /* assume no console device */#ifdef INCLUDE_TYCODRV_5_2#ifdef INCLUDE_TTY_DEV if (NUM_TTY > 0) { tyCoDrv (); /* install console driver */ for (ix = 0; ix < NUM_TTY; ix++) /* create serial devices */ { sprintf (tyName, "%s%d", "/tyCo/", ix); (void) tyCoDevCreate (tyName, ix, 512, 512); if (ix == CONSOLE_TTY) strcpy (consoleName, tyName); /* store console name */ } consoleFd = open (consoleName, O_RDWR, 0); /* set baud rate */ (void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE); (void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL); }#endif /* INCLUDE_TTY_DEV */#else /* !INCLUDE_TYCODRV_5_2 */#ifdef INCLUDE_TTY_DEV if (NUM_TTY > 0) { ttyDrv(); /* install console driver */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -