• K
    driver core: add devname module aliases to allow module on-demand auto-loading · 578454ff
    Kay Sievers 提交于
    This adds:
      alias: devname:<name>
    to some common kernel modules, which will allow the on-demand loading
    of the kernel module when the device node is accessed.
    
    Ideally all these modules would be compiled-in, but distros seems too
    much in love with their modularization that we need to cover the common
    cases with this new facility. It will allow us to remove a bunch of pretty
    useless init scripts and modprobes from init scripts.
    
    The static device node aliases will be carried in the module itself. The
    program depmod will extract this information to a file in the module directory:
      $ cat /lib/modules/2.6.34-00650-g537b60d1-dirty/modules.devname
      # Device nodes to trigger on-demand module loading.
      microcode cpu/microcode c10:184
      fuse fuse c10:229
      ppp_generic ppp c108:0
      tun net/tun c10:200
      dm_mod mapper/control c10:235
    
    Udev will pick up the depmod created file on startup and create all the
    static device nodes which the kernel modules specify, so that these modules
    get automatically loaded when the device node is accessed:
      $ /sbin/udevd --debug
      ...
      static_dev_create_from_modules: mknod '/dev/cpu/microcode' c10:184
      static_dev_create_from_modules: mknod '/dev/fuse' c10:229
      static_dev_create_from_modules: mknod '/dev/ppp' c108:0
      static_dev_create_from_modules: mknod '/dev/net/tun' c10:200
      static_dev_create_from_modules: mknod '/dev/mapper/control' c10:235
      udev_rules_apply_static_dev_perms: chmod '/dev/net/tun' 0666
      udev_rules_apply_static_dev_perms: chmod '/dev/fuse' 0666
    
    A few device nodes are switched to statically allocated numbers, to allow
    the static nodes to work. This might also useful for systems which still run
    a plain static /dev, which is completely unsafe to use with any dynamic minor
    numbers.
    
    Note:
    The devname aliases must be limited to the *common* and *single*instance*
    device nodes, like the misc devices, and never be used for conceptually limited
    systems like the loop devices, which should rather get fixed properly and get a
    control node for losetup to talk to, instead of creating a random number of
    device nodes in advance, regardless if they are ever used.
    
    This facility is to hide the mess distros are creating with too modualized
    kernels, and just to hide that these modules are not compiled-in, and not to
    paper-over broken concepts. Thanks! :)
    
    Cc: Greg Kroah-Hartman <gregkh@suse.de>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Miklos Szeredi <miklos@szeredi.hu>
    Cc: Chris Mason <chris.mason@oracle.com>
    Cc: Alasdair G Kergon <agk@redhat.com>
    Cc: Tigran Aivazian <tigran@aivazian.fsnet.co.uk>
    Cc: Ian Kent <raven@themaw.net>
    Signed-Off-By: NKay Sievers <kay.sievers@vrfy.org>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    578454ff
dev.c 29.3 KB