diff options
Diffstat (limited to 'kernel/modules.pl')
-rw-r--r-- | kernel/modules.pl | 160 |
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) { |