- Timestamp:
- Feb 27, 2014, 3:48:19 AM (11 years ago)
- Location:
- branches/3.2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.2/MondoRescue/lib/MondoRescue/Kernel.pm
r3219 r3249 12 12 use strict 'vars'; 13 13 use Data::Dumper; 14 use POSIX "uname"; 14 15 use lib qw (lib); 15 16 use ProjectBuilder::Base; … … 26 27 27 28 our @ISA = qw(Exporter); 28 our @EXPORT = qw(mr_kernel_get_version );29 our @EXPORT = qw(mr_kernel_get_version mr_kernel_get_modules); 29 30 30 31 =pod … … 55 56 $kernelver = "unknown"; 56 57 57 ($os,$ver,$kernelver,$rest) = split(/ /,$mr_os->{'files'}->{'proc_version'}) if ($mr_os->{'os'} eq "linux"); 58 my ($sysname, $nodename, $release, $version, $machine ) = uname(); 59 $kernelver = $release if (defined $release); 58 60 59 61 return($kernelver); 62 } 63 64 65 =item B<mr_kernel_get_modules> 66 67 Tis function takes as input the kernel version to examined (can be undef in which case the running kernel is used) and a list of modules names to examined as well (can be undef in which case all modules ar taken) 68 This function returns back the modules path as a first argument and the list of relative modules path for the modules names passed. 69 70 Example: 71 mr_kernel_get_modules("3.8.13.4-desktop-1.mga3","ext3") returns 72 ("/lib/modules/3.8.13.4-desktop-1.mga3", "kernel/fs/ext3/ext3.ko.xz","kernel/fs/jbd/jbd.ko.xz") 73 74 =cut 75 76 sub mr_kernel_get_modules { 77 78 my $ver = $_; 79 $ver = mr_kernel_get_version() if (not defined ($ver)); 80 my @allmodules = @_; 81 82 my $module = ""; 83 my %modlist; 84 my $void = ""; 85 my @allmodpaths; 86 my $modulepath = ""; 87 88 # If no module names list passed as parameter, the work on all modules of the system 89 if (not defined $allmodules[0]) { 90 open(LSMOD, "/sbin/lsmod |") or die "Unable to launch lsmod"; 91 while (<LSMOD>) { 92 next if (/^Module/); 93 ($module, $void) = split(/ /); 94 push @allmodules,$module; 95 } 96 close(LSMOD); 97 } 98 99 open(DEPMOD, "/sbin/depmod -n $ver |") or die "Unable to launch depmod"; 100 while (<DEPMOD>) { 101 ($module, $void) = split(/:/); 102 last if ($module =~ /^#/); 103 chomp($void); 104 $modlist{$module} = $void; 105 pb_log(2,"Depmod on $module gives $void\n"); 106 } 107 close(DEPMOD); 108 109 #print Dumper(%modlist)."\n"; 110 111 my $lib; 112 my $modulep; 113 my $kernelv; 114 my $modpath; 115 116 foreach my $m (@allmodules) { 117 pb_log(1,"Analyzing $m\n"); 118 open(MODINFO, "/sbin/modinfo -n -k $ver $m 2>/dev/null |") or die "Unable to launch modinfo"; 119 $module = <MODINFO>; 120 close(MODINFO); 121 if ((not defined $module) || ($module =~ '^$')) { 122 pb_log(1,"WARNING: No modinfo for module $m\n"); 123 next; 124 } 125 chomp($module); 126 ($void,$lib,$modulep,$kernelv,$modpath) = split(/\//,$module,5); 127 next if (not defined $modpath); 128 pb_log(2,"modpath: $modpath\n"); 129 push @allmodpaths,$modpath,split(/ /,$modlist{$modpath}); 130 } 131 $modulepath = "/$lib/$modulep/$kernelv"; 132 pb_log(1,"modules path: $modulepath\n"); 133 pb_log(1,"all modpaths: ".join(' ',@allmodpaths)."\n"); 134 return($modulepath,@allmodpaths); 60 135 } 61 136 -
branches/3.2/mindi/get-modules.pl
r3213 r3249 4 4 use POSIX "uname"; 5 5 use Data::Dumper; 6 use ProjectBuilder::Base; 7 use MondoRescue::Kernel; 6 8 7 my ($sysname, $nodename, $release, $version, $machine ) = uname(); 8 my $ver = ""; 9 my $module = ""; 10 my %modlist; 11 my $void = ""; 12 my $allmodules = ""; 9 my $ver = undef; 13 10 14 15 if (not (defined $ARGV[0])) { 16 $ver = $release; 17 } else { 18 $ver = $ARGV[0]; 11 if ((defined $ARGV[0]) && ($ARGV[0] eq "-v")) { 12 #$pbverbose = 1; 13 shift; 19 14 } 20 open(LSMOD, "/sbin/lsmod |") or die "Unable to launch lsmod"; 21 open(DEPMOD, "/sbin/depmod -n $ver |") or die "Unable to launch depmod"; 22 23 while (<DEPMOD>) { 24 ($module, $modlist{$module}) = split(/:/); 25 chomp($modlist{$module}); 26 last if ($module =~ /^#/); 27 #print "Analyzing $module\n"; 15 if ((defined $ARGV[0]) && ($ARGV[0] eq "-k")) { 16 shift; 17 $ver = $ARGV[0]; 18 shift; 28 19 } 29 print Dumper(%modlist)."\n"; 30 while (<LSMOD>) { 31 next if (/^Module/); 32 ($module, $void) = split(/ /); 33 #print "Analyzing $module\n"; 34 $module = `/sbin/modinfo -n $module`; 35 chomp($module); 36 my ($void,$lib,$modulep,$kernelv,$modpath) = split(/\//,$module,5); 37 print "modpath: $modpath\n"; 38 $allmodules .= $modlist{$modpath}; 39 } 40 close(LSMOD); 41 close(DEPMOD); 42 $allmodules =~ s/\n/ /g; 43 $allmodules =~ s/ */ /g; 44 $allmodules =~ s/ [0-9A-z\/]*\// /g; 45 $allmodules =~ s/\.ko.xz//g; 46 print "all modules: $allmodules\n"; 20 my ($modulepath,@allmodpaths) = mr_kernel_get_modules($ver,@ARGV); 21 print "modules path: $modulepath\n"; 22 print "all modpaths: ".join(' ',@allmodpaths)."\n";
Note:
See TracChangeset
for help on using the changeset viewer.