📄 bootconfig.c
字号:
{
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 */
if (getArg (&pLine, &value, DEC, !OPT) == OK)
{
if (value != 0)
{
*FGA_CTL1 |= FGA_CTL1_SCON;
printf ("System controller on.\n");
}
else
{
*FGA_CTL1 &= ~FGA_CTL1_SCON;
printf ("System controller off.\n");
}
}
break;
#endif /* TARGET_FRC_30 || TARGET_FRC_31 || TARGET_FRC_33 */
case 'p': /* print boot params */
bootParamsShow (BOOT_LINE_ADRS);
break;
case 'P': /* print pci devices */
pciDeviceShowAll(0);
break;
case 'c': /* change boot params */
setAllBootParams();
bootStringToStruct ((char*)(BOOT_LINE_ADRS), ¶ms );
break;
case 'g': /* go */
if (getArg (&pLine, (int *) &entry, HEX, !OPT) == OK)
go (entry);
break;
/*设定启动盘类型*/
case 'b':
case 'B':
setBootDisk(pLine);
break;
/*修改业务网口IP和网关*/
case 'I':
case 'i':
setEndIp(pLine);
break;
case 'w': /*format flash, then attach to TFFS*/
case 'W':
#ifdef INCLUDE_TFFS_1208
printf("Format flash ...\n");
if ( tffsDevFormat( 0,(int)&quickFormatParams ) == ERROR )
{
printf( "tffsDevFormat ERROR!\n" );
}
else
{
(void)dosFsInit (NUM_DOSFS_FILES); /* initialize DOS-FS */
printf ("Attaching to TFFS... ");
(void)usrTffsConfig ( 0, 0, "/tffs0" );
printf ("done.\n");
}
#endif
break;
/*复位单板*/
case 'r':
case 'R':
reboot (BOOT_NO_AUTOBOOT); /* something is awry */
break;
#ifdef INCLUDE_NETWORK
case 'n':
netifAdrsPrint (pLine);
break;
#ifdef ETHERNET_ADR_SET
case 'N':
mEnet (pLine);
break;
#endif /* ETHERNET_ADR_SET */
#endif /* INCLUDE_NETWORK */
case '?': /* help */
case 'h': /* help */
bootHelp ();
break;
case '@': /* load and go with internal params */
case '$': /* load and go with internal params */
/*从PC或远端服务器启动*/
if(OK == netBootLoad(&entry))
{
go (entry);
}
break;
case 'o':
case 'O':
/*从本地文件系统启动(CF卡或硬盘)*/
if(OK == dosFsBootLoad(&entry))
{
go (entry);
}
break;
case 'l': /* load with internal params */
if (bootLoad (pLine, &entry) == OK)
{
printf ("entry = 0x%x\n", (int) entry);
}
else
{
taskDelay (sysClkRateGet ()); /* pause a second */
reboot (BOOT_NO_AUTOBOOT); /* something is awry */
}
break;
case 'v': /* print version & logo */
printBootLogo ();
break;
default:
printf ("Unrecognized command. Type '?' for help.\n");
break;
} /* switch */
} /* FOREVER */
}
/******************************************************************************
*
* autoboot - do automatic boot sequence
*
* RETURNS: Doesn't return if successful (starts execution of booted system).
*/
LOCAL char autoboot
(
int timeout /* timeout time in seconds */
)
{
ULONG autoBootTime;
int timeLeft;
UINT timeMarker;
int bytesRead = 0;
FUNCPTR entry;
char key;
if (timeout > 0)
{
printf ("\nPress any key to stop auto-boot...\n");
/* Loop looking for a char, or timeout after specified seconds */
autoBootTime = tickGet () + sysClkRateGet () * timeout;
timeMarker = tickGet () + sysClkRateGet ();
timeLeft = timeout;
printf ("%2d\r", timeLeft);
while ((tickGet () < autoBootTime) && (bytesRead == 0))
{
(void) ioctl (consoleFd, FIONREAD, (int) &bytesRead);
if (tickGet () == timeMarker)
{
timeMarker = tickGet () + sysClkRateGet ();
printf ("%2d\r", --timeLeft);
}
}
}
if (bytesRead == 0) /* nothing typed so auto-boot */
{
/* put the console back in line mode so it echoes (so's you can bang
* on it to see if it's still alive) */
(void) ioctl (consoleFd, FIOSETOPTIONS, OPT_TERMINAL);
printf ("\nAuto-booting from DosFs...\n\n");
if (OK == dosFsBootLoad(&entry))
{
go (entry); /* ... and never return */
}
#if 0
else
{
taskDelay (sysClkRateGet () * 20); /* pause 20 seconds */
reboot (BOOT_NO_AUTOBOOT); /* something is awry */
}
#endif
}
else
{
/* read the key that stopped autoboot */
read (consoleFd, &key, 1);
return (key & 0x7f); /* mask off parity in raw mode */
}
return (ERROR); /* for lint - can't really get here */
}
/******************************************************************************
*
* printBootLogo - print initial boot banner page
*/
LOCAL void printBootLogo (void)
{
printf ("\n\n\n\n\n\n\n\n\n\n\n");
printf ("%28s%s", "","VxWorks System Boot");
printf ("\n\n\nCopyright 1984-2002 Wind River Systems, Inc.\n\n\n\n\n\n");
printf ("CPU: %s\n", sysModel ());
printf ("Version: %s\n", vxWorksVersion);
printf ("BSP version: " BSP_VERSION BSP_REV "\n");
printf ("Creation date: %s\n\n", creationDate);
}
/*******************************************************************************
*
* bootHelp - print brief help list
*/
LOCAL void bootHelp (void)
{
static char *helpMsg[] =
{
"?", "- print this list",
"@", "- boot (load and go)",
"o", "-boot from dosFS",
"p", "- print boot params",
"c", "- change boot params",
"l", "- load boot file",
"b", "- set boot disk",
"i", "- set IP address",
"g adrs", "- go to adrs",
"d adrs[,n]", "- display memory",
"m adrs", "- modify memory",
"f adrs, nbytes, value", "- fill memory",
"t adrs, adrs, nbytes", "- copy memory",
"e", "- print fatal exception",
"v", "- print boot logo with version",
#ifdef INCLUDE_NETWORK
"n netif", "- print network interface device address",
#if defined(ETHERNET_ADR_SET)
"N", "- set ethernet address",
#endif /* ETHERNET_ADR_SET */
#endif /* INCLUDE_NETWORK */
#if defined(TARGET_HK_V2F) || defined(TARGET_FRC_30) || \
defined(TARGET_FRC_31) || defined(TARGET_FRC_33)
"s [0/1]", "- system controller 0 = off, 1 = on",
#endif /* TARGET_HK_V2F/FRC_30/FRC_31/FRC_33 */
"$dev(0,procnum)host:/file h=# e=# b=# g=# u=usr [pw=passwd] f=#", "",
" tn=targetname s=script o=other", "",
#ifdef INCLUDE_SCSI_BOOT
"boot device: scsi=id,lun file name: /sd0/vxWorks","",
#endif /*INCLUDE_SCSI_BOOT*/
#ifdef INCLUDE_FD
"boot device: fd=drive,fdType file name: /fd0/vxWorks","",
#endif /* INCLUDE_FD */
#ifdef INCLUDE_IDE
"boot device: ide=drive,configType file name: /ide0/vxWorks","",
#endif /* INCLUDE_IDE */
#ifdef INCLUDE_ATA_686
"boot device: ata=ctrl,drive file name: /ata0/vxWorks","",
#endif /* INCLUDE_ATA */
#ifdef INCLUDE_PCMCIA
"boot device: pcmcia=sock file name: /pcmcia0/vxWorks","",
#endif /* INCLUDE_PCMCIA */
#ifdef INCLUDE_TFFS_1208
"boot device: tffs=drive,removable file name: /tffs0/vxWorks","",
#endif /* INCLUDE_TFFS_1208 */
#ifdef INCLUDE_TSFS_BOOT
"boot device: tsfs file name: /tgtsvr/vxWorks","",
#endif /*INCLUDE_TSFS_BOOT */
"Boot flags:", "",
#if defined(TARGET_HK_V2F) || defined(TARGET_FRC_30) || \
defined(TARGET_FRC_31) || defined(TARGET_FRC_33)
" 0x01 - don't be system controller", "",
#endif /* TARGET_HK_V2F/FRC_30/FRC_31/FRC_33 */
" 0x02 - load local system symbols", "",
" 0x04 - don't autoboot", "",
" 0x08 - quick autoboot (no countdown)", "",
#ifdef INCLUDE_NETWORK
" 0x20 - disab
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -