diff options
Diffstat (limited to 'rescue/drvinst')
-rwxr-xr-x | rescue/drvinst | 81 |
1 files changed, 18 insertions, 63 deletions
diff --git a/rescue/drvinst b/rescue/drvinst index 8066f0f0a..78c6f5c74 100755 --- a/rescue/drvinst +++ b/rescue/drvinst @@ -12,81 +12,36 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -local $_ = join '', @ARGV; +use lib qw(../perl-install /usr/lib/libDrakX); +use common; +use detect_devices; -"@ARGV" =~ /-h/ and die "usage: drivers_install [drivertype1 drivertype2..]\n"; +$ARGV[0] =~ /^--?h/ and die "usage: drivers_install [drivertype1 [drivertype2 ...]]\n"; +my @types = @ARGV; - -sub pci_probe { - my @l; - foreach (`/usr/bin/lspcidrake -v`) { - push @l, do { - if (/^(\S+)\s*: (.+) \[([^\]]+)/) { - { driver => $1, description => $2, type => $3 }; - } elsif (/^(\S+)\s*: (.+)/) { - { driver => $1, description => $2, type => 'NOT_DEFINED' }; - } else { - next; - } - }; - } - @l; +sub install_module_raw { + my ($driver, $o_descr) = @_; + print STDERR "Installing driver $driver", $o_descr ? " (for \"$o_descr\")" : '', "\n"; + system("/sbin/modprobe", $driver) and print "\tfailed\n"; } -sub install_module($$) { +my $already_usb; +sub install_module { my ($driver, $descr) = @_; - print "Installing driver $driver (for \"$descr\")\n"; - system("/sbin/modprobe", $driver) and print "\tfailed\n"; - my $already_usb if 0; + install_module_raw($driver, $descr); if (!$already_usb && $driver =~ /usb/) { $already_usb = 1; - print "Installing driver usbkdb\n"; - system('/sbin/modprobe', 'usbkbd') and print "\tfailed\n"; - print "Installing driver keybdev\n"; - system('/sbin/modprobe', 'keybdev') and print "\tfailed\n"; + install_module_raw('usbkbd'); + install_module_raw('keybdev'); } } - #- start -foreach $card (pci_probe()) { - $card->{type} eq "DISPLAY_VGA" and next; - $card->{driver} eq "unknown" and next; - $card->{driver} =~ "Card:" and next; +foreach my $card (detect_devices::pci_probe()) { + $card->{driver} eq 'unknown' || $card->{driver} =~ /:/ and next; + $card->{media_type} eq "DISPLAY_VGA" and next; - if (!@ARGV || grep { $card->{type} =~ /$_/i } @ARGV) { + if (!@ARGV || find { $card->{media_type} =~ /$_/i } @types) { install_module($card->{driver}, $card->{description}); } } - - - -#------------------------------------------------- -#- $Log$ -#- Revision 1.8 2005/04/19 13:10:25 prigaux -#- mandriva switch -#- -#- Revision 1.7 2004/07/20 02:42:12 prigaux -#- MandrakeSoft -> Mandrakesoft -#- -#- Revision 1.6 2002/09/10 10:07:23 gc -#- drvinst <param> is broken when we don't -v -#- -#- Revision 1.5 2001/09/27 16:00:05 gc -#- don't install usb keyboard drivers more than once -#- -#- Revision 1.4 2001/09/27 15:57:55 gc -#- try to fix usb keyboards -#- -#- Revision 1.3 2001/03/29 11:33:28 gc -#- test for "Card:" and not install, some videoboards are not reported as DISPLAY_VGA :-( -#- -#- Revision 1.2 2001/02/12 18:42:17 uid553 -#- pixelization -#- -#- Revision 1.1 2001/02/12 14:31:10 uid535 -#- - add lspci, lspcidrake, vim-minimal -#- - better /etc/issue -#- - better PS1 -#- - write embryonic tool (installation of detected drivers according to pci cards) -#- |