2009/1/15 Matt Sealey <matt@genesi-usa.com>:
udev captures the modules "coldplugged" by the system (usually USB and Firewire) and this gets added to the list in INITRD_MODULES for the initrd. INITRD_MODULES is basically the list of modules that *has* to be loaded to get to mount the disk that udev is on (plus anything else you care to add). This is usually exactly your libata driver and your root filesystem module (on my system, "pata_mpc52xx xfs", on my Pegasos, "pata_via", on my VirtualBox systems, "ahci")
That was not the case. INITRD_MODULES was not containing the expected information
It doesn't get updated when you run mkinitrd - what I meant was, INITRD_MODULES is taken, then udev is poked to give up a list of loaded modules, which gets combined and passed to mkinitrd. INITRD_MODULES is fairly static as far as I have ever seen.. nothing has ever automatically updated it. The sole purpose of INITRD_MODULES is to load in drivers which CANNOT be coldplugged by udev because they have to be loaded to get to udev in the first place. Since udev can't know about them it can't be relied on to suggest them.
There is no way to stop udev from doing this except to blacklist the driver from loading, and then udev won't bother (since it's not loaded at the time of mkinitrd, it will not add it to the list of coldplugged devices).
If a broken driver is still being loaded, brokenmodules= on the kernel command line is your first step.
Didn't work! It didn't work with Live CD installs either. broken_modules=pata_pdc202xx_old does work with Net Install and DVD install methods.
brokenmodules=pdc202xx_old, remove it from INITRD_MODULES if it's there, and blacklist it in /etc/modprobe.d/blacklist, then rebewt.. that's the real failsafe way (that way it can never be loaded from the initrd, it will never be put in the initrd next time it's built
I might be able to check that tomorrow, by disabling a pata_ module, despite being non-broken. It would appear to be a better workround if it does work. As I was including a kernel patch, for another problem on another system, I actually compiled in the driver I wanted, and left out the broken one, initially. Then later I confirmed the recommended workround via re-install with 11.1 after release.
because neither the initrd init nor udev will load it, and if you ever try, modprobe is going to whine at you). Now make a new initrd and check it and rebewt again. Once you have a working initrd without it, and once you have it blacklisted from modprobe, you can remove the brokenmodules= line.
It would be nicer to consolidate the stuff, that's for sure. There are no such problems with this stuff on FreeBSD etc. where the development is far more strict around kernel development.
The problem I had, was the lack of visibility into the process. In past, at some point during SuSE 7.x (I think) I was using a patched mkinitrd, until different changes were incorporated which supported my requirements. I couldn't see where in script INITRD_MODULES was used, and that was my first port of call, as INITRD_MODULES was the place to add modules for RAID and/or LVM support in the past. Being able to mount the initrd and dig around, would I think have helped the situation. -- To unsubscribe, e-mail: opensuse-kernel+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-kernel+help@opensuse.org