2 $Id: fore200e_mkfirm.c,v 1.1 2000/02/21 16:04:32 davem Exp $
4 mkfirm.c: generates a C readable file from a binary firmware image
6 Christophe Lizzi (lizzi@{csti.fr, cnam.fr}), June 1999.
8 This software may be used and distributed according to the terms
9 of the GNU General Public License, incorporated herein by reference.
13 #include <sys/types.h>
16 char* default_basename
= "pca200e"; /* was initially written for the PCA-200E firmware */
17 char* default_infname
= "<stdin>";
18 char* default_outfname
= "<stdout>";
28 "%s: [-v] [-k] [-b basename ] [-i firmware.bin] [-o firmware.c]\n",
34 int main(int argc
, char** argv
)
38 char* outfname
= NULL
;
39 char* basename
= NULL
;
48 if ((*argv
)[0] == '-') {
82 if (infname
!= NULL
) {
83 infile
= fopen(infname
, "r");
85 fprintf(stderr
, "%s: can't open %s for reading\n",
92 infname
= default_infname
;
96 outfile
= fopen(outfname
, "w");
97 if (outfile
== NULL
) {
98 fprintf(stderr
, "%s: can't open %s for writing\n",
105 outfname
= default_outfname
;
108 if (basename
== NULL
)
109 basename
= default_basename
;
112 fprintf(stderr
, "%s: input file = %s\n", progname
, infname
);
113 fprintf(stderr
, "%s: output file = %s\n", progname
, outfname
);
114 fprintf(stderr
, "%s: firmware basename = %s\n", progname
, basename
);
118 fprintf(outfile
, "/*\n generated by %s from %s on %s"
119 " DO NOT EDIT!\n*/\n\n",
120 progname
, infname
, ctime(&now
));
123 fprintf(outfile
, "#include <linux/init.h>\n\n" );
125 /* XXX force 32 bit alignment? */
126 fprintf(outfile
, "const unsigned char%s %s_data[] = {\n",
127 inkernel
? " __initdata" : "", basename
);
130 fprintf(outfile
,"\t0x%02x", c
);
133 while ((c
= getc(infile
)) >= 0) {
136 fprintf(outfile
,", 0x%02x", c
);
138 fprintf(outfile
,",\n\t0x%02x", c
);
141 fprintf(outfile
, "\n};\n\n");
143 fprintf(outfile
, "const unsigned int%s %s_size = %u;\n",
144 inkernel
? " __initdata" : "", basename
, firmsize
);
148 if (outfile
!= stdout
)
152 fprintf(stderr
, "%s: firmware size = %u\n", progname
, firmsize
);