use FindBin;
+# Create startup script in ramdisk
my $S99 = "$FindBin::Bin/initramfs/etc/init.d/S99benchmark";
system("rm -f $S99");
system("cat > $S99; chmod +x $S99") unless -t STDIN;
+# Boot gateway
my $boot;
my $pid = &run_boot;
$|=1;
my $ready;
while (<$boot>){
- last if ($ready = /Welcome to Buildroot/ || /UGW started/);
+ last if ($ready = m/Welcome to Buildroot/ ||
+ m/UGW started/ ||
+ m/t...a...s...k...s... ...s...t...a...r...t...e...d/); # RTEMS has bug - it sends 4 characters instead of just one
}
die "Boot failed" unless $ready;
+# Measure latencies
my $latester=<<'EOF';
rm -f tmp-stat.txt
echo "Starting latester"
kill('TERM', -$pid);
exit($status >> 8);
+# Helper functions
sub kill_boot() { kill('TERM', -$pid) if defined $pid; }
sub run_boot()
{
# die("No boot command") if ($#ARGV eq -1);
- # my $bootcmd = "'".join("' '", @ARGV)."'";
-
- my $bootcmd = "$FindBin::Bin/boot";
+ my $bootcmd = scalar @ARGV ? "'".join("' '", @ARGV)."'" : "$FindBin::Bin/boot";
$SIG{INT} = sub { kill_boot(); exit; };
setpgrp(); # Start new process group so that we can kill all
# background processes at once
close($boot);
- open(STDOUT, ">&", $wh) || die "Can't dup STDOUT: $!";
- my $cmd = "$bootcmd | tee /dev/stderr";
+ open(STDERR, ">&", $wh) || die "Can't dup STDERR: $!";
+ my $cmd = "$bootcmd 2>&1 | tee /dev/stderr";
exec($cmd) || die "Can't exec $cmd: $!";
}
close($wh);