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

📄 main.c

📁 UBOOT源码,希望能给大家一点帮助,费了好大心思弄来的.
💻 C
📖 第 1 页 / 共 2 页
字号:
	return 0;}static char xdownloadhelp[] = "xdownload {blob|param|kernel|ramdisk}\n""Download <argument> image to RAM using xmodem\n";__commandlist(xdownload, "xdownload", xdownloadhelp);static int Flash(int argc, char *argv[]){	u32 *src;	u32 *dst;	u32 numBytes = 0;	u32 maxSize = 0;	u32 nwords;	block_source_t type = fromFlash;		if(argc < 2)		return -ENOPARAMS;	if(strncmp(argv[1], "blob", 5) == 0) {		src = (u32 *)BLOB_RAM_BASE;		dst = (u32 *)BLOB_FLASH_BASE;		maxSize = BLOB_FLASH_LEN;		numBytes = blob_status.blobSize;		type = blob_status.blobType;#ifdef PARAM_START	} else if(strncmp(argv[1], "param", 6) == 0) {		src = (u32 *)PARAM_RAM_BASE;		dst = (u32 *)PARAM_FLASH_BASE;		maxSize = PARAM_FLASH_LEN;		numBytes = blob_status.paramSize;		type = blob_status.paramType;#endif	} else if(strncmp(argv[1], "kernel", 7) == 0) {		src = (u32 *)KERNEL_RAM_BASE;		dst = (u32 *)KERNEL_FLASH_BASE;		numBytes = blob_status.kernelSize;		maxSize = KERNEL_FLASH_LEN;		type = blob_status.kernelType;	} else if(strncmp(argv[1], "ramdisk", 8) == 0) {		src = (u32 *)RAMDISK_RAM_BASE;		dst = (u32 *)RAMDISK_FLASH_BASE;		numBytes = blob_status.ramdiskSize;		maxSize = RAMDISK_FLASH_LEN;		type = blob_status.ramdiskType;	} else {		printerror(EINVAL, argv[1]);		return 0;	}	if(type == fromFlash) {		printerrprefix();		SerialOutputString(argv[1]);		SerialOutputString(" not downloaded\n");		return -EINVAL;	}	if(numBytes > maxSize) {		printerrprefix();		SerialOutputString("image too large for flash: 0x");		SerialOutputHex(numBytes);		SerialOutputString(" > 0x");		SerialOutputHex(maxSize);		serial_write('\n');		return -ETOOLONG;	}	nwords = (numBytes + sizeof(u32) - 1) / sizeof(u32);	SerialOutputString("Saving ");	SerialOutputString(argv[1]);	SerialOutputString(" to flash\n");	flash_write_region(dst, src, nwords);	return 0;}static char flashhelp[] = "flash {blob|param|kernel|ramdisk}\n""Write <argument> image to flash\n";__commandlist(Flash, "flash", flashhelp);static int SetDownloadSpeed(int argc, char *argv[]){	if(argc < 2)		return -ENOPARAMS;	if(strncmp(argv[1], "1200", 5) == 0) {		blob_status.downloadSpeed = baud_1200;	} else if(strncmp(argv[1], "1k2", 4) == 0) {		blob_status.downloadSpeed = baud_1200;	} else if(strncmp(argv[1], "9600", 5) == 0) {		blob_status.downloadSpeed = baud_9600;	} else if(strncmp(argv[1], "9k6", 4) == 0) {		blob_status.downloadSpeed = baud_9600;	} else if(strncmp(argv[1], "19200", 6) == 0) {		blob_status.downloadSpeed = baud_19200;	} else if(strncmp(argv[1], "19k2", 5) == 0) {		blob_status.downloadSpeed = baud_19200;	} else if(strncmp(argv[1], "38400", 7) == 0) {		blob_status.downloadSpeed = baud_38400;	} else if(strncmp(argv[1], "38k4", 5) == 0) {		blob_status.downloadSpeed = baud_38400;	} else if(strncmp(argv[1], "57600", 6) == 0) {		blob_status.downloadSpeed = baud_57600;	} else if(strncmp(argv[1], "57k6", 5) == 0) {		blob_status.downloadSpeed = baud_57600;	} else if(strncmp(argv[1], "115200", 7) == 0) {		blob_status.downloadSpeed = baud_115200;	} else if(strncmp(argv[1], "115k2", 6) == 0) {		blob_status.downloadSpeed = baud_115200;	} else if(strncmp(argv[1], "230400", 7) == 0) {		blob_status.downloadSpeed = baud_230400;	} else if(strncmp(argv[1], "230k4", 6) == 0) {		blob_status.downloadSpeed = baud_230400;	} else {		return -EINVAL;	}	SerialOutputString("Download speed set to ");	PrintSerialSpeed(blob_status.downloadSpeed);	SerialOutputString(" baud\n");	return 0;}static char speedhelp[] = "speed [baudrate]\n""Set download speed. Valid baudrates are:\n""1200, 9600, 19200, 38400, 57600, 115200, 230400,\n"" 1k2,  9k6,  19k2,  38k4,  57k6,  115k2,  230k4\n";__commandlist(SetDownloadSpeed, "speed", speedhelp);static int PrintStatus(int argc, char *argv[]){	SerialOutputString(version_str);	SerialOutputString("Download speed      : ");	PrintSerialSpeed(blob_status.downloadSpeed);	SerialOutputString(" baud\n");	SerialOutputString("Terminal speed      : ");	PrintSerialSpeed(blob_status.terminalSpeed);	SerialOutputString(" baud\n");	SerialOutputString("blob    (0x");	SerialOutputHex(BLOB_FLASH_BASE);	SerialOutputString("): ");	if(blob_status.blobType == fromFlash) {		SerialOutputString("from flash\n");	} else {		SerialOutputString("downloaded at 0x");		SerialOutputHex(BLOB_RAM_BASE);		SerialOutputString(", ");		SerialOutputDec(blob_status.blobSize);		SerialOutputString(" bytes\n");#ifdef CONFIG_MD5_SUPPORT		SerialOutputString("                      MD5: ");		print_md5_digest(blob_status.blob_md5_digest);		serial_write('\n');#endif	}#ifdef PARAM_START	SerialOutputString("param  (0x");	SerialOutputHex(PARAM_FLASH_BASE);	SerialOutputString("): ");	if(blob_status.paramType == fromFlash) {		SerialOutputString("from flash\n");	} else {		SerialOutputString("downloaded at 0x");		SerialOutputHex(PARAM_RAM_BASE);		SerialOutputString(", ");		SerialOutputDec(blob_status.paramSize);		SerialOutputString(" bytes\n");#ifdef CONFIG_MD5_SUPPORT		SerialOutputString("                      MD5: ");		print_md5_digest(blob_status.param_md5_digest);		serial_write('\n');#endif	}#else	SerialOutputString("param               : Not available\n");#endif	SerialOutputString("kernel  (0x");	SerialOutputHex(KERNEL_FLASH_BASE);	SerialOutputString("): ");	if(blob_status.kernelType == fromFlash) {		SerialOutputString("from flash\n");	} else {		SerialOutputString("downloaded at 0x");		SerialOutputHex(KERNEL_RAM_BASE);		SerialOutputString(", ");		SerialOutputDec(blob_status.kernelSize);		SerialOutputString(" bytes\n");#ifdef CONFIG_MD5_SUPPORT		SerialOutputString("                      MD5: ");		print_md5_digest(blob_status.kernel_md5_digest);		serial_write('\n');#endif	}	SerialOutputString("ramdisk (0x");	SerialOutputHex(RAMDISK_FLASH_BASE);	SerialOutputString("): ");	if(blob_status.ramdiskType == fromFlash) {		SerialOutputString("from flash\n");	} else {		SerialOutputString("downloaded at 0x");		SerialOutputHex(RAMDISK_RAM_BASE);		SerialOutputString(", ");		SerialOutputDec(blob_status.ramdiskSize);		SerialOutputString(" bytes\n");#ifdef CONFIG_MD5_SUPPORT		SerialOutputString("                      MD5: ");		print_md5_digest(blob_status.ramdisk_md5_digest);		serial_write('\n');#endif	}		return 0;}static char statushelp[] = "status\n""Display current status\n";__commandlist(PrintStatus, "status", statushelp);static int do_reload(char *what){	u32 *dst = 0;	u32 *src = 0;	int numWords;	if(strncmp(what, "blob", 5) == 0) {		dst = (u32 *)BLOB_RAM_BASE;		src = (u32 *)BLOB_FLASH_BASE;		numWords = BLOB_FLASH_LEN / 4;		blob_status.blobSize = 0;		blob_status.blobType = fromFlash;		SerialOutputString("Loading blob from flash ");#ifdef PARAM_START	} else if(strncmp(what, "param", 6) == 0) {		dst = (u32 *)PARAM_RAM_BASE;		src = (u32 *)PARAM_FLASH_BASE;		numWords = PARAM_FLASH_LEN / 4;		blob_status.paramSize = 0;		blob_status.paramType = fromFlash;		SerialOutputString("Loading paramater block from flash ");#endif	} else if(strncmp(what, "kernel", 7) == 0) {		dst = (u32 *)KERNEL_RAM_BASE;		src = (u32 *)KERNEL_FLASH_BASE;		numWords = KERNEL_FLASH_LEN / 4;		blob_status.kernelSize = 0;		blob_status.kernelType = fromFlash;		SerialOutputString("Loading kernel from flash ");	} else if(strncmp(what, "ramdisk", 8) == 0) {		dst = (u32 *)RAMDISK_RAM_BASE;		src = (u32 *)RAMDISK_FLASH_BASE;		numWords = RAMDISK_FLASH_LEN / 4;		blob_status.ramdiskSize = 0;		blob_status.ramdiskType = fromFlash;		SerialOutputString("Loading ramdisk from flash ");	} else {		printerror(EINVAL, what);		return 0;	}	MyMemCpy(dst, src, numWords);	SerialOutputString(" done\n");	return 0;}static int Reload(int argc, char *argv[]){	if(argc < 2)		return -ENOPARAMS;	return do_reload(argv[1]);}static char reloadhelp[] = "reload {blob|param|kernel|ramdisk}\n""Reload <argument> from flash to RAM\n";__commandlist(Reload, "reload", reloadhelp);static void PrintSerialSpeed(serial_baud_t speed){	switch(speed) {	case baud_1200:		SerialOutputDec(1200);		break;	case baud_9600:		SerialOutputDec(9600);		break;	case baud_19200:		SerialOutputDec(19200);		break;	case baud_38400:		SerialOutputDec(38400);		break;	case baud_57600:		SerialOutputDec(57600);		break;	case baud_115200:		SerialOutputDec(115200);		break;	case baud_230400:		SerialOutputDec(230400);		break;	default:		SerialOutputString("(unknown)");		break;	}}static void print_elf_sections(void){#ifdef BLOB_DEBUG	extern u32 __text_start, __text_end;	extern u32 __rodata_start, __rodata_end;	extern u32 __data_start, __data_end;	extern u32 __got_start, __got_end;	extern u32 __commandlist_start, __commandlist_end;	extern u32 __initlist_start, __initlist_end;	extern u32 __exitlist_start, __exitlist_end;	extern u32 __ptagtable_begin, __ptagtable_end;	extern u32 __bss_start, __bss_end;	extern u32 __stack_start, __stack_end;	SerialOutputString("ELF sections layout:\n");#define PRINT_ELF_SECTION(from, to, name) \	SerialOutputString("  0x"); \	SerialOutputHex((u32)&(from)); \	SerialOutputString(" - 0x"); \	SerialOutputHex((u32)&(to)); \	SerialOutputString(" " name "\n");	PRINT_ELF_SECTION(__text_start, __text_end, ".text");	PRINT_ELF_SECTION(__rodata_start, __rodata_end, ".rodata");	PRINT_ELF_SECTION(__data_start, __data_end, ".data");	PRINT_ELF_SECTION(__got_start, __got_end, ".got");	PRINT_ELF_SECTION(__commandlist_start, __commandlist_end, ".commandlist");	PRINT_ELF_SECTION(__initlist_start, __initlist_end, ".initlist");	PRINT_ELF_SECTION(__exitlist_start, __exitlist_end, ".exitlist");	PRINT_ELF_SECTION(__ptagtable_begin, __ptagtable_end, ".ptaglist");	PRINT_ELF_SECTION(__bss_start, __bss_end, ".bss");	PRINT_ELF_SECTION(__stack_start, __stack_end, ".stack (in .bss)");#endif}

⌨️ 快捷键说明

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