Parameter für initrd Module festlegen funktioniert mit der 9.3 nicht mehr wie mit der 9.0
Hallo, ich habe in meinem Rechner noch einen alten SCSI Kontroller (Modul tmscsim, DC390) mit ebenso antiquierten Platten dran und einem Bandlaufwerk von dem ich mich nicht trennen kann. Ich kann diesen Kontroller nicht mit den Default Einstellungen betreiben, sonst gibt es beim booten Timeout Fehler und die Geräte werden nicht bekannt. Durch Experimentieren habe ich eine Satz von Parametern für das Modul ausfindig gemacht, die einen störungsfreien Betrieb ermöglichen. Die Parameter sind in der Form alias scsi_hostadapter tmscsim options tmscsim tmscsim=7,1,9,47,2,10 in der modprobe.conf.local eingetragen. wenn ich das Modul nicht mit in die initrd einbinde und per Hand via modprobe tmscsim lade, dann ist alles ok und die angegebenen Parameter werden benutzt. Will ich jedoch eine initrd erstellen, dann erhalten ich das: daolin:/home/js # mkinitrd Driver modules: kernel/drivers/scsi/scsi_mod.ko kernel/drivers/scsi/sd_mod.ko kernel/drivers/ide/ide-core.ko kernel/drivers/ide/pci/sis5513.ko kernel/drivers/scsi/tmscsim.ko tmscsim=7,1,9,47,2,10 Module tmscsim=7,1,9,47,2,10 not found. kernel/drivers/md/dm-mod.ko kernel/drivers/md/dm-snapshot.ko kernel/drivers/ide/ide-disk.ko kernel/drivers/cdrom/cdrom.ko kernel/drivers/ide/ide-cd.ko irgendwie werden die Parameter vom initrd Skript also falsch ausgewertet. Wie mache ich das korrekt mit der 9.3? Bei der 9.0 hat das noch funktioniert. Mfg Jörg
Am Dienstag, 4. Oktober 2005 21:24 schrieb Jörg Spilker: Ich habe den Fehler mittlerweise eingrenzen können. Verantwortlich ist die Funktion resolve_modules bzw. die command substitution. resolve_modules() { local module for module in "$@"; do local with_modprobe_conf module=${module%.o} # strip trailing ".o" just in case. module=${module%.ko} # strip trailing ".ko" just in case. if [ -e /etc/modprobe.conf ]; then with_modprobe_conf="-C /etc/modprobe.conf" fi module_list=$(/sbin/modprobe $with_modprobe_conf \ --ignore-install \ --show-depends $module 2> /dev/null \ | sed -ne 's:.*insmod /\?::p' ) if [ -z "$module_list" ]; then oops 7 "Cannot determine dependencies of module $module." \ "Is modules.dep up to date?" fi echo "$module_list" done \ | awk ' # filter duplicates: we must not reorder modules here! $1 in seen { next } { seen[$1]=1 print } ' rm -f $temp } oops() { exit_code=$1 shift echo "$@" >&2 } resolve_modules $1 <<1 resolved_modules=$(resolve_modules $1) <<2 echo $resolved_modules wenn ich folgendes CodeFragment aufrufe, so erzeugt Zeile <<1 die Ausgabe von 2 Zeilen, eine mit dem scsi_mod.ko Modul, die andere mit dem tmscsim.ko Modul mit angehängten Parametern. Soweit ok. Die Zuweisung des Ergebnisses an resolved_modules via command substitution frißt jedoch das Linefeed auf (das ist auch so in der bash doku beschrieben) sodaß nun beide Module in einer Zeile stehen. Damit kommen dann die nachfolgenden Skripte nicht zurecht und betrachten die Parameter als eigenständiges Modul. Nur: was tun?? Mfg Jörg
Hallo, Am Wed, 05 Oct 2005, Jörg Spilker schrieb:
Am Dienstag, 4. Oktober 2005 21:24 schrieb Jörg Spilker:
Ich habe den Fehler mittlerweise eingrenzen können. Verantwortlich ist die Funktion resolve_modules bzw. die command substitution.
resolve_modules $1 <<1 resolved_modules=$(resolve_modules $1) <<2
Pack das $() in "". resolved_modules="$(resolve_modules $1)" Das war beim mkinitrd der SuSE 9.1 noch so. Zur Not kannst du das linuxrc-Script in der initrd per Hand aendern. -dnh -- 149: Telefon Gerät, das die Person am anderen Ende der Leitung bescheuert macht. (Funktioniert in beide Richtungen)
Am Mittwoch, 5. Oktober 2005 13:17 schrieb David Haller: Hallo David,
Ich habe den Fehler mittlerweise eingrenzen können. Verantwortlich ist die Funktion resolve_modules bzw. die command substitution.
resolve_modules $1 <<1 resolved_modules=$(resolve_modules $1) <<2
Pack das $() in "".
resolved_modules="$(resolve_modules $1)"
Das war beim mkinitrd der SuSE 9.1 noch so.
Zur Not kannst du das linuxrc-Script in der initrd per Hand aendern.
also die "" bringen nichts. Auch statt $(command) die alte Syntax `command` hilft nicht weiter. Wie editiere ich denn die initrd per Hand? Das ist doch ein Binärfile, oder? Mfg Jörg
Hallo, Am Sat, 08 Oct 2005, Jörg Spilker schrieb:
Am Mittwoch, 5. Oktober 2005 13:17 schrieb David Haller:
Ich habe den Fehler mittlerweise eingrenzen können. Verantwortlich ist die Funktion resolve_modules bzw. die command substitution.
resolve_modules $1 <<1 resolved_modules=$(resolve_modules $1) <<2
Pack das $() in "". [..] Zur Not kannst du das linuxrc-Script in der initrd per Hand aendern.
also die "" bringen nichts. Auch statt $(command) die alte Syntax `command` hilft nicht weiter.
Hm. Komisch, das sollte die Zeilenumbrueche schuetzen. Hast du auch mal resolved_modules="`resolve_modules \"$1\"`" getestet?
Wie editiere ich denn die initrd per Hand? Das ist doch ein Binärfile, oder?
Sei KERNELVER die Version deines Kernels, sollte `uname -r` entsprechen. 1. Backup der initrd: cp /boot/initrd-KERNELVER /boot/initrd-KERNELVER.orig 2. initrd dekomprimieren: gunzip -c /boot/initrd-KERNELVER > /tmp/initrd.ext2 3. initrd mounten: mount -t ext2 -o loop /tmp/initrd.ext2 /mnt/ 4. linuxrc in der initrd editieren: $EDITOR /mnt/linuxrc 5. sync 6. umount /mnt/ 7. gzip -c /tmp/initrd.ext2 > /boot/initrd-KERNELVER 8. rm /tmp/initrd.ext2 Beim gunzip/gzip bitte sehr aufpassen mit dem Umleiten der Ausgabe, damit du nicht die flasche Datei ueberschreibst. HTH, -dnh -- 62: professionelles Arbeiten Tetris ist nicht auf der Festplatte (Sebastian Kokemohr-Schmidt)
Am Samstag, 8. Oktober 2005 11:06 schrieb David Haller: Hallo David,
Hm. Komisch, das sollte die Zeilenumbrueche schuetzen. Hast du auch mal resolved_modules="`resolve_modules \"$1\"`" getestet?
auch das zeigt keine Änderung. Die Zeilenumbrüche werden weggefressen. Vielleicht forsche in nochmal in den Tiefen der bash Dokumentation, wie sich das evtl. ausschalten läßt.
3. initrd mounten: mount -t ext2 -o loop /tmp/initrd.ext2 /mnt/
offensichtlich war die initrd wohl mal ein ext2 Filesystem, jetzt ist es ein cpio Archiv. Ich habe der "init" Datei die Parameter für das tmscsim Modul ergänzt und die initrd neu erstellt. Wenn der nächste Reboot ansteht, werde ich sehen ob es wie gewünscht funktioniert. Mfg Jörg
Hallo, Am Sun, 09 Oct 2005, Jörg Spilker schrieb:
Am Samstag, 8. Oktober 2005 11:06 schrieb David Haller:
Hm. Komisch, das sollte die Zeilenumbrueche schuetzen. Hast du auch mal resolved_modules="`resolve_modules \"$1\"`" getestet?
auch das zeigt keine Änderung. Die Zeilenumbrüche werden weggefressen. Vielleicht forsche in nochmal in den Tiefen der bash Dokumentation, wie sich das evtl. ausschalten läßt.
Komisch das. Aeh, kannst du mir das script mal mailen, vermutlich wird werden die Umbrueche _in_ resolve_modules gefuttert.
3. initrd mounten: mount -t ext2 -o loop /tmp/initrd.ext2 /mnt/
offensichtlich war die initrd wohl mal ein ext2 Filesystem, jetzt ist es ein cpio Archiv.
Ah ja, kann sein. Generell hilft da einfach mit file auf die initrd loszugehen und komprimiertes dekomprimieren, Archive auspacken und Images per loop mounten. Ggfs. sollte man parallel dazu notieren, was man macht, damit man fuer den Rueckweg noch weiss, wie man vorzugehen hat ;) -dnh -- Falls hier aber die Realität gemeint sein soll, so muss Ich sagen "Nichts ist so real wie die Wirklichkeit. Auch wenn manche das nicht wahr haben wollen." [Woko° in dag°]
participants (2)
-
David Haller
-
Jörg Spilker