5ff2b0db8f
from dmesg.
135 lines
2.8 KiB
Perl
135 lines
2.8 KiB
Perl
#!/usr/pkg/bin/perl
|
|
#--------------------------------------------------------------------------
|
|
# %Id: adjustkernel,v 1.1 1999/10/15 01:21:30 feyrer Exp feyrer %
|
|
# $Emsi: adjustkernel,v 1.4 2001/10/04 22:26:26 mjl Exp $
|
|
#
|
|
# Usage: adjustkernel -f GENERIC [-o outfile] [-d]
|
|
#
|
|
# commends out any lines that aren't found in the current kernel (dmesg)
|
|
#
|
|
#--------------------------------------------------------------------------
|
|
|
|
use strict;
|
|
use Getopt::Long;
|
|
|
|
#--------------------------------------------------------------------------
|
|
sub findInDmesg($$);
|
|
|
|
#--------------------------------------------------------------------------
|
|
my $kernel;
|
|
my $outname;
|
|
my $debug = 0;
|
|
my $remove = 0;
|
|
my $mesg;
|
|
|
|
die "Invalid command line" unless GetOptions(
|
|
'debug+' => \$debug,
|
|
'file=s' => \$kernel,
|
|
'outfile=s' => \$outname,
|
|
'remove+' => \$remove,
|
|
'mesg=s' => \$mesg
|
|
);
|
|
|
|
###########################################################################
|
|
|
|
die "Usage: $0 [-d] [-o outfile] -f kernel-config\n" unless $kernel;
|
|
|
|
$| = 1 if $debug;
|
|
|
|
if($outname)
|
|
{
|
|
close STDOUT;
|
|
open STDOUT, "> $outname" or die "Cannot write $outname: $!";
|
|
}
|
|
|
|
my @dmesg;
|
|
|
|
if($mesg)
|
|
{
|
|
open DMESG, "< $mesg" or die "Cannot read $mesg: $!";
|
|
@dmesg = <DMESG>;
|
|
close DMESG;
|
|
}
|
|
else
|
|
{
|
|
@dmesg = `dmesg`;
|
|
}
|
|
|
|
@dmesg = grep /^\s*\w+\s+at\s+\w+/, @dmesg;
|
|
|
|
#--------------------------------------------------------------------------
|
|
open(K,"$kernel") or die "Cannot read $kernel: $!";
|
|
while (<K>)
|
|
{
|
|
chomp;
|
|
if (/^\s*#/)
|
|
{ # Already commented out
|
|
# Nothing
|
|
}
|
|
elsif (/(\S*)\s+at\s+(\S*)(\s*.*)$/)
|
|
{
|
|
my ( $dev, $where, $comment ) = ( $1, $2, $3 );
|
|
|
|
print STDERR "#>> Have? <$dev> at <$where><$comment>\n" if $debug;
|
|
|
|
# Deal with inconsistencies
|
|
$where = '\w+\d' if $where =~ /^mii/o;
|
|
|
|
# Expand wildcards
|
|
my $gdev=$dev;
|
|
if ($dev =~ /[?*]$/o)
|
|
{
|
|
$gdev="$`\\d";
|
|
}
|
|
|
|
my $gwhere = $where;
|
|
if ($where =~ /[?*]$/o)
|
|
{
|
|
$gwhere="$`\\d";
|
|
}
|
|
|
|
my $spat = "^${gdev}\\s+at\\s+${gwhere}";
|
|
print STDERR "#>> ? $spat\n" if $debug;
|
|
|
|
my $l = findInDmesg(\@dmesg, "^${gdev}\\s+at\\s+${gwhere}");
|
|
if (! $l)
|
|
{
|
|
if ($dev !~ /mainbus/)
|
|
{ # inconsistent in dmesg, never comment out mainbus at something
|
|
next if $remove;
|
|
|
|
print "#(# ";
|
|
}
|
|
}
|
|
}
|
|
|
|
print "$_\n";
|
|
}
|
|
close(K);
|
|
|
|
# Mention what we didn't find.
|
|
foreach (@dmesg)
|
|
{
|
|
print "# NOTE: NoMatch: $_";
|
|
}
|
|
|
|
exit 0;
|
|
|
|
#--------------------------------------------------------------------------
|
|
sub findInDmesg($$)
|
|
{
|
|
my ( $dref, $pattern ) = @_;
|
|
|
|
my @r = grep /$pattern/, @$dref;
|
|
|
|
# We matched it once, so remove it from dmesg.
|
|
# Ie. we match tr0 at isa once, but not tr* at isa later on
|
|
@$dref = grep !/$pattern/, @$dref;
|
|
|
|
print STDERR "#>> Have! @r" if @r && $debug;
|
|
|
|
return scalar(@r) ? $r[0] : undef;
|
|
}
|
|
|
|
#--------------------------------------------------------------------------
|
|
|