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

📄 fore200e_mkfirm.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
字号:
/*  $Id: fore200e_mkfirm.c,v 1.1 2000/02/21 16:04:32 davem Exp $  mkfirm.c: generates a C readable file from a binary firmware image  Christophe Lizzi (lizzi@{csti.fr, cnam.fr}), June 1999.    This software may be used and distributed according to the terms  of the GNU General Public License, incorporated herein by reference.*/#include <stdio.h>#include <sys/types.h>#include <sys/time.h>char* default_basename = "pca200e"; /* was initially written for the PCA-200E firmware */char* default_infname  = "<stdin>";char* default_outfname = "<stdout>";char* progname;int   verbose  = 0;int   inkernel = 0;void usage(void){    fprintf(stderr,	    "%s: [-v] [-k] [-b basename ] [-i firmware.bin] [-o firmware.c]\n",	    progname);    exit(-1);}int main(int argc, char** argv){    time_t   now;    char*    infname  = NULL;    char*    outfname = NULL;    char*    basename = NULL;    FILE*    infile;    FILE*    outfile;    unsigned firmsize;    int      c;    progname = *(argv++);        while (argc > 1) {        if ((*argv)[0] == '-') {            switch ((*argv)[1]) {	    case 'i':		if (argc-- < 3)		    usage();		infname = *(++argv);		break;	    case 'o':		if (argc-- < 3)		    usage();		outfname = *(++argv);		break;	    case 'b':		if (argc-- < 3)		    usage();		basename = *(++argv);		break;	    case 'v':		verbose = 1;		break;	    case 'k':		inkernel = 1;		break;	    default:		usage();            }	}	else {	    usage();	}	argc--;        argv++;    }        if (infname != NULL) {	infile = fopen(infname, "r");	if (infile == NULL) {	    fprintf(stderr, "%s: can't open %s for reading\n",		    progname, infname);	    exit(-2);	}    }    else {	infile = stdin;	infname = default_infname;    }    if (outfname) {	outfile = fopen(outfname, "w");	if (outfile == NULL) {	    fprintf(stderr, "%s: can't open %s for writing\n",		    progname, outfname);	    exit(-3);	}    }    else {	outfile = stdout;	outfname = default_outfname;    }    if (basename == NULL)	basename = default_basename;    if (verbose) {	fprintf(stderr, "%s: input file = %s\n", progname, infname );	fprintf(stderr, "%s: output file = %s\n", progname, outfname );	fprintf(stderr, "%s: firmware basename = %s\n", progname, basename );    }    time(&now);    fprintf(outfile, "/*\n  generated by %s from %s on %s"	    "  DO NOT EDIT!\n*/\n\n",	    progname, infname, ctime(&now));    if (inkernel)	fprintf(outfile, "#include <linux/init.h>\n\n" );        /* XXX force 32 bit alignment? */    fprintf(outfile, "const unsigned char%s %s_data[] = {\n", 	    inkernel ? " __initdata" : "", basename );        c = getc(infile);    fprintf(outfile,"\t0x%02x", c);    firmsize = 1;        while ((c = getc(infile)) >= 0) {		if (firmsize++ % 8)	    fprintf(outfile,", 0x%02x", c);	else	    fprintf(outfile,",\n\t0x%02x", c);    }    fprintf(outfile, "\n};\n\n");    fprintf(outfile, "const unsigned int%s %s_size = %u;\n",	    inkernel ? " __initdata" : "", basename, firmsize );    if (infile != stdin)	fclose(infile);    if (outfile != stdout)	fclose(outfile);    if(verbose)	fprintf(stderr, "%s: firmware size = %u\n", progname, firmsize);    exit(0);}

⌨️ 快捷键说明

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