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

📄 bootconfig.c

📁 MPC850的bootrom。使用后可以直接启动boot程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		{		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 'c':		/* change boot params */		bootParamsPrompt (BOOT_LINE_ADRS);		(void) sysNvRamSet (BOOT_LINE_ADRS,				    strlen (BOOT_LINE_ADRS) + 1, 0);		break;	    case 'g':		/* go */		if (getArg (&pLine, (int *) &entry, HEX, !OPT) == OK)		    go (entry);		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 */		if (bootLoad (pLine, &entry) == OK)		    {		    go (entry);		    }		else		    {		    taskDelay (sysClkRateGet ());	/* pause a second */		    reboot (BOOT_NO_AUTOBOOT);		/* something is awry */		    }		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;	    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...\n\n");	if (bootLoad (BOOT_LINE_ADRS, &entry) == OK)	    go (entry);				/* ... and never return */	else	    {	    printf ("Can't load boot file!!\n");	    taskDelay (sysClkRateGet ());	/* pause a second */	    reboot (BOOT_NO_AUTOBOOT);		/* something is awry */	    }	}    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 2004  GTT, 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)",	"p",                      "- print boot params",	"c",                      "- change boot params",	"l",                      "- load boot file",	"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",#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	"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	"boot device: tffs=drive,removable     file name: /tffs0/vxWorks","",#endif	/* INCLUDE_TFFS */#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  - disable login security",		"",#ifdef  INCLUDE_DHCPC	"  0x40  - use dhcp to get boot parameters",	"",#else	"  0x40  - use bootp to get boot parameters",	"",#endif	"  0x80  - use tftp to get boot image",		"",	"  0x100 - use proxy arp",			"",#endif  /* INCLUDE_NETWORK */	NULL	};    FAST char **pMsg;#ifdef  INCLUDE_NETWORK    FAST NETIF *pNif;#endif  /* INCLUDE_NETWORK */#ifdef INCLUDE_END    int count;    char       muxDevName[8];    END_TBL_ENTRY* pDevTbl;#endif /* INCLUDE_END */    printf ("\n");    for (pMsg = helpMsg; *pMsg != NULL; pMsg += 2)	printf (" %-21s %s\n", *pMsg, *(pMsg + 1));#ifdef  INCLUDE_NETWORK    printf ("\navailable boot devices:");#ifdef INCLUDE_END    printf ("Enhanced Network Devices\n");    for (count = 0, pDevTbl = endDevTbl; pDevTbl->endLoadFunc != END_TBL_END;         pDevTbl++, count++)        {        if (!pDevTbl->processed)            {            muxDevName [0] = NULL;            pDevTbl->endLoadFunc (muxDevName, NULL);            printf (" %s%d", muxDevName, pDevTbl->unit);            }        }#endif /* INCLUDE_END */        for (pNif = netIf; pNif->ifName != 0; pNif++)	{	if (strncmp (pNif->ifName, "lo", 2) != 0)	    printf (" %s", pNif->ifName);	}#endif  /* INCLUDE_NETWORK */#ifdef	INCLUDE_SCSI_BOOT    printf (" scsi");#endif	/*INCLUDE_SCSI_BOOT*/#ifdef  INCLUDE_FD    printf (" fd");#endif  /* INCLUDE_FD */#ifdef  INCLUDE_IDE    printf (" ide");#endif  /* INCLUDE_IDE */#ifdef  INCLUDE_ATA    printf (" ata");#endif  /* INCLUDE_ATA */#ifdef  INCLUDE_TFFS    printf (" tffs");#endif  /* INCLUDE_TFFS */#ifdef  INCLUDE_TSFS_BOOT    printf (" tsfs");#endif  /* INCLUDE_TSFS_BOOT */    printf ("\n");    }/********************************************************************************* bootLoad - load a module into memory** RETURNS: OK or ERROR*/LOCAL STATUS bootLoad     (    char *   bootString,    FUNCPTR *pEntry    )    {    BOOT_PARAMS		params;#ifdef  INCLUDE_SCSI_BOOT#ifdef  INCLUDE_SCSI2     SCSI_OPTIONS	options;     UINT		which;     int		devBusId;#endif  /* INCLUDE_SCSI2 */#endif  /* INCLUDE_SCSI_BOOT */#ifdef  INCLUDE_NETWORK    char		nad [20];	/* host's network internet addr */    int			netmask = 0;	/* temporary storage */    int 		result; 	/* classification of address string */    unsigned long 	leaseLen; 	/* lease length field (optional) */#ifdef INCLUDE_DHCPC    DHCP_LEASE_DATA dhcpLease;#endif  /* INCLUDE_DHCPC */    char		buf [30];	/* string of netmask and timestamps */    char 		netDev [BOOT_DEV_LEN + 1];    char 		bootDev [BOOT_DEV_LEN];    BOOL		backplaneBoot;    char *		pBootAddr;    BOOL 		attached = FALSE; /* driver is attached */#ifdef INCLUDE_END    char		muxDevName[8];#endif /* INCLUDE_END */#endif  /* INCLUDE_NETWORK */    /* copy bootString to low mem address, if specified */    if ((bootString != NULL) && (*bootString != EOS))	strcpy (BOOT_LINE_ADRS, bootString);    /* interpret boot command */    if (usrBootLineCrack (BOOT_LINE_ADRS, &params) != OK)	return (ERROR);    /* Display boot parameters */    bootParamsShow (BOOT_LINE_ADRS);    /* set our processor number: may establish vme access, etc. */    sysFlags = params.flags;    sysProcNumSet (params.procNum);#ifdef	INCLUDE_SCSI_BOOT    /*     * initialize either the SCSI1 or SCSI2 interface; initialize SCSI2 when     * the SCSI2 interface is available.     */#ifndef INCLUDE_SCSI2    scsi1IfInit ();#else    scsi2IfInit ();#endif    if (strncmp (params.bootDev, "scsi", 4) == 0)	{	int bootDevId = NONE;	int bootDevLUN = NONE;#ifdef INCLUDE_SCSI2        /* Set all devices to asynchronous data transfer */        which = SCSI_SET_OPT_XFER_PARAMS;        options.maxOffset = 0;

⌨️ 快捷键说明

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