On 05/18/2014 04:05 AM, Jonathan Callen wrote: > On 05/15/2014 03:50 PM, Mick wrote: > > On Thursday 15 May 2014 14:24:57 Alexander Kapshuk wrote: > >> On 05/15/2014 11:39 AM, Stroller wrote: > >>> On Wed, 14 May 2014, at 12:36 pm, Alexander Kapshuk > > <alexander.kaps...@gmail.com> wrote: > >>>>>> ? > >>>>>> If you like to check if RTL8192CE is enabled in your kernel's > .config > >>>>>> file. If it isn't, you probably want to compile it as a module, and > >>>>>> then add rtl8192ce to /etc/conf.d/modules as well. > >>>>> > >>>>> Am pretty sure there's no need to add this one to > /etc/conf.d/modules - > >>>>> IME it'll just be found and loaded automagically by the kernel. > >>>> > >>>> Thanks for pointing that out. I wasn't aware of that. As I > mentioned in > >>>> my previous post, I do not use genkernel myself. > >>> > >>> Neither do I - for this reason I found it a little frustrating > trying to > >>> help in a recent thread, myself. > >>> > >>> However, I'm pretty sure that loadable kernel modules behave the same > >>> whether your kernel is built "by hand" or by genkernel - if you have > >>> modules listed in /etc/conf.d/modules then I have to wonder if you > >>> really need them there. > >>> > >>> I haven't used that file for years, and I prefer to compile > everything as > >>> a module, too. > >>> > >>> Stroller. > >> > >> That's interesting. I wasn't aware of that either. > >> > >> So far, I've just been following the instructions given in the > handbook, > >> section 7.d, which do recommend explicitly specifying the kernel > modules > >> to be loaded at boot time in /etc/conf.d/modules. > >> > >> How does the kernel know then what modules to load at boot time, if it > >> doesn't rely on /etc/conf.d/modules to supply the list of modules to be > >> loaded? > >> > >> Does it use udev, or some other mechanism for that? > >> > >> Thanks. > > > I understand it is udev magic which probes the hardware and it > fetches the > > corresponding module from the kernel, as long as it has been compiled. > > Incidentally, I noticed that I now have this running on my system: > > > /lib/systemd/systemd-udevd --daemon > > > The actual udev magic in question is this line from > /lib/udev/rules.d/80-drivers.rules: > > ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}" > > When a new device is seen by the kernel (which includes cold-plug on > boot), udev calls the equivalent of `modprobe ${MODALIAS}` (in reality, > the actual command is now just a call to libkmod, which is linked into > udev itself), where ${MODALIAS} is the contents of the file "modalias" > under the /sys directory describing that device. This file may look > something like this (actual example from my machine): > > pci:v00008086d00000416sv00001558sd00007104bc03sc00i00 > > This information (following the the initial "pci:", indicating that this > is a PCI device), can be split into multiple identifier/number pairs, > like so: > > v 00008086 > d 00000416 > sv 00001558 > sd 00007104 > bc 03 > sc 00 > i 00 > > In this case I have vendor "00008086" (Intel Corporation), device > "00000416" (4th Gen Core Processor Integrated Graphics Controller), > subsystem vendor "00001558" (CLEVO/KAPOK Computer), subsystem device > "00007104" (not listed in pci.ids, sorry), base class "03" (Display > controller), sub class "00" (VGA compatible controller), and programming > interface "00" (VGA controller). > > This information is then used to look up the module in > /lib/modules/$(uname -r)/modules.alias (actually, modules.alias.bin is > used if present to speed up the lookup). This lookup finds the line: > > alias pci:v00008086d00000416sv*sd*bc03sc*i* i915 > > As my card matches the glob in the second field in that line, the module > listed in the third field is loaded to handle the card. The actual > modules.alias file is generated by depmod when the module is installed > by reading the information from the module itself. > > Thanks for the explanation.
Just to double check I understood it correctly, there's no need to put the list of kernel modules into /etc/conf.d/modules any longer, because udev is aware of the modules that have been built and will load them by consulting /lib/modules/$(uname -r)/modules.alias. Is that correct? Thanks.