From 289865536ee00866446aea79539efe484be0ea77 Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Wed, 28 Nov 2012 17:11:33 +0100 Subject: fix for missing firmware modules --- src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'src/boot-env/OpenSLX/MakeInitRamFS/Engine') diff --git a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm index 9fd2c8bc..e23dc40f 100644 --- a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm +++ b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm @@ -278,20 +278,15 @@ sub _copyKernelModules # build a list of required firmwares out of the list of modules - not # totally optimal my @firmwares; - $self->addCMD("mkdir -p $self->{'build-path'}/lib/firmware"); - $self->addCMD("ln -s . $self->{'build-path'}/lib/firmware/$self->{'kernel-version'}"); + $self->addCMD("mkdir -p $self->{'build-path'}/lib/firmware/$self->{'kernel-version'}"); foreach my $moduleToBeCopied(%modulesToBeCopied) { $moduleToBeCopied =~ /.*\/(.*?)$/; # implies usage of switch vlog(1,$1); switch ($1){ - # nic modules fw case "bnx2.ko" {push @firmwares, split ' ', "bnx2/"} case "bnx2x.ko" {push @firmwares, split ' ', "bnx2x/"} case "e100.ko" {push @firmwares, split ' ', "e100"} - case "r8169.ko" {push @firmwares, split ' ', "rtl_nic/"} - case "tg3.ko" {push @firmwares, split ' ', "tigon/"} - # wifi fw case "iwlwifi" { push @firmwares, split ' ', "iwlwifi-3945-1.ucode iwlwifi-3945-2.ucode iwlwifi-4965-1.ucode iwlwifi-4965-2.ucode iwlwifi-5000-1.ucode" @@ -300,6 +295,8 @@ sub _copyKernelModules case "radeon.ko" {push @firmwares, split ' ', "radeon/"} case "mga.ko" {push @firmwares, split ' ', "matrox/"} case "r128.ko" {push @firmwares, split ' ', "r128/"} + case "r8169.ko" {push @firmwares, split ' ', "rtl_nic/"} + case "tg3.ko" {push @firmwares, split ' ', "tigon/"} } } # copy all the firmwares that we think are required @@ -310,16 +307,18 @@ sub _copyKernelModules my $alternative_source = followLink( "$self->{'root-path'}/lib/firmware/$firmwareToBeCopied", $self->{'root-path'} ); - my $target = "$self->{'build-path'}/lib/firmware/"; if (-e $source){ + my $target = "$self->{'build-path'}/lib/firmware/$self->{'kernel-version'}/"; + $self->addCMD("cp -pr --dereference $source $target"); + } else { + vlog(3,"unable to find $source for copying purposes"); } - elsif (-e $alternative_source){ + if (-e $alternative_source){ + my $target = "$self->{'build-path'}/lib/firmware/"; + $self->addCMD("cp -pr --dereference $alternative_source $target"); } - else { - vlog(3,"unable to find $source for copying purposes"); - } } # copy all the modules that we think are required -- cgit v1.2.3-55-g7522 From 77ff585ab48626ade2d312102ae98202bf8b8d98 Mon Sep 17 00:00:00 2001 From: Michael Janczyk Date: Tue, 4 Dec 2012 18:32:15 +0100 Subject: - respect blacklisting of modules when autoloading modules in hwautocfg '-b' (stage3). - preinit.local enabled again for config/systemName/default, until now it was only possible for the default system in config/default. It make no sense for client specific configurations though. --- src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm | 4 ++-- src/initramfs/scripts/bin/hwautocfg | 13 +++++++------ src/initramfs/scripts/init | 8 ++++++-- 3 files changed, 15 insertions(+), 10 deletions(-) (limited to 'src/boot-env/OpenSLX/MakeInitRamFS/Engine') diff --git a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm index a0c24edb..cc5cc409 100644 --- a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm +++ b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm @@ -235,9 +235,9 @@ sub _copyPreAndPostinitFiles foreach my $cfg ( 'default/initramfs/preinit.local', - "$self->{'system-name'}/initramfs/preinit.local", + "$self->{'system-name'}/default/initramfs/preinit.local", 'default/initramfs/postinit.local', - "$self->{'system-name'}/initramfs/postinit.local" + "$self->{'system-name'}/default/initramfs/postinit.local" ) { my $cfgPath = "$openslxConfig{'private-path'}/config/stage3/$cfg"; next if !-f $cfgPath; diff --git a/src/initramfs/scripts/bin/hwautocfg b/src/initramfs/scripts/bin/hwautocfg index 22323e84..482c9f9a 100755 --- a/src/initramfs/scripts/bin/hwautocfg +++ b/src/initramfs/scripts/bin/hwautocfg @@ -66,11 +66,12 @@ fi nwcardlist=$(echo ${slxconf_listnwmod}|sed "s/\ /|/g") # save results for later info and for Xen plugin when starting Xen VM hwinfo --netcard --usb-ctrl >/etc/hwinfo.netcard-usbctrl -grep modprobe /etc/hwinfo.netcard-usbctrl | grep -E "$nwcardlist|hcd" | \ - grep -v ehci | sed 's/.* Cmd: "//;s/"//' | sort -u >/etc/modprobe.base +grep modprobe /etc/hwinfo.netcard-usbctrl | grep -E "$nwcardlist|hcd" \ + | grep -v ehci | sed 's/.* Cmd: "//;s/"//;s/modprobe/modprobe -b ${MODPRV}/' \ + | sort -u >/etc/modprobe.base # virtio hack if [ $(grep -ic "virtio_pci" /etc/modprobe.base) -ge 1 ]; then - echo "modprobe virtio_net" >>/etc/modprobe.base + echo 'modprobe ${MODPRV} virtio_net' >>/etc/modprobe.base fi sh /etc/modprobe.base; mdev -s @@ -97,9 +98,9 @@ hwmain () { # check for rtc if not compiled directly into the kernel ( [ -e /proc/driver/rtc ] || modprobe ${MODPRV} rtc-cmos ) & waitfor /tmp/hwdataready 10000 -sed '/Driver Info #1/,/Config Status:/d' \ - /etc/hwinfo.data | grep modprobe | sed "s|.* Cmd: \"||;s|\"|$modloadbg|" \ - | sort -u >/etc/modprobe.pci +sed '/Driver Info #1/,/Config Status:/d' /etc/hwinfo.data | grep modprobe \ + | sed "s|.* Cmd: \"||;s|\"|$modloadbg|;s|modprobe|modprobe -b ${MODPRV}|" \ + | sort -u >/etc/modprobe.pci sh /etc/modprobe.pci mdev -s diff --git a/src/initramfs/scripts/init b/src/initramfs/scripts/init index 3f41d3c6..d1d7945b 100755 --- a/src/initramfs/scripts/init +++ b/src/initramfs/scripts/init @@ -121,8 +121,12 @@ runinithook '00-started' # run pre init script and user defined preinit.local, copied by mkdxsinitrd # from /var/lib/openslx/config/... in stage2 preinit -[ -x /bin/preinit.local ] && /bin/preinit.local - +[ -f /bin/preinit.local ] && { + [ $DEBUGLEVEL -gt 0 ] && \ + echo -n "Running script /bin/preinit.local ... " + chmod u+x /bin/preinit.local + /bin/preinit.local + [ $DEBUGLEVEL -gt 0 ] && echo "ok"; } # switch off the several configuration methods, will be switched on # according to kernel commandline settings -- cgit v1.2.3-55-g7522 From 00aca01bbf2daf8cdd63c3846ca29e3dc50185e5 Mon Sep 17 00:00:00 2001 From: Michael Janczyk Date: Wed, 12 Dec 2012 19:02:04 +0100 Subject: Respect aliases and blacklist of a system. /etc/modprobe.d is now copied to InitRamFS --- src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm | 11 +++++++++++ src/boot-env/OpenSLX/MakeInitRamFS/Engine/Preboot.pm | 2 ++ src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm | 2 ++ 3 files changed, 15 insertions(+) (limited to 'src/boot-env/OpenSLX/MakeInitRamFS/Engine') diff --git a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm index e23dc40f..bf96daf6 100644 --- a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm +++ b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm @@ -336,6 +336,17 @@ sub _copyKernelModules return; } +sub _copyModprobeD +{ + my $self = shift; + + my $source = "$self->{'root-path'}/etc/modprobe.d"; + my $target = "$self->{'build-path'}/etc"; + $self->addCMD("cp -pr --dereference $source $target"); + + return; +} + sub _platformSpecificFileFor { my $self = shift; diff --git a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Preboot.pm b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Preboot.pm index 319ff65e..e0123aa7 100644 --- a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Preboot.pm +++ b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Preboot.pm @@ -43,6 +43,8 @@ sub _collectCMDs $self->_copyKernelModules(); + $self->_copyModprobeD(); + $self->_createInitRamFS(); return; diff --git a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm index cc5cc409..23448998 100644 --- a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm +++ b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/SlxBoot.pm @@ -52,6 +52,8 @@ sub _collectCMDs $self->{distro}->applyChanges($self); $self->_copyKernelModules(); + + $self->_copyModprobeD(); $self->_createInitRamFS(); -- cgit v1.2.3-55-g7522 From 2c45fdd73dc9b8152119b1dd03cfbb303bb705bc Mon Sep 17 00:00:00 2001 From: Michael Janczyk Date: Fri, 14 Dec 2012 14:04:06 +0100 Subject: FW is now automatically added to the initramfs. Checks are done with modinfo. --- src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm | 78 +++++++++++++---------- 1 file changed, 46 insertions(+), 32 deletions(-) (limited to 'src/boot-env/OpenSLX/MakeInitRamFS/Engine') diff --git a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm index bf96daf6..1eb91e88 100644 --- a/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm +++ b/src/boot-env/OpenSLX/MakeInitRamFS/Engine/Base.pm @@ -278,49 +278,63 @@ sub _copyKernelModules # build a list of required firmwares out of the list of modules - not # totally optimal my @firmwares; - $self->addCMD("mkdir -p $self->{'build-path'}/lib/firmware/$self->{'kernel-version'}"); - foreach my $moduleToBeCopied(%modulesToBeCopied) { + foreach my $moduleToBeCopied(sort keys %modulesToBeCopied) { $moduleToBeCopied =~ /.*\/(.*?)$/; - # implies usage of switch - vlog(1,$1); - switch ($1){ - case "bnx2.ko" {push @firmwares, split ' ', "bnx2/"} - case "bnx2x.ko" {push @firmwares, split ' ', "bnx2x/"} - case "e100.ko" {push @firmwares, split ' ', "e100"} - case "iwlwifi" { - push @firmwares, split ' ', - "iwlwifi-3945-1.ucode iwlwifi-3945-2.ucode iwlwifi-4965-1.ucode iwlwifi-4965-2.ucode iwlwifi-5000-1.ucode" - } - # modules required for graphic adaptors (bootsplash, Xorg) - case "radeon.ko" {push @firmwares, split ' ', "radeon/"} - case "mga.ko" {push @firmwares, split ' ', "matrox/"} - case "r128.ko" {push @firmwares, split ' ', "r128/"} - case "r8169.ko" {push @firmwares, split ' ', "rtl_nic/"} - case "tg3.ko" {push @firmwares, split ' ', "tigon/"} + # use modinfo to check if module depends on firmware, and add it + my @dependsFirmware = `modinfo -F firmware $self->{'root-path'}/$moduleToBeCopied`; + foreach my $firmware(@dependsFirmware) { + push @firmwares, split ' ', "$firmware"; } + # old static copy + ## implies usage of switch + #vlog(1,$1); + #switch ($1){ + # #case "bnx2.ko" {push @firmwares, split ' ', "bnx2/"} + # #case "bnx2x.ko" {push @firmwares, split ' ', "bnx2x/"} + # case "e100.ko" {push @firmwares, split ' ', "e100"} + # case "iwlwifi" { + # push @firmwares, split ' ', + # "iwlwifi-3945-1.ucode iwlwifi-3945-2.ucode iwlwifi-4965-1.ucode iwlwifi-4965-2.ucode iwlwifi-5000-1.ucode" + # } + # # modules required for graphic adaptors (bootsplash, Xorg) + # case "radeon.ko" {push @firmwares, split ' ', "radeon/"} + # case "mga.ko" {push @firmwares, split ' ', "matrox/"} + # case "r128.ko" {push @firmwares, split ' ', "r128/"} + # case "r8169.ko" {push @firmwares, split ' ', "rtl_nic/"} + # case "tg3.ko" {push @firmwares, split ' ', "tigon/"} + #} } + # copy all the firmwares that we think are required foreach my $firmwareToBeCopied (@firmwares) { - my $source = followLink( - "$self->{'root-path'}/lib/firmware/$self->{'kernel-version'}/$firmwareToBeCopied", $self->{'root-path'} + my $firmwareSource = followLink( + "$self->{'root-path'}/lib/firmware/$firmwareToBeCopied" , + $self->{'root-path'} ); - my $alternative_source = followLink( - "$self->{'root-path'}/lib/firmware/$firmwareToBeCopied", $self->{'root-path'} + my $kernelFWSource = followLink( + "$self->{'root-path'}/lib/firmware/$self->{'kernel-version'}/" . + "$firmwareToBeCopied", $self->{'root-path'} ); - if (-e $source){ - my $target = "$self->{'build-path'}/lib/firmware/$self->{'kernel-version'}/"; - - $self->addCMD("cp -pr --dereference $source $target"); + + if (-e $firmwareSource){ + my $targetDir = dirname("$self->{'build-path'}/lib/firmware/" . + "$firmwareToBeCopied"); + $self->addCMD("mkdir -p $targetDir; \ + cp -pr --dereference $firmwareSource $targetDir"); } else { - vlog(3,"unable to find $source for copying purposes"); + vlog(3,"unable to find $firmwareSource for copying purposes"); } - if (-e $alternative_source){ - my $target = "$self->{'build-path'}/lib/firmware/"; - - $self->addCMD("cp -pr --dereference $alternative_source $target"); + + if (-e $kernelFWSource){ + my $targetDir = dirname("$self->{'build-path'}/lib/firmware/" . + "$self->{'kernel-version'}/$firmwareToBeCopied"); + $self->addCMD("mkdir -p $targetDir; \ + cp -pr --dereference $kernelFWSource $targetDir"); + } else { + vlog(3,"unable to find $kernelFWSource for copying purposes"); } } - + # copy all the modules that we think are required foreach my $moduleToBeCopied (sort keys %modulesToBeCopied) { my $source = followLink( -- cgit v1.2.3-55-g7522