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

📄 cmdtbl.c

📁 umon bootloader source code, support mips cpu.
💻 C
字号:
/* cmdtbl.c:
 *	This is the command table used by the monitor.
 *
 *	General notice:
 *	This code is part of a boot-monitor package developed as a generic base
 *	platform for embedded system designs.  As such, it is likely to be
 *	distributed to various projects beyond the control of the original
 *	author.  Please notify the author of any enhancements made or bugs found
 *	so that all may benefit from the changes.  In addition, notification back
 *	to the author will allow the new user to pick up changes that may have
 *	been made by other users after this version of the code was distributed.
 *
 *	Note1: the majority of this code was edited with 4-space tabs.
 *	Note2: as more and more contributions are accepted, the term "author"
 *		   is becoming a mis-representation of credit.
 *
 *	Original author:	Ed Sutter
 *	Email:				esutter@lucent.com
 *	Phone:				908-582-2351
 */
#include "config.h"
#include "tfs.h"
#include "tfsprivate.h"
#include "cli.h"
#include "genlib.h"
#include "xcmddcl.h"

#define	ULVLCMD  "ulvl"

#if INCLUDE_CAST
extern	int	Cast(int, char **);
extern  char *CastHelp[];
#endif
#if INCLUDE_BBC
extern	int	BbcCmd(int, char **);
extern  char *BbcHelp[];
#endif
#if INCLUDE_BOARDINFO
extern	int	BinfoCmd(int, char **);
extern  char *BinfoHelp[];
#endif
#if INCLUDE_UNZIP
extern	int	Unzip(int, char **);
extern  char *UnzipHelp[];
#endif
#if INCLUDE_MEMTRACE
extern	int	MtraceCmd(int, char **);
extern  char *MtraceHelp[];
#endif
#if INCLUDE_IGMP
extern	int	Igmp(int, char **);
extern  char *IgmpHelp[];
#endif
#if INCLUDE_GDB
extern	int	Gdb(int, char **);
extern  char *GdbHelp[];
#endif

#if INCLUDE_MALLOC
extern	int	Heap(int, char **), Reg(int, char **);
extern  char *HeapHelp[], *RegHelp[];
#endif

extern	int	Reg(int, char **);
extern  char *RegHelp[];

#if INCLUDE_MEMCMDS
extern	int	Dm(int, char **), Pm(int, char **), Cm(int, char **);
extern	int Sm(int, char **), Fm(int, char **), Mt(int, char **);
extern  char *DmHelp[], *PmHelp[], *CmHelp[];
extern	char *SmHelp[], *FmHelp[], *MtHelp[];
#endif
#if INCLUDE_PROFILER
extern	int	Prof(int, char **);
extern	char *ProfHelp[];
#endif
#if INCLUDE_STRACE
extern	int	Strace(int, char **);
extern	char *StraceHelp[];
#endif
#if INCLUDE_PIO
extern	int	Pio(int, char **);
extern	char *PioHelp[];
#endif
#if INCLUDE_LINEEDIT
extern	int	History(int, char **);
extern	char *HistoryHelp[];
#endif
#if INCLUDE_EDIT
extern	int	Edit(int, char **);
extern	char *EditHelp[];
#endif
#if INCLUDE_DISASSEMBLER
extern	int	Dis(int, char **);
extern	char *DisHelp[];
#endif
#if INCLUDE_SYSLOG
extern	int	SyslogCmd(int, char **);
extern  char *SyslogHelp[];
#endif

#if INCLUDE_TFSSCRIPT
extern	int	If(int, char **), Exit(int, char **), Goto(int, char **);
extern	int Gosub(int, char **), Return(int, char **), Item(int, char **);
extern	char *IfHelp[], *GotoHelp[], *GosubHelp[], *ItemHelp[];
extern	char *ReturnHelp[], *ExitHelp[];
extern	int	Read(int, char **), Echo(int, char **), Sleep(int, char **);
extern	char *ReadHelp[], *EchoHelp[], *SleepHelp[];
#endif

