Why isn't a new file in /etc/modprobe.d used?

I am a newbie to openSUSE, today is my first day. I have a lot of experience with Debian and Arch (and several other distros), though.

I need to add an option for my radeon driver. I created a new file in /etc/modprobe.d named 50-radeon.conf and put my option spec in it. I rebooted, and my option had not taken effect.

So, I poked around for a while and added it to 99-local.conf, rebooted, and it worked.

Why did openSUSE 13.1 not use it from file 50-radeon.conf?


I don’t really know the answer. However …

The radeon driver is probably being loaded from the “initrd”, before “/etc/modprobe.d” is accessible. I’m not sure whether running “mkinitrd” would fix that. Or perhaps you have to set “NO_KMS_IN_INITRD” to “yes” in “/etc/sysconfig/kernel” (you can use the Yast sysconfig editor for this). That would keep the driver out of the “initrd”, so it would be loaded later, by which time “/etc/modprobe.d” is accessible.

Well, note that I said I added the same option statement to /etc/modprobe.d/99-local.conf and it does work. My question is, why does it work there but not in file 50-radeon.conf ?


Is it possible that you installed some updates between the two?

Looking inside the “initrd” file, I see that “/etc/modprobe.d/*” files are there. Perhaps an update caused the “initrd” to be rebuilt, and that happened just after adding the entry to “99-local.conf”.

To list the “initrd” content, I did

zcat initrd | cpio -t | less

and then I scrolled through the “less” browser output to find “modprobe” entries.

Yes, that is possible. I had done a fresh install Saturday evening, and while I was trying to configure my system on Sunday, it was installing updates every time I turned around. But on Debian, it seems to me that simply rebooting is enough to apply changes from these files.

I’m just a little confused, that’s all. My system is working well. I like to understand why certain things are the way they are.

Thank you,

As nrickert alludes to, the radeon module is typically loaded from the initrd … and at that point in time, there is no normal / (read “root”) file system, only that provided by way of the initrd … which means that there is no way in hell that any distro could know anything about the modprobe configurations contained in /etc/modprobe.d/* … which in turn means that,** in the case of a module that is being loaded from the initrd**, and as nrickert points out, if you actually needed to use specific module load options, then they would also have to be contained in the initrd. Proof:

# cd /boot && lsinitrd initrd | grep -e etc/modprobe.d -e radeon

Otherwise, for a non crucial module (say, like that needed for a capture card) that gets loaded later on by the kernel (either during a later point in the boot process or later, post boot, on demand … i.e. after the normal root file system is mounted), then simple changes to the /etc/modprobe.d/ files will be picked up on the next boot or when manually invoked

You can also convince yourself of this fact (again, provided you’re having the radeon module load from the initrd) by making a radeon option change to either of those two files (50-radeon or 99-local) without rebuilding the initrd and witness how effective your changes are or aren’t.

(Though, once booted up, if you were to then unload the radeon module and then manually reinsert it, you’d find that your changes would work!)