diff options
author | Frank Haverkamp <haver@vnet.ibm.com> | 2007-11-24 11:04:51 +0100 |
---|---|---|
committer | Frank Haverkamp <haver@vnet.ibm.com> | 2007-11-24 11:04:51 +0100 |
commit | ec50ff6d648dee1f3024e1cbd23f1d1cec4944dc (patch) | |
tree | f1a9fcefd8a87025b781c835d7de09f88b6dc28d /ubi-utils/scripts/inject_biterror.pl | |
parent | 636524b9c8fa81d0c07f1f0bbf3ac9e5f6287247 (diff) |
ubi-utils: nand2bin had ECC calculation problems
Fixed a problem when ECC was checked. The correction was not properly
done by subpage. Added more output for the moment to be able to figure
out more potential problems.
Added testcase: bin2nand2bin.sh and biterror inject program inject_biterror.pl
Interface
o ECC correction disabled by default. Switch to turn it
explicitly on. The user must specify what he wants to be done.
Signed-off-by: Frank Haverkamp <haver@vnet.ibm.com>
Diffstat (limited to 'ubi-utils/scripts/inject_biterror.pl')
-rw-r--r-- | ubi-utils/scripts/inject_biterror.pl | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/ubi-utils/scripts/inject_biterror.pl b/ubi-utils/scripts/inject_biterror.pl new file mode 100644 index 0000000..b4a862a --- /dev/null +++ b/ubi-utils/scripts/inject_biterror.pl @@ -0,0 +1,94 @@ +#!/usr/bin/perl -w +# +# 2007 Frank Haverkamp <haver@vnet.ibm.com> +# +# Program for bit-error injection. I am sure that perl experts do it +# in 1 line. Please let me know how it is done right ;-). +# + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; + +my $i; +my $help; +my $result; +my $offset = 0; +my $bitmask = 0x01; +my $in = "input.mif"; +my $out = "output.mif"; + +$result = GetOptions ("offset=i" => \$offset, # numeric + "bitmask=o" => \$bitmask, # numeric + "input=s" => \$in, # string + "output=s" => \$out, # string + "help|?" => \$help) or pod2usage(2); + +pod2usage(1) if $help; + +my $buf; + +open(my $in_fh, "<", $in) + or die "Cannot open file $in: $!"; +binmode $in_fh; + +open(my $out_fh, ">", $out) or + die "Cannot open file $out: $!"; +binmode $out_fh; + +$i = 0; +while (sysread($in_fh, $buf, 1)) { + + $buf = pack('C', unpack('C', $buf) ^ $bitmask) if ($i == $offset); + syswrite($out_fh, $buf, 1) or + die "Cannot write to offset $offset: $!"; + $i++; +} + +close $in_fh; +close $out_fh; + +__END__ + +=head1 NAME + +inject_biterrors.pl + +=head1 SYNOPSIS + +inject_biterror.pl [options] + +=head1 OPTIONS + +=over 8 + +=item B<--help> + +Print a brief help message and exits. + +=item B<--offset>=I<offset> + +Byte-offset where bit-error should be injected. + +=item B<--bitmask>=I<bitmask> + +Bit-mask where to inject errors in the byte. + +=item B<--input>=I<input-file> + +Input file. + +=item B<--output>=I<output-file> + +Output file. + +=back + +=head1 DESCRIPTION + +B<inject_biterrors.pl> will read the given input file and inject +biterrors at the I<offset> specified. The location of the biterrors +are defined by the I<bitmask> parameter. + +=cut |