#if INCLUDE_TFSCLI
extern	int	Tfs(int, char **);
extern	char *TfsHelp[];
#endif

#if INCLUDE_SHELLVARS
extern	int	Set(int, char **);
extern	char *SetHelp[];
#endif

#if INCLUDE_XMODEM
extern	int	Xmodem(int, char **);
extern	char *XmodemHelp[];
#endif

#if INCLUDE_TFTP
extern	int	Tftp(int, char **);
extern	char *TftpHelp[];
#endif

#if INCLUDE_DHCPBOOT
extern	int	Dhcp(int, char **);
extern	char *DhcpHelp[];
#endif

#if INCLUDE_ETHERNET
extern	int	Arp(int, char **), Dhcp(int, char **), Ether(int, char **);
extern	int Tftp(int, char **), Icmp(int, char **);
extern	char *ArpHelp[], *EtherHelp[], *IcmpHelp[];
#endif

#if INCLUDE_FLASH
//extern	int	FlashCmd(int, char **);
//extern	char *FlashHelp[];
#endif

#if INCLUDE_IDE
extern	int	Ide(int, char **);
extern  char *IdeHelp[];
#endif

#if INCLUDE_SIF_FLASH
extern	int Sflash(int,char **);
extern 	char *SflashHelp[];
#endif

#if INCLUDE_NOR_FLASH_S29GL128M90 || INCLUDE_NOR_FLASH_S29GL064A90
extern	int Nflash(int,char **);
extern 	char *NflashHelp[];
#endif

#if INCLUDE_DOWN_UP
//extern	int Update(int,char **);
//extern 	char *UpdateHelp[];

extern	int UpdateQV(int,char **);
extern 	char *UpdateQVHelp[];

extern	int UpQV(int,char **);
extern 	char *UpQVHelp[];

extern	int StartLinux(int,char **);
extern 	char *StartLinuxHelp[];

extern  	int Setip(int,char **);
extern	char *SetipHelp[];

#endif

#if INCLUDE_SETCMD
//shunzi add it to config cmdline
extern		int Setcmd(int, char **);
extern		char *SetcmdHelp[]; 
#endif


extern	int	Help(int, char **), Reset(int, char **);
extern	int Ulvl(int, char **), Version(int, char **);
extern	int Call(int, char **);

extern	char *HelpHelp[], *ResetHelp[], *UlvlHelp[];
extern	char *VersionHelp[], *CallHelp[];

struct monCommand cmdlist[] = {
#if INCLUDE_ETHERNET
	{ "arp",		Arp,		ArpHelp,		CMDFLAG_NOMONRC },
#endif
#if INCLUDE_BBC
	{ "bbc",		BbcCmd,		BbcHelp,		0 },
#endif
#if INCLUDE_BOARDINFO
	{ "brdinfo",	BinfoCmd,	BinfoHelp,		0 },
#endif
	{ "call",		Call,		CallHelp,		CMDFLAG_NOMONRC },
#if INCLUDE_CAST
	{ "cast",		Cast,		CastHelp,		0 },
#endif
#if INCLUDE_MEMCMDS
	{ "cm",			Cm,			CmHelp,			0 },
#endif
#if INCLUDE_DHCPBOOT
	{ "dhcp",		Dhcp,		DhcpHelp,		CMDFLAG_NOMONRC },
#endif
#if INCLUDE_DISASSEMBLER
	{ "dis",		Dis,		DisHelp,		0 },
#endif
#if INCLUDE_MEMCMDS
	{ "dm",			Dm,			DmHelp,			0 },
#endif
#if INCLUDE_TFSSCRIPT
	{ "echo",		Echo,		EchoHelp,		0 },
#endif
#if INCLUDE_EDIT
	{ "edit",		Edit,		EditHelp,		0 },
#endif
#if INCLUDE_ETHERNET
	{ "ether",		Ether,		EtherHelp,		CMDFLAG_NOMONRC },
#endif
#if INCLUDE_TFSSCRIPT
	{ "exit",		Exit,		ExitHelp,		0 },
#endif
#if INCLUDE_FLASH
//	{ "flash",		FlashCmd,	FlashHelp,		0 },
#endif
#if INCLUDE_MEMCMDS
	{ "fm",			Fm,			FmHelp,			0 },
#endif

#if INCLUDE_GDB
	{ "gdb",		Gdb,		GdbHelp,		CMDFLAG_NOMONRC },
#endif

#if INCLUDE_TFSSCRIPT
	{ "gosub",		Gosub,		GosubHelp,		0 },
	{ "goto",		Goto,		GotoHelp,		0 },
#endif

#if INCLUDE_MALLOC
	{ "heap",		Heap,		HeapHelp,		0 },
#endif

