#!/usr/bin/perl -w
# insmod driver and all dependencies from current dir;
# dependencies not found in pwd are modprobed
sub loaded {
my $mod = shift(@_);
$mod =~ s/-/_/g;
@loaded = split("\n", `cut -d" " -f1 < /proc/modules`);
for my $l (@loaded) {
return 1 if $l eq $mod;
}
return 0;
}
sub autoload {
my $mod = shift(@_);
if (-r "$mod.ko") {
my $depends = `/sbin/modinfo -F depends $mod.ko`;
chomp($depends);
die "$depends\n" if $?;
my @depends = split(',', $depends);
for my $dep (@depends) {
autoload($dep);
}
if (!loaded($mod)) {
print "insmod ./$mod.ko\n";
my $err = `insmod ./$mod.ko`;
die "insmod ./$mod.ko failed: $err\n" if $?;
}
}
else {
if (!loaded($mod)) {
print "modprobe $mod\n";
my $err = `modprobe $mod`;
die "modprobe $mod failed: $err\n" if $?;
}
}
}
die "usage: $0 driver.ko\n" unless $#ARGV == 0;
die "$ARGV[0] not readable\n" unless -r $ARGV[0];
$ARGV[0] =~ s/.ko$//;
`sync`;
autoload($ARGV[0]);
`sync`;
LinuxTV legacy CVS <linuxtv.org/cvs>