X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=geekos%2Fscripts%2Fmake_payload.pl;fp=geekos%2Fscripts%2Fmake_payload.pl;h=f39ea9ea70444cb02dc239f7389896d3045ad632;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/geekos/scripts/make_payload.pl b/geekos/scripts/make_payload.pl new file mode 100755 index 0000000..f39ea9e --- /dev/null +++ b/geekos/scripts/make_payload.pl @@ -0,0 +1,65 @@ +#!/usr/bin/perl + +$magic = 0xf1e2d3c4; + +use FileHandle; + +if (scalar(@ARGV) != 2) { + print STDERR "usage: make_payload.pl \n"; + exit 1; +} + +my $config_file = shift @ARGV; +my $out_file = shift @ARGV; + +open (CFGFILE, "$config_file"); +@cfg = ; +close CFGFILE; + +my $num_regions = 0; + +my @region_names = (); +my %region_map = {}; + +foreach $line (@cfg) { + chomp $line; + ($file, $dst) = split(/:/, $line); + push @region_names, $file; + $region_map{$file} = hex($dst); #unpack('N', pack("h8",$dst)); + print "" . hex($dst) . "\n"; + $num_regions++; +} + + + +my $fh = new FileHandle(">$out_file"); +binmode $fh; + +syswrite $fh, pack('L', $magic), 4; +syswrite $fh, pack('L', $num_regions), 4; + +foreach $file (@region_names) { + my $size = (-s $file); + + print "$file to " . $region_map{$file}. " ($size bytes)\n"; + syswrite $fh, pack('L', $size), 4; + syswrite $fh, pack('L', $region_map{$file}), 4; +} + + +my $file; +while (($file = shift @region_names)) { + my $in_fh = new FileHandle("<$file"); + (defined $in_fh) || die "Couldn't open $file: $!\n"; + binmode $in_fh; + + my $buf = chr(0) x 1024; + my $n; + while (($n = sysread($in_fh, $buf, 1024)) > 0) { + syswrite($fh, $buf, $n); + } + $in_fh->close(); +} + + +$fh->close();