File:  [DVB] / dvb-kernel / build-2.6 / autoload.pl
Revision 1.1: download - view: text, annotated - select for diffs
Sat Jul 16 17:21:02 2005 UTC (18 years, 10 months ago) by js
Branches: MAIN
CVS tags: HEAD
# insmod driver and all dependencies from current dir;
# dependencies not found in pwd are modprobed

#!/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>