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

📄 idewimage.c

📁 1. 8623L平台
💻 C
字号:
//// idewimage//// usage : idewimage (option) /dev/xxx file//   option : //     --kernel (default)//     --romfs #include <stdio.h>enum { IMAGE_TYPE_NONE, IMAGE_TYPE_KERNEL, IMAGE_TYPE_ROMFS };#define SECTOR_SIZE				512#define IMAGE_SIGNATURE			"Sigma Designs"#define IMAGE_ID_KERNEL			"Kernel"#define IMAGE_ID_ROMFS			"ROMFS"#define IMAGE_SUBPART_SIZE		0x200000#define IMAGE_SUBPART_SECTORS	(IMAGE_SUBPART_SIZE / SECTOR_SIZE)typedef union {	unsigned char data[SECTOR_SIZE];	struct {		unsigned char dummy[16];		unsigned char signature[16];		unsigned char id[8];		unsigned short major, minor;		unsigned int len;	} u;} image_infoblock_t;int ide_write_image(int type, char *device, int subpart, char *datafile);int main(int argc, char *argv[]){	int i, subpart = 0;	char *cp, *device = NULL, *datafile = NULL;	int type = IMAGE_TYPE_KERNEL;	int dohelp = 0;	for (i = 1; i < argc; ++i) {		if (argv[i][0] == '-') {			if (strcmp(argv[i], "--kernel") == 0)				type = IMAGE_TYPE_KERNEL;			else if (strcmp(argv[i], "--romfs") == 0)				type = IMAGE_TYPE_ROMFS;			else if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--sub") == 0) {				if (++i == argc)					dohelp = 1;				else					subpart = atoi(argv[i]);			} else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0)				dohelp = 1;		} else {			if (device == NULL)				device = argv[i];			else if (datafile == NULL)				datafile = argv[i];		}	}	if (dohelp || device == NULL || datafile == NULL) {		fprintf(stderr, "Usage : idewimage <options> [device file] [filename]\n");		fprintf(stderr, "options :\n");		fprintf(stderr, "  -h, --help : This screen\n");		fprintf(stderr, "  -s, --sub [sub partition] : Sub partition number in a partition\n");		fprintf(stderr, "  --kernel : Writes kernel image\n");		fprintf(stderr, "  --romfs : Writes ROMFS image\n");		return 1;	}	// check if the device file is one of the partition	cp = device + strlen(device) - 1;	if (*cp < '0' || *cp > '9') {		fprintf(stderr, "Error : Specify partition device file instead of whole device\n");		return 2;	}	ide_write_image(type, device, subpart, datafile);	return 0;}#define IMAGE_BUFFER_SIZE		10000int ide_write_image(int type, char *device, int subpart, char *datafile){	FILE *fpdev, *fpsrc;	image_infoblock_t info;	unsigned int filesize, len;	unsigned char buf[IMAGE_BUFFER_SIZE];	if ((fpdev = fopen(device, "w")) == NULL) {		printf("Can not open device file %s\n", device);		return -1;	}	if ((fpsrc = fopen(datafile, "r")) == NULL) {		printf("Can not open source file %s\n", datafile);		fclose(fpdev);		return -2;	}	// move the file pointer on the destination	fseek(fpdev, IMAGE_SUBPART_SIZE * subpart, SEEK_SET);	// get the lenght of file	fseek(fpsrc, 0, SEEK_END);	filesize = ftell(fpsrc);	fseek(fpsrc, 0, SEEK_SET);		// print information	printf("Write image to %s subpartition %d (offset = %dMB) file size = %dKB\n", 		device, subpart, (IMAGE_SUBPART_SIZE * subpart) >> 20, filesize >> 10);	// fill out the information block	memset(&info, 0, sizeof info);		strcpy(info.u.signature, IMAGE_SIGNATURE);	if (type == IMAGE_TYPE_KERNEL)		strcpy(info.u.id, IMAGE_ID_KERNEL);	else if (type == IMAGE_TYPE_ROMFS)		strcpy(info.u.id, IMAGE_ID_ROMFS);	else		return 1;	info.u.major = 1;	info.u.minor = 0;	info.u.len = filesize;	// write header	fwrite(&info, sizeof info, 1, fpdev); 	// write data	while ((len = fread(buf, 1, IMAGE_BUFFER_SIZE, fpsrc)) > 0)		fwrite(buf, 1, len, fpdev);	fclose(fpdev);	fclose(fpsrc);}

⌨️ 快捷键说明

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