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

📄 shell.c

📁 LPC2292 bios测试程序 说明:YL_LPC229X_BIOS_Data的目录说明
💻 C
📖 第 1 页 / 共 3 页
字号:
	static unsigned int src_addr;
	unsigned int src;
	unsigned int i, j;
	//unsigned int tmp_data[64];

	if ( argc > 1 )
	{
		unsigned int tmp = strtoul( ( char * ) argv[1] );
		src_addr = ( tmp == -1 ) ? src_addr : tmp;
		src_addr &= ~0xf;
	}

	printf( "Press ESC key to exit, other key to continue...\n" );

	do
	{
		src = src_addr;
		src_addr += 0x100;

		//		CacheDisable();
		CacheFlush();		//防止tmp_data被cache
		//		CacheEnable();

		//for(i=0; i<64; i++)
		//	tmp_data[i] = ((unsigned int *)src)[i];

		for ( i = 0; i < 16; i++ )
		{
			unsigned char ch;

			printf( "0x%-8x:" , src + ( i << 4 ) );
			for ( j = 0; j < 16; j++ )
			{
				//ch = ((unsigned char *)tmp_data)[(i<<4)+j];
				ch = ( ( unsigned char * ) src )[( i << 4 ) + j];
				printf( "%3x" , ch );
			}
			putch( ' ' );
			putch( ' ' );
			for ( j = 0; j < 16; j++ )
			{
				//ch = ((unsigned char *)tmp_data)[(i<<4)+j];
				ch = ( ( unsigned char * ) src )[( i << 4 ) + j];
				putch( ( ch >= 0x20 && ch < 0x80 ) ? ch : '.' );
			}
			putch( '\n' );
		}
	}
	while ( getch() != ESC_KEY );
	//关闭cache后读tmp_data并打印才正常

	return 0;
}

int MemoryShow( int argc , char* argv[] )
{
	unsigned long addr;
	int mode;

	if ( argc != 3 )
		goto err_exit;

	if ( !strncmp( argv[1] , "-c" , 3 ) )
		mode = 0;
	else if ( !strncmp( argv[1] , "-s" , 3 ) )
		mode = 1;
	else if ( !strncmp( argv[1] , "-l" , 3 ) )
		mode = 2;
	else
		goto err_exit;

	addr = strtoul( ( char * ) argv[2] );
	if ( addr == -1 )
		goto err_exit;

	if ( ( mode == 1 ) && ( addr & 1 ) )
		goto err_exit;

	if ( ( mode == 2 ) && ( addr & 3 ) )
		goto err_exit;

	//	CacheDisable();
	CacheFlush();
	//	CacheEnable();
	printf( "mem @0x%-8x = 0x%x\n" , addr ,
		( mode == 2 ) ?
		*( U32 * ) addr :
		( mode == 1 ) ?
		*( U16 * ) addr :
		*( U8 * ) addr );	
	return 0;

	err_exit : puts( "Usage : memd -c/s/l addr\n-c/s/l   8/16/32 bits\n" );
	return -1;
}

int MemorySet( int argc , char* argv[] )
{
	unsigned long addr;
	int mode;	
	U32 data;

	if ( argc != 4 )
		goto err_exit;

	if ( !strncmp( argv[1] , "-c" , 3 ) )
		mode = 0;
	else if ( !strncmp( argv[1] , "-s" , 3 ) )
		mode = 1;
	else if ( !strncmp( argv[1] , "-l" , 3 ) )
		mode = 2;
	else
		goto err_exit;

	addr = strtoul( ( char * ) argv[2] );
	if ( addr == -1 )
		goto err_exit;

	data = strtoul( ( char * ) argv[3] );
	if ( data == -1 )
		goto err_exit;

	if ( !mode )
	{
		/*__asm {
				strb	data, [addr]
			}*/
		outportb( data , addr );
	}
	else if ( mode == 1 )
	{
		if ( addr & 1 )
			goto err_exit;
		/*__asm {
				strh	data, [addr]
			}*/
		outportw( data , addr );
	}
	else if ( mode == 2 )
	{
		if ( addr & 3 )
			goto err_exit;
		/*__asm {
				str	data, [addr]
			}*/
		outportl( data , addr );
	}
	//	printf("set mem @0x%-8x = 0x%x\n", addr, (mode==2)?*(U32 *)addr:(mode==1)?*(U16 *)addr:*(U8 *)addr);

	//puts("set ");
	//MemoryShow(3, argv);

	return 0;

	err_exit : puts( "Usage : memd -c/s/l addr data\n-c/s/l   8/16/32 bits\n" );
	return -1;
}

#ifdef	SAVE_ENV_SUPPORT

int SaveEnv( int argc , char* argv[] )
{
#ifdef	SAVE_ENV_IN_NAND
	NFSaveParams( ( char * ) &Env );
#else
	NorFlashProg( BIOS_ENV_ADDR , ( U32 ) & Env , sizeof( Env ) );
#endif
	return 0;
}

int LoadEnv()
{
	int i;

#ifdef	SAVE_ENV_IN_NAND
	NFSearchParams( ( char * ) &Env );
#else
	NorFlashRead( ( char * ) &Env , ( char * ) ( BIOS_ENV_ADDR ) ,
		sizeof( Env ) );
#endif

	if ( strncmp( ( const char * ) Env.flag , "params" , 7 ) )
		return -1;

	for ( i = 0; BaudSet[i]; i++ )
		if ( Env.baud == BaudSet[i] )
			break;
	if ( !BaudSet[i] )
		Env.baud = DEFAULT_SERIAL_BAUD;	
	SerialSwitch( Env.current_uart );
	SerialChgBaud( 0 , Env.baud );

	if ( Env.prog_s_addr & 0x3 )
		Env.prog_s_addr = EXT_ROM_BASE + SIZE_64K;
	if ( Env.prog_r_addr & 0x3 )
		Env.prog_r_addr = DFT_DOWNLOAD_ADDR;

	Env.boot_params[255] = 0;

	return 0;
}

#endif

void DftEnvInit( void )
{
	memset( &Env , 0 , sizeof( Env ) );
	memcpy( Env.flag , "params" , 8 );
	Env.nic_cfg.ip = DEFAULT_IP_ADDR;
	Env.nic_cfg.mask = DEFAULT_IP_MASK;
	Env.nic_cfg.gate = DEFAULT_IP_ADDR;
	Env.baud = DEFAULT_SERIAL_BAUD;
	Env.current_uart = DEFAULT_SERIAL_PORT;
	Env.prog_s_addr = EXT_ROM_BASE ;
	Env.prog_r_addr = DFT_DOWNLOAD_ADDR;
	Env.NandPartition[0].size = 0;
	Env.saved_in = 0;	//use nor flash, nointrd

	RTC_Def_Time_Set() ;	

	SerialSwitch( Env.current_uart );
	SerialChgBaud( 0 , Env.baud );
}


#ifdef	SERIAL_PORTS_SWITCH
int ChgUartPort( int argc , char* argv[] )
{
	Env.current_uart = !Env.current_uart;
	printf( "Set uart port%d...\n" , Env.current_uart ? 1 : 0 );
	SerialSwitch( Env.current_uart );
	return 0;
}
#endif

#ifdef	NAND_FLASH_SUPPORT

int NandProg( int argc , char* argv[] )
{
	unsigned int size = ~0;
	unsigned int data_begin = ~0;

	data_begin = download_addr;
	size = download_len;

	if ( argc > 1 )
		data_begin = strtoul( ( char * ) argv[1] );
	if ( argc > 2 )
		size = strtoul( ( char * ) argv[2] );	
	if ( ( size == -1 ) || ( data_begin == -1 ) )
	{
		printf( "Arguments error\n" );
		goto err_exit;
	}

	if ( size == 0 )
	{
		printf( "Write 0 Bytes!\n" );
		return -1;
	}
	else
		return WrFileToNF( data_begin , size );

	err_exit:
		printf( "Usage:	nfprog addr size\naddr = data pointer to ram\nsize = program size(Bytes)\n" );
	return -1;
}

int NandLoad( int argc , char* argv[] )
{
	U32 load_part = -1;
	download_addr = DFT_DOWNLOAD_ADDR;

	if ( argc > 1 )
	{
		download_addr = strtoul( ( char * ) argv[1] );
		if ( download_addr == -1 )
			download_addr = DFT_DOWNLOAD_ADDR;
		if ( argc > 2 )
			load_part = strtoul( argv[2] );
	}

	printf( "Load data form nand flash to 0x%x\n" , download_addr );
	return RdFileFrNF( download_addr , load_part );
}

int NandErase( int argc , char* argv[] )
{
	return EraseNandPart();
}

int NandPart( int argc , char* argv[] )
{
	unsigned long i, addr[8];

	if ( !NandFlashSize )
		return -1;
	if ( ( argc <= 1 ) || ( argc > 9 ) )
		goto err_exit;

	addr[0] = 0;
	for ( i = 1; i < argc; i++ )
	{
		addr[i] = strtoul( ( char * ) argv[i] );		
		if ( ( addr[i] == -1 ) ||
			( addr[i] <= addr[i - 1] ) ||
			( addr[i] & 0x3fff ) ||
			( addr[i] > NandFlashSize ) )
			goto err_exit;
	}
	printf( "Set %d partition(s) :\n" , argc - 1 );
	for ( i = 0; i < argc - 1; i++ )
	{
		pNandPart[i].offset = addr[i];
		pNandPart[i].size = addr[i + 1] - addr[i];
		pNandPart[i].name = " ";
		pNandPart[i + 1].size = 0;
		printf( "part%d : start address 0x%-8x, size 0x%-8x\n" , i ,
			pNandPart[i].offset , pNandPart[i].size );
	}

	return 0;

	err_exit:
		puts( "Usage : nfpart a1 a2 ... an\na1 = part1 end address, an = partn end address, n<=8, address must be 16KB align and don't excess the size of nand flash \n" );
	return -1;
}

#endif

int SetProgAddr( int argc , char* argv[] )
{
	int addr, obj;

	if ( argc < 2 )
		goto err_exit;		

	if ( !strncmp( argv[1] , "-s" , 3 ) )
		obj = 0;
	else if ( !strncmp( argv[1] , "-r" , 3 ) )
		obj = 1;
	else if ( !strncmp( argv[1] , "-i" , 3 ) )
		obj = 2;
	else if ( !strncmp( argv[1] , "-ni" , 4 ) )
	{
		Env.saved_in &= ~2;
		return 0;
	}
	else if ( !strncmp( argv[1] , "-nor" , 5 ) )
	{
		Env.saved_in &= ~1;
		return 0;
	}
	else if ( !strncmp( argv[1] , "-nand" , 6 ) )
	{
		Env.saved_in |= 1;
		return 0;
	}
	else
		goto err_exit;

	if ( argc < 3 )
		goto err_exit;
	addr = strtoul( ( char * ) argv[2] );
	if ( addr == -1 )
		goto err_exit;

	printf( "Set Program %s address = 0x%x\n" ,
		( obj == 0 ) ? "save" : ( obj == 1 ) ? "run" : "initrd" , addr );
	if ( obj == 0 )
		Env.prog_s_addr = addr;
	else if ( obj == 1 )
		Env.prog_r_addr = addr;
	else if ( obj == 2 )
	{
		Env.initrd_addr = addr;
		Env.saved_in |= 2;
	}

	return 0;
	err_exit:
		puts( "Usage : setpa -s[-r][-i][-ni][-nor][-nand] [address]\n-s    save address\n-r    run address\n-i    initrd save address\n-ni   disable initrd\n-nor  use nor flash to save\n-nand use nand flash to save\n" );
	return -1;
}

int SetBootParams( int argc , char* argv[] )
{
	char params[sizeof( Env.boot_params )];
	int params_bytes;

	puts( "Please enter params for boot, press Enter to complete, Esc to exit\n" );
	params_bytes = GetParameter( params , sizeof( Env.boot_params ) - 1 );
	putch( '\n' );
	if ( params_bytes != -1 )
	{
		Env.boot_params[params_bytes] = 0;
		while ( params_bytes )
		{
			params_bytes--;
			Env.boot_params[params_bytes] = params[params_bytes];
		}
	}
	return 0;
}

#define LINUX_PAGE_SHIFT	12
#define LINUX_PAGE_SIZE		(1<<LINUX_PAGE_SHIFT)
#define COMMAND_LINE_SIZE 	1024

struct param_struct
{
	union
	{
		struct
		{
			unsigned long page_size;			/*  0 */
			unsigned long nr_pages;				/*  4 */
			unsigned long ramdisk_size;			/*  8 */
			unsigned long flags;				/* 12 */
#define FLAG_READONLY	1
#define FLAG_RDLOAD		4
#define FLAG_RDPROMPT	8
			unsigned long rootdev;				/* 16 */
			unsigned long video_num_cols;		/* 20 */
			unsigned long video_num_rows;		/* 24 */
			unsigned long video_x;				/* 28 */
			unsigned long video_y;				/* 32 */
			unsigned long memc_control_reg;		/* 36 */
			unsigned char sounddefault;			/* 40 */
			unsigned char adfsdrives;			/* 41 */
			unsigned char bytes_per_char_h;		/* 42 */
			unsigned char bytes_per_char_v;		/* 43 */
			unsigned long pages_in_bank[4];		/* 44 */
			unsigned long pages_in_vram;		/* 60 */
			unsigned long initrd_start;			/* 64 */
			unsigned long initrd_size;			/* 68 */
			unsigned long rd_start;				/* 72 */
			unsigned long system_rev;			/* 76 */
			unsigned long system_serial_low;	/* 80 */
			unsigned long system_serial_high;	/* 84 */
			unsigned long mem_fclk_21285;   	/* 88 */
		} s;
		char unused[256];
	} u1;
	union
	{
		char paths[8][128];
		struct
		{
			unsigned long magic;
			char n[1024 - sizeof( unsigned long )];
		} s;
	} u2;
	char commandline[COMMAND_LINE_SIZE];
};

void SetParams( void )
{
	U32 i;
	struct param_struct* params = ( struct param_struct* ) BOOT_PARAMS_ADDR;

	for ( i = 0; i < ( sizeof( struct param_struct ) >> 2 ); i++ )
		( ( U32 * ) params )[i] = 0;
	params->u1.s.page_size = LINUX_PAGE_SIZE;
	params->u1.s.nr_pages = ( SRAM_SIZE >> LINUX_PAGE_SHIFT );

	//	if(strlen((char *)boot_params)>=sizeof(boot_params))
	//		boot_params[sizeof(boot_params)-1] = 0;
	memcpy( params->commandline , ( char * ) Env.boot_params ,
		sizeof( Env.boot_params ) );

	printf( "Set boot params = %s\n" , params->commandline );
}

#define	MAX_DOWNLOAD_SIZE	0x200000

#ifdef	XMODEM_DOWNLOAD_SUPPORT

int XmodemReceive( int argc , char* argv[] )
{
	if ( argc < 2 )
		download_addr = DFT_DOWNLOAD_ADDR;
	else
	{
		unsigned long tmp;
		tmp = strtoul( ( char * ) argv[1] );
		download_addr = ( tmp == -1 ) ? download_addr : tmp;
	}

	printf( "Now download file by xmodem to 0x%x...\n" , download_addr );

	download_len = XModemReceive( ( char * ) download_addr ,
					MAX_DOWNLOAD_SIZE );
	if ( download_len != -1 )
		printf( "\nReceived %x bytes success\n" , download_len );

	return download_len;
}

int XmodemReceiveRun( int argc , char* argv[] )
{
	if ( XmodemReceive( argc , argv ) != -1 )
	{
		RunProgram( 0 , NULL );
	}
	return 0;
}

#endif

int SetBootKey( int argc , char* argv[] )
{
	int keyno, keystat, boot = 0;

	if ( argc < 3 )
		goto err_exit;

	keyno = strtoul( argv[1] );
	keystat = strtoul( argv[2] );

	if ( ( keyno > 4 ) || ( keyno < 1 ) || ( keystat > 1 ) || ( keystat < 0 ) )
		goto err_exit;
	keyno--;

	if ( argc > 3 )
	{
		if ( !strncmp( "-b" , argv[3] , 6 ) )
			boot = 1;
		else
			goto err_exit;
	}
	Env.boot_key = ( 'k' << 24 ) |
		( 'b' << 16 ) |
		( keyno << 12 ) |
		( keystat << 8 ) |
		( boot );

	return 0;	

	err_exit:
		printf( "Usage : keyrun keyno keystat [-b]\nkeyno   key number 1~4\nkeystat 1->high, 0->low to autoboot\n-b   execute boot\n" );
	return -1;
}

int SetMachine( int argc , char* argv[] )
{
	U32 machine, len;

	if ( argc < 2 )
		goto err_exit;

	len = strlen( argv[1] );
	machine = strtodec( argv[1] , len );
	if ( ( len > 4 ) || ( machine == -1 ) )
		goto err_exit;

	Env.machine = machine;
	return 0;

	err_exit:
	printf( "Usage : machine no\nno   machine number(0~9999)\n" );
	return -1;
}

#ifdef	USB_DOWNLOAD_SUPPORT
int UsbDownload( int argc , char* argv[] )
{
	download_addr = DFT_DOWNLOAD_ADDR;
	if ( argc > 1 )
	{
		download_addr = strtoul( argv[1] );
		if ( download_addr == -1 )
			download_addr = DFT_DOWNLOAD_ADDR;
	}

	printf( "USB download file to 0x%x\n" , download_addr );
	download_len = BoardUsbDownload( download_addr );
	if ( download_len != -1 )
		printf( "0x%x bytes received\n" , download_len );
	return download_len;
}

int UsbDownloadRun( int argc , char* argv[] )
{
	if ( UsbDownload( argc , argv ) != -1 )
	{
		RunProgram( 0 , NULL );
	}
	return 0;
}
#endif

/******************************************************************************
【功能说明】默认系统设置,设置系统主频、IP地址、波特率、启动参数等
******************************************************************************/
int Default_Setting( int argc , char* argv[] )
{
	return 0 ;
}
//*****************************************************************************

⌨️ 快捷键说明

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