setup.c

来自「Intel PXA270的bootloader程序,在linux环境下运行的.」· C语言 代码 · 共 111 行

C
111
字号
#include <stdio.h>#include <string.h>#include <command.h>#include <network.h>#include <board.h>#include <setup.h>#define assert(fmt, args...)	//printf(fmt, ##args)#define STATUS_ID			0x5166a1c0extern unsigned long loader_size;extern unsigned long setup_size;# define setup_storeat		((void *)((ulong)setup & 0x000FFFFF))static struct setup_t __bsetup _setup = {	.sid        = 0x58fd5dfd,	.size       = (uint32)&loader_size,	.myipaddr   = 0x0100a8c0,	.destipaddr = 0x3200a8c0,	.myhaddr    = {0x00,0x05,0xb4,0x6d,0x15,0xfd},	.autoboot   = AUTOBOOT,	.kernelname     = KERNEL,	.fsname   = FILESYSTEM,	.delay     = DELAYTIME,};struct setup_t *setup = &_setup;static bool do_config(int argc, char **argv);static void config_usage(void);static void view_setup(void);extern void init_map(void);struct command_t cmd_config = {	.name  = "set",	.run   = do_config,	.usage = config_usage};bool config_init(void){	init_map();	return true;}static void config_usage(void){	usage_format("set", "");	usage_format("set name value", "");	return;}static bool do_config(int argc, char **argv){	if (argc == 1){		view_setup();		return true;	} else if (argc == 3){		if (!strcmp(argv[1], "myipaddr")){			setup->myipaddr = inet_addr(argv[2]);		} else if (!strcmp(argv[1], "destipaddr")){			setup->destipaddr = inet_addr(argv[2]);		} else if (!strcmp(argv[1], "myhaddr")){			void *mac = mac_aton(argv[2]);			if (!mac) goto invalid;			memcpy(setup->myhaddr, mac, 6);			net_set_haddr(setup->myhaddr);		} else if (!strcmp(argv[1], "autoboot")){			strcpy(setup->autoboot, argv[2]);		} else if (!strcmp(argv[1], "kernelname")){			strcpy(setup->kernelname, argv[2]);		} else if (!strcmp(argv[1], "fsname")){			strcpy(setup->fsname, argv[2]);		} else if (!strcmp(argv[1], "delay")){			setup->delay = delay_aton(argv[2]);		} else goto invalid;	} else goto invalid;	save_setup();	return true;invalid :	config_usage();	return false;}static void view_setup(void){	printf(" %-10s : %s\n", "myipaddr", inet_ntoa(setup->myipaddr));	printf(" %-10s : %s\n", "destipaddr", inet_ntoa(setup->destipaddr));	printf(" %-10s : %s\n", "myhaddr", mac_ntoa(setup->myhaddr));	printf(" %-10s : %s\n", "autoboot", setup->autoboot);	printf(" %-10s : %s\n", "kernelname", setup->kernelname);	printf(" %-10s : %s\n", "fsname", setup->fsname);	printf(" %-10s : %d\n", "delay", setup->delay);	return;}extern int flash_write(void *dest, const void *src, uint cnt);extern void save_setup(void){	struct setup_t *s;	s = setup_storeat;	if (s->sid == setup->sid){		flash_write(s, setup, (int)&setup_size);	} else {		assert(" failed : invalid setup id. reboot and try again.\n");		return;	}	return;}

⌨️ 快捷键说明

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