📄 bootconfig.c
字号:
#endif /* INCLUDE_TTY_DEV */LedOut(23);#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); pipeDrv (); /* install pipe driver */#if defined(INCLUDE_EXC_HANDLING) && defined(INCLUDE_EXC_TASK)#ifdef INCLUDE_EXC_SHOW excShowInit (); /* init exception show routines */#endif excInit (); /* initialize exception handling */#endif /* defined(INCLUDE_EXC_HANDLING) && defined(INCLUDE_EXC_TASK) */ 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#endifLedOut(24);#ifdef INCLUDE_PCMCIA pcmciaInit (); /* init PCMCIA Lib */#endif /* INCLUDE_PCMCIA */#ifdef INCLUDE_END /* initialize the MUX */ muxMaxBinds = MUX_MAX_BINDS; if (muxLibInit() == ERROR) return; /* can't return ERROR */ /* Initialize all the available devices. */ for (count = 0, pDevTbl = endDevTbl; pDevTbl->endLoadFunc != END_TBL_END; pDevTbl++, count++) { cookieTbl[count].pCookie = muxDevLoad (pDevTbl->unit, pDevTbl->endLoadFunc, pDevTbl->endLoadString, pDevTbl->endLoan, pDevTbl->pBSP); if (cookieTbl[count].pCookie == NULL) { printf ("muxLoad failed!\n"); } cookieTbl[count].unitNo=pDevTbl->unit; bzero((void *)cookieTbl[count].devName,END_NAME_MAX); pDevTbl->endLoadFunc((char*)cookieTbl[count].devName, NULL); }#endif /* INCLUDE_END */LedOut(25); taskSpawn ("tBoot", bootCmdTaskPriority, bootCmdTaskOptions, bootCmdTaskStackSize, (FUNCPTR) bootCmdLoop, 0,0,0,0,0,0,0,0,0,0); LedOut(99); }/********************************************************************************* 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 */ } void LedOut(char ch){ char chmod1[]={0x48,0xeb,0x52, 0x62,0xe1,0x64,0x44,0xea,0x40,0x60,0xC0,0x45,0x5c,0x43,0x54,0xd4}; unsigned short value; volatile short *p = (volatile short *)0x6080000; if (ch>99) ch = ch % 100; value = chmod1[ch/10]; value <<= 8; value |= chmod1[ch%10]; *p = value;}UINT32 u32Array[2048];int bench(void) { UINT32 *pInt; UINT32 i; int tick1,tick2; pInt = malloc(2048*sizeof(UINT32)); for(i=0;i<2048;i++) u32Array[i]=i; tick1=tickGet(); for (i=0; i< 10000;i++) bcopyLongs((char*)u32Array, (char*)pInt,2048); tick2=tickGet(); printf("\ntick1=%d tick2=%d (tick2-tick1)=%d\n",tick1,tick2,(tick2-tick1),0,0,0); return 0; }/*引用函数原型*/STATUS ftpdInit (FUNCPTR, int stackSize);int netInit(char * bootString);void NetTest(void){ unsigned char c[]={0x21,0x41,0xa1,0xe1}; int i,j; volatile unsigned char *p =(volatile unsigned char *)(NETBASE); printf("Start NET Controller Test!\n"); printf("Read registers from controller!\n"); for (i=0; i<4; i++) { *(volatile unsigned char *)(p) = c[i]; printf("\nPage%c:",'0'+i); for (j=0;j<16;j++) { if (j&1) { printf("%02X ",(int)(*(volatile unsigned char *)(p+j+0x20-1))); } else { printf("%02X ",(int)(*(volatile unsigned char *)(p+j))); } } } printf("\nFinish NET Controller Test!\n"); *(NETBASE+0x00) = 0x22;}/********************************************************************************* bootCmdLoop - read and execute user commands forever (until boot)*/LOCAL void bootCmdLoop (void) { BOOT_PARAMS params; char line [BOOT_CMD_MAX_LINE]; char *pLine; int nwords; int nbytes; int value; int adr; int adr2; FUNCPTR entry; char key = 0; int drive=0; int removable=0; char fileName[]="/tffs0/"; /* 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); /*bench();*/ /*初始化加载网络和FTP服务器*/#ifdef INCLUDE_NETWORK if( netInit(BOOT_LINE_ADRS) == ERROR ) printf ("netInit failed.\n");#ifdef INCLUDE_FTP_SERVER if( ftpdInit(0,0) == ERROR) printf ("ftpdInit failed.\n"); /*在ftpdlib.c指定目录,主程序也可用*/ #endif#endif /* 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 */if (tffsDrv () != OK) { printErr ("Could not initialize.\n"); return ; } printf ("Attaching to TFFS... "); dosFsInit (NUM_DOSFS_FILES); /* initialize DOS-FS */ if (usrTffsConfig (drive, removable, fileName) == ERROR) { printErr ("usrTffsConfig failed.\n"); return ; } loginUserAdd("xsq","1234"); /* name="xsq",pass="1234"*/ cd("fileName"); printErr ("done.\n"); /* start autoboot, unless no-autoboot specified */ bootStringToStruct (BOOT_LINE_ADRS, ¶ms); 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 == '@') { 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++)) { case EOS: /* blank line */ break; case 'd': /* display */ if ((getArg (&pLine, &adr, HEX, OPT) == OK) && (getArg (&pLine, &nwords, DEC, OPT) == OK)) d ((char *) adr, nwords); break; case 'e': /* exception */ printExcMsg (sysExcMsg + 1); break; case 'f': /* fill */ if ((getArg (&pLine, &adr, HEX, !OPT) == OK) && (getArg (&pLine, &nbytes, DEC, !OPT) == OK) && (getArg (&pLine, &value, DEC, !OPT) == OK)) { bfillBytes ((char *) adr, nbytes, value); } break; case 't': /* transpose(?) (running out of letters!) */ if ((getArg (&pLine, &adr, HEX, !OPT) == OK) && (getArg (&pLine, &adr2, HEX, !OPT) == OK) && (getArg (&pLine, &nbytes, HEX, !OPT) == OK)) { bcopy ((char *) adr, (char *) adr2, nbytes); } break; case 'm': /* modify */ if (getArg (&pLine, &adr, HEX, !OPT) == OK) m ((char *) adr); break;#ifdef TARGET_HK_V2F case 's': /* system controller */ { extern ULONG sysBCLSet (); if (getArg (&pLine, &value, DEC, !OPT) == OK) { if (value != 0) { (void) sysBCLSet ((ULONG)HK_BCL_SYS_CONTROLLER, (ULONG)HK_BCL_SYS_CONTROLLER); printf ("System controller on.\n"); } else { (void) sysBCLSet ((ULONG)HK_BCL_SYS_CONTROLLER, (ULONG)0); printf ("System controller off.\n"); } } break; }#endif /* TARGET_HK_V2F */#if defined(TARGET_FRC_30) || defined(TARGET_FRC_31) || defined(TARGET_FRC_33) case 's': /* system controller */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -