⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootconfig.c

📁 MPC8241:本程序是freescale的824*系列的BSP源程序
💻 C
📖 第 1 页 / 共 5 页
字号:
#endif	/* INCLUDE_PCMCIA */#ifdef	INCLUDE_TFFSLOCAL STATUS    tffsLoad ();#endif	/* INCLUDE_TFFS */#ifdef	INCLUDE_TSFS_BOOTLOCAL STATUS	tsfsLoad ();LOCAL void	wdbRebootEventGet ();#endif	/* INCLUDE_TSFS_BOOT */#endif	/* __STDC__ *//********************************************************************************* usrInit - user-defined system initialization routine** This routine is called by the start-up code in romStart().  It is called* before kernel multi-tasking is enabled, with the interrupts locked out.** It starts by clearing BSS, so all variables are initialized to 0 as per* the C specification.  Then it sets up exception vectors, initializes the* hardware by calling sysHwInit(), and finally starts the kernel with the* usrRoot() task to do the remainder of the initialization.** NOMANUAL*/void usrInit     (    int startType    )    {#if (CPU_FAMILY == SPARC)    excWindowInit ();				/* SPARC window management */#endif#if	(CPU_FAMILY == MIPS)    sysGpInit ();				/* MIPS global pointer */#endif	/* (CPU_FAMILY == MIPS) */	/* add by zoutl 2003-5-24 10:32 */	sysDebugMsg("1.SDRAM test OK!\n\r",0);#ifdef BOOT_DEBUG_MSG	sysDebugMsg("Move to ram succeed!\n\r",0);#endif    /* configure data and instruction cache if available and leave disabled */#ifdef	INCLUDE_CACHE_SUPPORT    cacheLibInit (USER_I_CACHE_MODE, USER_D_CACHE_MODE);#endif	/* INCLUDE_CACHE_SUPPORT */#if (CPU == SPARClite)    cacheLib.textUpdateRtn = NULL;		/* XXX - mod hist 07u */#endif    /* don't assume bss variables are zero before this call */    bzero (edata, end - edata);		/* zero out bss variables */    sysStartType = startType;    intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS);	/* set vector base table */#if (CPU_FAMILY == AM29XXX)    excSpillFillInit ();                        /* am29k stack cache managemt */#endif    excVecInit ();				/* install exception vectors */        /* add by zoutl 2003-5-24 10:32 */#ifdef BOOT_DEBUG_MSG	sysDebugMsg("install exception vectors succeed!\n\r",0);#endif    sysHwInit ();				/* initialize system hardware */        /* add by zoutl 2003-5-24 10:32 */    PciBusTest();#ifdef BOOT_DEBUG_MSG	sysDebugMsg("sysHwInit succeed!\n\r",0);#endif    usrKernelInit ();				/* configure the Wind kernel */#if	(CPU==SPARC) || (CPU_FAMILY==I80X86)	/* XXX workaround for sun1e */#undef USER_I_CACHE_ENABLE	/* XXX disable instruction cache */#endif	/* (CPU==SPARC) || (CPU_FAMILY==I80X86)	*/#ifdef 	USER_I_CACHE_ENABLE    cacheEnable (INSTRUCTION_CACHE);		/* enable instruction cache */#endif	/* USER_I_CACHE_ENABLE */    /* start the kernel specifying usrRoot as the root task */    kernelInit ((FUNCPTR) usrRoot, ROOT_STACK_SIZE,#ifdef INCLUDE_WDB    		(char *) FREE_RAM_ADRS + WDB_POOL_SIZE,#else		(char *) FREE_RAM_ADRS,#endif		sysMemTop (), ISR_STACK_SIZE, INT_LOCK_LEVEL);    }/********************************************************************************* usrRoot - user-defined root task** The root task performs any initialization that should be done* subsequent to the kernel initialization.** It initializes the I/O system, install drivers, create devices,* sets up the network, etc., as necessary for the particular configuration.* It may also create the system symbol table if one is to be included.* Finally, it spawns the boot command loop task.** NOMANUAL*/void usrRoot    (    char *      pMemPoolStart,          /* start of system memory partition */    unsigned    memPoolSize             /* initial size of mem pool */    )    {    char tyName [20];    int ix;#ifdef INCLUDE_END    int count;    END_TBL_ENTRY* pDevTbl;#endif /* INCLUDE_END */    /* 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.                                      */    memInit (pMemPoolStart, memPoolSize);/* XXX select between memPartLibInit */    /* set up system timer */    sysClkConnect ((FUNCPTR) usrClock, 0);/* connect clock interrupt routine */    sysClkRateSet (60);			/* set system clock rate */    sysClkEnable ();			/* start it */    /* initialize I/O and file system */    iosInit (NUM_DRIVERS, NUM_FILES, "/null");    consoleFd = NONE;    /* install driver for on-board serial ports and make devices */#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_ECHO | OPT_CRMOD | OPT_TANDEM | OPT_7_BIT);        }#endif  /* INCLUDE_TTY_DEV */#else   /* !INCLUDE_TYCODRV_5_2 */#ifdef  INCLUDE_TTY_DEV    if (NUM_TTY > 0)        {        ttyDrv();                               /* install console driver */        for (ix = 0; ix < NUM_TTY; ix++)        /* create serial devices */            {#if (defined(INCLUDE_WDB) && (WDB_COMM_TYPE == WDB_COMM_SERIAL))	    if (ix == WDB_TTY_CHANNEL)          /* don't use WDBs channel */	    	continue;#endif            sprintf (tyName, "%s%d", "/tyCo/", ix);            (void) ttyDevCreate (tyName, sysSerialChanGet(ix), 512, 512);            if (ix == CONSOLE_TTY)              /* init the tty console */                {                strcpy (consoleName, tyName);                consoleFd = open (consoleName, O_RDWR, 0);                (void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);                (void) ioctl (consoleFd, FIOSETOPTIONS,			OPT_ECHO | OPT_CRMOD | OPT_TANDEM | OPT_7_BIT);                }            }        }#endif  /* INCLUDE_TTY_DEV */#ifdef INCLUDE_PC_CONSOLE    pcConDrv ();    for (ix = 0; ix < N_VIRTUAL_CONSOLES; ix++)        {        sprintf (tyName, "%s%d", "/pcConsole/", ix);        (void) pcConDevCreate (tyName,ix, 512, 512);        if (ix == PC_CONSOLE)           /* init the console device */            {            strcpy (consoleName, tyName);            consoleFd = open (consoleName, O_RDWR, 0);            (void) ioctl (consoleFd, FIOBAUDRATE, CONSOLE_BAUD_RATE);            (void) ioctl (consoleFd, FIOSETOPTIONS,			OPT_ECHO | OPT_CRMOD | OPT_TANDEM | OPT_7_BIT);            }        }#endif  /* INCLUDE_PC_CONSOLE */#endif  /* !INCLUDE_TYCODRV_5_2 */#ifdef INCLUDE_WDB    wdbConfig();		/* configure and initialize the WDB agent */    vxBootFile[0] = NULL;	/* clear boot line set by wdbConfig() */#if defined(INCLUDE_TSFS_BOOT) && defined(INCLUDE_TSFS_BOOT_VIO_CONSOLE)    consoleFd = open ("/vio/0", O_RDWR, 0);	/* for Target Server Console */#endif#endif	/* INCLUDE_WDB */    ioGlobalStdSet (STD_IN,  consoleFd);    ioGlobalStdSet (STD_OUT, consoleFd);    ioGlobalStdSet (STD_ERR, consoleFd);        /* add by zoutl 2003-5-23 14:36 */   /* printf("3.Begin PCI device scaning...\n");    pciDeviceShow(0); */        pipeDrv ();					/* install pipe driver */    excInit ();					/* init exception handling */    excHookAdd ((FUNCPTR) bootExcHandler);	/* install exc handler */    logInit (consoleFd, 5);			/* initialize logging */#ifdef	INCLUDE_DOSFS    hashLibInit ();				/* hashLib used by dosFS */#endif    /* initialize object module loader */#if	defined(INCLUDE_AOUT)    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 ();				/* use elf format */#endif#endif 						/* mips cpp no elif */#endif#endif#ifdef INCLUDE_END    /* Initialize all the available devices. */    for (count = 0, pDevTbl = endDevTbl; pDevTbl->endLoadFunc != END_TBL_END;         pDevTbl++, count++)        {        cookieTbl[count] = muxDevLoad (pDevTbl->unit, pDevTbl->endLoadFunc,                                       pDevTbl->endLoadString,                                       pDevTbl->endLoan, pDevTbl->pBSP);        if (cookieTbl[count] == NULL)            {            printf ("muxLoad failed!\n");            }        }#endif /* INCLUDE_END */	#if 1	    taskSpawn ("tBoot", bootCmdTaskPriority, bootCmdTaskOptions,		bootCmdTaskStackSize, (FUNCPTR) bootCmdLoop,		0,0,0,0,0,0,0,0,0,0);
#else
    taskSpawn ("selfTest",60,0,20000,(FUNCPTR)selfTest,0,0,0,0,0,0,0,0,0,0);
#endif    }/********************************************************************************* usrClock - user defined system clock interrupt routine** This routine is called at interrupt level on each clock interrupt.  It is* installed a call to sysClkConnect().  It calls any other facilities that* need to know about clock ticks, including the kernel itself.** If the application needs anything to happen at clock interrupt level,* it should be added to this routine.** NOMANUAL*/void usrClock (void)    {    tickAnnounce ();	/* announce system tick to kernel */    }/********************************************************************************* bootCmdLoop - read and execute user commands forever (until boot)*/LOCAL void bootCmdLoop (void)    {    BOOT_PARAMS params;    char line [MAX_LINE];    char *pLine;    int nwords;    int nbytes;    int value;    int adr;    int adr2;    FUNCPTR entry;    char key = 0;    /* flush standard input to get rid of any garbage;     * E.g. the Heurikon HKV2F gets junk in USART if no terminal connected.     */    (void) ioctl (STD_IN, FIOFLUSH, 0 /*XXX*/);    if (sysStartType & BOOT_CLEAR)	printBootLogo ();    usrBootLineInit (sysStartType);    /* print out any new exception message -     * the first byte is zeroed after printing so that we won't print     * it again automatically.  However, 'e' command will still print out     * the remainder. */    printExcMsg (sysExcMsg);    *sysExcMsg = EOS;		/* indicate exception message is old */    /* start autoboot, unless no-autoboot specified */    bootStringToStruct (BOOT_LINE_ADRS, &params);    sysFlags = params.flags;#if defined(INCLUDE_TSFS_BOOT) && defined(INCLUDE_TSFS_BOOT_VIO_CONSOLE)    /* Wait for Target Server connection */    while (!wdbTargetIsConnected())    	taskDelay (sysClkRateGet());    /*     * disable the auto-boot mechanism, because the Target Server may not have     * time to start its VIO Console before the end of the auto-boot coutdown.     */    sysStartType |= BOOT_NO_AUTOBOOT;#endif    if (!(sysStartType & BOOT_NO_AUTOBOOT) &&	!(sysFlags & SYSFLG_NO_AUTOBOOT))	{	int timeout = TIMEOUT;	if ((sysStartType & BOOT_QUICK_AUTOBOOT) ||	    (sysFlags & SYSFLG_QUICK_AUTOBOOT))	    {	    timeout = 1;	    }	key = autoboot (timeout);	/* doesn't return if successful */	}    /* If we're here, either we aren't auto-booting, or we got an error     * auto-booting, or the auto-booting was stopped. */    /* put console in line mode */    (void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);    /* read and execute the ROM commands */    printf ("\n");    FOREVER	{	if ((key == '!') || (key == '@'))	    {	    line [0] = key;	    line [1] = EOS;	    key = 0;	    }	else	    {	    printf ("[VxWorks Boot]: ");	    fioRdString (STD_IN, line, sizeof (line));	    }	adr = adr2 = 0;	nwords = 0;	/* take blanks off end of line */	pLine = line + strlen (line) - 1;		/* point at last char */	while ((pLine >= line) && (*pLine == ' '))	    {	    *pLine = EOS;	    pLine--;	    }	pLine = line;	skipSpace (&pLine);	switch (*(pLine++))	    {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -