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

📄 load_file.c

📁 arm9的bootloader大家下载解压缩即可看到
💻 C
字号:
#include "inc/command.h"#include "inc/serial.h"#include "inc/xmodem.h"#include <string.h>#define LOAD_TO_FLASH	1#define LOAD_TO_RAM	2#define UNKNOWN_MODEM		0#define X_MODEM			1#define Y_MODEM			2#define Z_MODEM			3static int modem_is(const char *mt){	if (strncmp("x", mt, 1) == 0) {		return X_MODEM;	} else if (strncmp("y", mt, 1) == 0) {		return Y_MODEM;	} else if (strncmp("z", mt, 1) == 0) {		return Z_MODEM;	} else {		return UNKNOWN_MODEM;	}} size_t download_file(char *buf, size_t size, int modem, char *name){	switch (modem) {		case X_MODEM://#ifdef CONFIG_SERIAL_XMODEM			Uart_SendString("Ready for downloading using xmodem...\n");			Uart_SendString("Waiting...\n");			return xmodem_receive(buf, size);//#else//			Uart_SendString("Not support XMODEM protocol by this vivi\n");//#endif			break;		case Y_MODEM:#ifdef CONFIG_SERIAL_YMODEM			Uart_SendString("Ready for downloading using ymodem...\n");			Uart_SendString("Waiting...\n");			return ymodem_receive(buf, size, name);#else			Uart_SendString("Not support YMODEM protocol by this vivi\n");#endif			break;		case Z_MODEM:			Uart_SendString("Not support zmodem yet.\n");			break;		default:			Uart_SendString("Not support this modem\n");			break;	}	return 0;}/*void command_load(int argc, const char **argv){	char *buf = (char *)RAM_BASE;	 	unsigned long to;	// is declared to long-long type ? 	size_t size;	int modem = 0;	int where_to = 0;	int ret;	size_t retlen;	mtd_partition_t *dst_part;	int flag;	char file_name[255] = { 0, };	//Parse arguments 	switch (argc) {	case 2:		if (strncmp("help", argv[1], 4) == 0) {			goto print_usage;		} else {			goto invalid_cmd;		}		break;	case 4:		dst_part = get_mtd_partition(argv[2]);		if (dst_part == NULL) {			printk("Could not found \"%s\" partition\n", argv[2]);			return;		}		to = dst_part->offset;		size = dst_part->size;		flag = dst_part->flag;		modem = modem_is(argv[3]);		break;	case 5:		to = strtoul(argv[2], NULL, 0, &ret);		if (ret) goto error_parse_arg;		size = (size_t)strtoul(argv[3], NULL, 0, &ret);		if (ret) goto error_parse_arg;		modem = modem_is(argv[4]);		flag = 0;		break;	default:		goto invalid_cmd;	}	if (strncmp("flash", argv[1], 5) == 0) {		where_to = LOAD_TO_FLASH;	} else if (strncmp("ram", argv[1], 3) == 0) {		where_to = LOAD_TO_RAM;	} else {		printk("invalid argument. 'flash' or 'ram' is available\n");		return;	}	// if load to ram 	if (where_to == LOAD_TO_RAM) {		buf = (char *)to;	}	// download a file 	retlen = download_file(buf, size, modem, file_name);	// hacked by nandy. delay for serial output 	{ int i = 0x10000; while (i > 0) i--; }	if (retlen == 0) {		printk("Failed downloading file\n");		return;	}	printk("Downloaded file at 0x%08lx, size = %d bytes\n", buf, retlen);	switch (where_to) {	case LOAD_TO_FLASH:		if (retlen > size) {			printk("An image size is too large to write flash.				wanted = 0x%08lx, loaded = 0x%08lx\n", size, retlen);			return;		}		if (flag & MF_ISRAM) {			printk("Ooops, actually this partition is ram. It's tweak...!\n");			return -1;		}		ret = write_to_flash((loff_t)to, retlen, buf, flag);		break;	case LOAD_TO_RAM:		break;	}	if (modem == Y_MODEM)		check_md5sum(buf, retlen, file_name);	return;error_parse_arg:	printk("Can't parsing argumets\n");	return;invalid_cmd:	printk("invalid 'load' command: too few(many) arguments\n");print_usage:	printk("\nUsage:\n");	printk("  load <flash|ram> [ <partname> | <addr> <size> ] <x|y|z>\n");	return;}user_command_t load_cmd = {	"load",	command_load,	NULL,	"load {...}\t\t\t-- Load a file to RAM/Flash"};*/

⌨️ 快捷键说明

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