summaryrefslogtreecommitdiffstats
path: root/kernel/modules.pl
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/modules.pl')
-rw-r--r--kernel/modules.pl160
1 files changed, 93 insertions, 67 deletions
diff --git a/kernel/modules.pl b/kernel/modules.pl
index 0cd793224..641d36b7f 100644
--- a/kernel/modules.pl
+++ b/kernel/modules.pl
@@ -10,117 +10,140 @@ BEGIN {
use MDK::Common;
use list_modules;
+#- seldom used modules
+#- we don't bother making a special floppy for those
+my %modules_only_for_all_img = (
-my @skip_big_modules_on_stage1 = (
-qw(
-olympic
-sk98lin acenic
-3c90x
-ns83820
-aironet4500_card aironet4500_core com20020-pci hamachi starfire winbond-840
-fealnx
-
-dc395x_trm
-BusLogic seagate fdomain g_NCR5380
-)
+ 'network/main' => [
+ qw(olympic acenic),
+ qw(aironet4500_card com20020-pci hamachi starfire winbond-840),
+ qw(fealnx 3c990fx prism2_plx dgrs),
+
+ # token ring
+ qw(tmspci ibmtr abyss),
+
+ qw(3c501 3c503 3c505 3c507 3c515), # unused, hopefully?
+ qw(eepro 82596 de620 depca ewrk3 cs89x0),
+
+ if_(arch() =~ /alpha|ppc/, qw(sb1000)),
+ qw(iph5526),
+
+ qw(ac3200 at1700 atp ni5010 ni52 ni65), #- unused from Jeff
+ ],
+
+ 'disk/scsi' => [
+ # ISA cards:
+ qw(NCR53c406a aha152x psi240i qlogicfas qlogicfc wd7000 sim710 t128 ultrastor), '53c7,8xx',
+ #- still used, keeping them: qw(aha1542 sym53c416),
+
+ qw(dc395x_trm BusLogic seagate fdomain g_NCR5380),
+
+ qw(3w-xxxx pci2220i qla2x00),
+ qw(eata eata_pio eata_dma),
+ qw(in2000 pas16 a100u2w),
+
+ 'AM53C974', # deprecated by tmscsim
+ "u14-34f", #- duplicate from ultrastor.o
+ ],
+
+ 'disk/hardware_raid' => [
+ qw(i2o_block qla2200 qla2300 cpqfc DAC960),
+ ],
);
-my @skip_modules_on_stage1 = (
- qw(sktr tmspci ibmtr abyss), # alt token ring
- qw(old_tulip rtl8139),
- qw(3c501 3c503 3c505 3c507 3c515), # unused, hopefully?
- 'ataraid', # ad-hoc raid which is unsupported in stage1 anyway
- if_(arch() =~ /alpha|ppc/, qw(sb1000)),
- qw(
- tg3 r8169
- apa1480_cb
- imm ppa plip
- 3w-xxxx pci2220i qla2x00 i2o_block
- eata_pio eata_dma
- qla2200 qla2300
- iph5526
- ),
- 'in2000', 'pas16', 'a100u2w', 'cpqfc',
- 'AM53C974', # deprecated by tmscsim
- qw(ac3200 at1700 atp ni5010 ni52 ni65), #- unused from Jeff
- "u14-34f", #- duplicate from ultrastor.o
+#- modules that will only be available in stage2
+#- those modules are NOT in all.img, network.img...
+#- there should only be modules that can't be used on stage1
+#- completly unused modules should be removed directly from the kernel
+#- (and so be removed from stage2 too)
+my %modules_removed_from_stage1 = (
+ 'network/main' => [
+ 'plip'
+ ],
+
+ 'disk/hardware_raid' => [
+ qw(imm ppa),
+ 'ataraid', # ad-hoc raid which is unsupported in stage1 anyway
+ ],
);
my @modules_always_on_stage1 = qw(floppy);
+
+sub flatten_and_check {
+ my ($h) = @_;
+ map {
+ my $category = $_;
+ my @l = @{$h->{$category}};
+ if (my @bad = difference2(\@l, [ category2modules($category) ])) {
+ foreach (@bad) {
+ if (my $cat = module2category($_)) {
+ warn "module $_ is in category $cat, not in $category\n";
+ } else {
+ warn "unknown module $_\n";
+ }
+ }
+ exit 1;
+ }
+ @l;
+ } keys %$h;
+}
+
+my @modules_only_for_all_img = flatten_and_check(\%modules_only_for_all_img);
+my @modules_removed_from_stage1 = flatten_and_check(\%modules_removed_from_stage1);
+
+
my %images = (
+ network_gigabit_usb
+ => 'fs/network network/raw bus/usb network/gigabit|usb',
network => 'fs/network network/raw bus/pcmcia network/main',
hd => 'disk/raw fs/local|loopback disk/scsi|hardware_raid',
- other => 'disk/scsi|hardware_raid network/main ONLY_BIG fs/cdrom disk/cdrom|raw fs/network network/raw',
+ hd_usb => 'disk/raw fs/local|loopback bus/usb disk/usb bus/firewire disk/firewire',
pcmcia => 'fs/cdrom disk/cdrom|raw|pcmcia bus/pcmcia fs/network network/pcmcia|raw',
cdrom => 'fs/cdrom disk/cdrom|raw|scsi',
- usb => 'fs/cdrom|local|loopback disk/cdrom|raw bus/usb disk/usb fs/network network/usb|raw bus/firewire disk/firewire',
all => 'fs/cdrom disk/cdrom|raw bus/usb disk/usb|scsi fs/loopback|local bus/pcmcia disk/pcmcia|hardware_raid fs/network network/main|pcmcia|usb|raw bus/firewire disk/firewire',
);
+load_dependencies(glob("all.modules/2.4*/modules.dep"));
+
my $verbose = "@ARGV" =~ /-v/;
images() if "@ARGV" =~ /images/;
check() if "@ARGV" =~ /check/;
pci_modules4stage1($1) if "@ARGV" =~ /pci_modules4stage1:(.*)/;
sub images {
- load_dependencies('modules.dep');
-
while (my ($image, $l) = each %images) {
my @modules = @modules_always_on_stage1;
foreach (split(' ', $l)) {
- if (/ONLY_BIG/) {
- @modules = intersection(\@modules, \@skip_big_modules_on_stage1);
- next;
- }
push @modules, category2modules($_);
}
+
+ @modules = difference2(\@modules, \@modules_removed_from_stage1);
if ($image !~ /all/) {
- @modules = difference2(\@modules, \@skip_modules_on_stage1);
- }
- if ($image !~ /other|all/) {
- @modules = difference2(\@modules, \@skip_big_modules_on_stage1)
+ @modules = difference2(\@modules, \@modules_only_for_all_img);
}
- @modules = map { dependencies_closure($_) } @modules;
+ @modules = uniq(map { dependencies_closure($_) } @modules);
printf qq(%s_modules="%s"\n), $image, join(" ", map { "$_.o" } @modules);
}
}
sub pci_modules4stage1 {
- print "$_\n" foreach difference2([ category2modules($_[0]) ], \@skip_modules_on_stage1);
+ print "$_\n" foreach uniq(map { dependencies_closure($_) } difference2([ category2modules($_[0]) ], \@modules_removed_from_stage1));
}
sub check {
my $error;
my %listed;
- my %big_modules_categories;
while (my ($t1, $l) = each %list_modules::l) {
while (my ($t2, $l) = each %$l) {
ref $l or die "bad $l in $t1/$t2";
foreach (@$l) {
$listed{$_} = 1;
- push @{$big_modules_categories{$t1}{$t2}}, $_ if member($_, @skip_modules_on_stage1);
}
}
}
- # remove accepted categories for other.img
- delete $big_modules_categories{disk}{hardware_raid};
- delete $big_modules_categories{disk}{scsi};
- delete $big_modules_categories{network}{main};
-
- if (map { %$_ } values %big_modules_categories) {
- my @l = map { "$_/" . join('|', sort keys %{$big_modules_categories{$_}}) } sort keys %big_modules_categories;
- print STDERR "WEIRD CATEGORIES USED FOR other.img: ", join(" ", @l), "\n";
- if ($verbose) {
- while (my ($t1, $t2s) = each %big_modules_categories) {
- print "$t1/$_ used for other.img: ", join(" ", @{$t2s->{$_}}), "\n" foreach keys %$t2s;
- }
- }
- $error = 1;
- }
-
my %module2category;
my %deprecated_modules = %listed;
my $not_listed = sub {
@@ -150,16 +173,19 @@ sub check {
my $pcitable = read_pcitable("/usr/share/ldetect-lst/pcitable");
my $usbtable = read_pcitable("/usr/share/ldetect-lst/usbtable");
- my @l = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$pcitable;
- if (my @l = difference2(\@l, [ keys %listed ])) {
+ my @l1 = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$pcitable;
+ if (my @l = difference2(\@l1, [ keys %listed ])) {
my %not_listed;
push @{$not_listed{$module2category{$_}}}, $_ foreach @l;
+ if (my $l = delete $not_listed{''}) {
+ print "bad/old pcitable modules : ", join(" ", @$l), "\n";
+ }
print STDERR "PCITABLE MODULES NOT LISTED $_: ", join(" ", @{$not_listed{$_}}), "\n" foreach sort keys %not_listed;
#$error = 1;
}
- my @l = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$usbtable;
- if (my @l = difference2(\@l, [ keys %listed ])) {
+ my @l2 = uniq grep { !/:/ && $_ ne 'unknown' } map { $_->[0] } values %$usbtable;
+ if (my @l = difference2(\@l2, [ keys %listed ])) {
my %not_listed;
push @{$not_listed{$module2category{$_}}}, $_ foreach @l;
if ($verbose) {