	{ "help",		Help,		HelpHelp,		0 },
	{ "?",			Help,		HelpHelp,		0 },

#if INCLUDE_LINEEDIT
	{ "history",	History,	HistoryHelp,	0 },
#endif

#if INCLUDE_ETHERNET
	{ "icmp",		Icmp,		IcmpHelp,		CMDFLAG_NOMONRC },
#endif

#if INCLUDE_IDE
	{ "ide",		Ide,		IdeHelp,		CMDFLAG_NOMONRC },
#endif

#if INCLUDE_IGMP
	{ "igmp",		Igmp,		IgmpHelp,		CMDFLAG_NOMONRC },
#endif

#if INCLUDE_TFSSCRIPT
	{ "if",			If,			IfHelp,			0 },
#endif

#if INCLUDE_TFSSCRIPT
	{ "item",		Item,		ItemHelp,		0 },
#endif

#if INCLUDE_MEMCMDS
	{ "mt",			Mt,			MtHelp,			0 },
#endif

#if INCLUDE_MEMTRACE
	{ "mtrace",		MtraceCmd,	MtraceHelp,		0 },
#endif

#if INCLUDE_MEMCMDS
	{ "pm",			Pm,			PmHelp,			0 },
#endif

#if INCLUDE_PROFILER
	{ "prof",		Prof,		ProfHelp,		0 },
#endif

#if INCLUDE_TFSSCRIPT
	{ "read",		Read,		ReadHelp,		0 },
#endif

#if INCLUDE_STRACE
	{ "reg",		Reg,		RegHelp,		0 },
#endif

	{ "reset",		Reset,		ResetHelp,		0 },

#if INCLUDE_TFSSCRIPT
	{ "return",		Return,		ReturnHelp,		0 },
#endif

#if INCLUDE_SHELLVARS
	{ "set",		Set,		SetHelp,		0 },
#endif

#if INCLUDE_TFSSCRIPT
	{ "sleep",		Sleep,		SleepHelp,		0 },
#endif

#if INCLUDE_MEMCMDS
	{ "sm",			Sm,			SmHelp,			0 },
#endif

#if INCLUDE_STRACE
	{ "strace",		Strace,		StraceHelp,		0 },
#endif

#if INCLUDE_SYSLOG
	{ "syslog",		SyslogCmd,	SyslogHelp,		CMDFLAG_NOMONRC },
#endif

	{ ULVLCMD,	 	Ulvl,		UlvlHelp,		0 },

#if INCLUDE_TFTP
	{ "tftp",		Tftp,		TftpHelp,		CMDFLAG_NOMONRC },
#endif

#if INCLUDE_TFSCLI
	{ "tfs",		Tfs,		TfsHelp,		0 },
#endif

#if INCLUDE_UNZIP
	{ "unzip",		Unzip,		UnzipHelp,		0 },
#endif

#if INCLUDE_XMODEM
	{ "xmodem",		Xmodem,		XmodemHelp,		0 },
#endif

	{ "version",	Version,	VersionHelp,	0 },
#if INCLUDE_SIF_FLASH
	{ "sflash",		Sflash,		SflashHelp,		0},
#endif
#if INCLUDE_DOWN_UP
	{ "setip",			Setip,		SetipHelp,		0},
#endif

#if INCLUDE_SETCMD
	{ "setcmd",			Setcmd,		SetcmdHelp,		0},
#endif


#if INCLUDE_NOR_FLASH_S29GL128M90 || INCLUDE_NOR_FLASH_S29GL064A90
	{ "nflash",		Nflash,		NflashHelp,		0},
#endif

#if INCLUDE_UPDATE
//	{ "update",		Update,		UpdateHelp,		0},
	{ "updateqv",	UpdateQV,	UpdateQVHelp,	0},
	{ "upqv",	UpQV,	UpQVHelp,	0},
	{ "startlinux",		StartLinux,		StartLinuxHelp,		0},
#endif
	//{ "bootlinux"		Bootlinux}


#include "xcmdtbl.h"				/* For non-generic commands that are */
									/* specific to a particular target.  */
	{ 0,0,0,0 },
};

/* cmdUlvl[]:
 *	This table stores one char per command that contains that command's
 *	user level.  The default user level of all commands is 0, but can
 *	be re-defined by the ulvl -c command.
 */
char cmdUlvl[(sizeof(cmdlist)/sizeof(struct monCommand))];

/* setCmdUlvl():
 *	The incoming string is a command name followed by a comma and a user
 *	level (ranging from 0 thru 4).
 *	Return 0 if pass, 1 if new level was user-level rejected, -1 if error.
 */
int
setCmdUlvl(char *cmdlvl, int verbose)
{
	extern char	*appcmdUlvl;
	extern struct monCommand *appCmdlist;
	struct monCommand *cptr;
	int	newlevel, idx, pass, doall;
	char *comma, *lvlptr, buffer[32], *cmdandlevel;

	/* Make a copy of the incoming string so that we can
	 * modify it...
	 */
	if (strlen(cmdlvl) > (sizeof(buffer)-1))
		goto showerr;

	strcpy(buffer,cmdlvl);
	cmdandlevel = buffer;

	/* First verify that the comma is in the string... */
	comma = strchr(cmdandlevel,',');
	if (!comma)
		goto showerr;

	/* Retrieve and verify the new level to be assigned... */
	newlevel = atoi(comma+1);
	if ((newlevel < MINUSRLEVEL) || (newlevel > MAXUSRLEVEL))
		goto showerr;

	*comma = 0;

	/* Don't allow adjustment of the ulvl command itself.  It must be
	 * able to run as user level 0 all the time...
	 */
	if (!strcmp(cmdandlevel,ULVLCMD)) {
		printf("Can't adjust '%s' user level.\n",ULVLCMD);
		return(-1);
	}

	if (appCmdlist) {
		pass = 0;
		cptr = appCmdlist;
		lvlptr = appcmdUlvl;
	}
	else {
		pass = 1;
		cptr = cmdlist;
		lvlptr = cmdUlvl;
	}

	/* If the command string is "ALL" then we set all commands
	 * to the requested level.
	 */
	if (!strcmp(cmdandlevel,"ALL"))
		doall = 1;
	else
		doall = 0;

	while(pass < 2) {
		if ((cptr == cmdlist) && (cmdandlevel[0] == '_'))
			cmdandlevel++;

		/* Find the command in the table that is to be adjusted... */
		for(idx=0;cptr->name;cptr++,idx++) {
			if (doall || (!strcmp(cmdandlevel,cptr->name))) {
				/* Even with doall set, we don't want to touch
				 * the ULVLCMD level...
				 */
				if (doall && !strcmp(cptr->name,ULVLCMD))
					continue;

				/* If the command's user level is to be lowered, then the
				 * current monitor userlevel must be at least as high as the
				 * command's current user level...
				 */
				if ((newlevel < lvlptr[idx]) && (getUsrLvl() < lvlptr[idx])) {
					if (verbose)
						printf("User-level access denied: %s\n",cmdandlevel);
					return(1);
				}
				lvlptr[idx] = newlevel;
				if (!doall)
					return(0);
			}
		}
		cptr = cmdlist;
		lvlptr = cmdUlvl;
		pass++;
	}

	if (doall)
		return(0);

showerr:
	if (verbose)
		printf("Input error: %s\n",cmdlvl);
	return(-1);
}

⌨️ 快捷键说明

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