浏览代码

Fix the udev_retry script, and add an explanation
for how to configure it.


git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@9614 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

Bruce Dubbs 14 年之前
父节点
当前提交
2a1c1e03a4
共有 7 个文件被更改,包括 68 次插入29 次删除
  1. 8 1
      bootscripts/ChangeLog
  2. 3 0
      bootscripts/Makefile
  3. 9 2
      bootscripts/lfs/init.d/udev_retry
  4. 10 0
      chapter01/changelog.xml
  5. 35 23
      chapter07/udev.xml
  6. 2 2
      general.ent
  7. 1 1
      packages.ent

+ 8 - 1
bootscripts/ChangeLog

@@ -1,4 +1,11 @@
-2100-09-18
+2011-10-06  Bryan Kadzban <bryan@linuxfromscratch.org>
+
+   * Add configuration for udev_retry, and remove --type=failed (which does
+     not work with recent udev versions anyway, since no events can possibly
+     trigger it).  Start with just the "rtc" subsystem.  BLFS should eventually
+     add "sound" to this file, and perhaps others.
+
+2011-09-18
    * Review and update of changes made in previous change.
    ** Rename /etc/sysconfig/init_params to /etc/sysconfig/rc.site.
    ** Move network services to /lib/services.

+ 3 - 0
bootscripts/Makefile

@@ -60,6 +60,9 @@ files: create-dirs
 	if [ ! -f ${EXTDIR}/sysconfig/modules     ]; then \
           install -m ${CONFMODE} lfs/sysconfig/modules     ${EXTDIR}/sysconfig/ ;\
         fi
+	if [ ! -f ${EXTDIR}/sysconfig/udev_retry  ]; then \
+          install -m ${CONFMODE} lfs/sysconfig/udev_retry  ${EXTDIR}/sysconfig/ ;\
+        fi
 	if [ ! -f ${EXTDIR}/sysconfig/rc          ]; then \
           install -m ${CONFMODE} lfs/sysconfig/rc          ${EXTDIR}/sysconfig/ ;\
         fi

+ 9 - 2
bootscripts/lfs/init.d/udev_retry

@@ -7,6 +7,7 @@
 # Authors     : Alexander E. Patrakov
 #               DJ Lucas - dj@linuxfromscratch.org
 # Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
+#               Bryan Kadzban - 
 #
 # Version     : LFS 7.0
 #
@@ -44,8 +45,14 @@ case "${1}" in
          rm -f $file
       done
 
-      # Re-trigger the failed uevents in hope they will succeed now
-      /sbin/udevadm trigger --type=failed --action=add
+      # Re-trigger the uevents that may have failed, 
+      # in hope they will succeed now
+      /bin/sed -e 's/#.*$//' /etc/sysconfig/udev_retry | /bin/grep -v '^$' | \
+      while read line ; do
+         for subsystem in $line ; do
+            /sbin/udevadm trigger --subsystem-match=$subsystem --action=add
+         done
+      done
 
       # Now wait for udevd to process the uevents we triggered
       /sbin/udevadm settle

+ 10 - 0
chapter01/changelog.xml

@@ -36,6 +36,16 @@
     </listitem>
 
 -->
+    <listitem>
+      <para>2011-10-06</para>
+      <itemizedlist>
+        <listitem>
+          <para>[bryan] - Fix the udev_retry script, and add an explanation
+          for how to configure it.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
     <listitem>
       <para>2011-10-05</para>
       <itemizedlist>

+ 35 - 23
chapter07/udev.xml

@@ -93,40 +93,52 @@
     </sect3>
 
     <sect3>
-      <title>Udev Bootscript</title>
-
-      <para>The <command>/etc/rc.d/init.d/udev</command> initscript takes care of creating
-      device nodes when Linux is booted. The script unsets the uevent handler
-      from the default of <command>/sbin/hotplug</command>.  This is done
-      because the kernel no longer needs to call out to an external binary.
-      Instead <command>udevd</command> will listen on a netlink socket for
-      uevents that the kernel raises. Next, the bootscript copies any static
-      device nodes that exist in <filename
+      <title>Udev Bootscripts</title>
+
+      <para>The <command>/etc/rc.d/init.d/udev</command> initscript takes care
+      of creating device nodes when Linux is booted. The script unsets the
+      uevent handler from the default of <command>/sbin/hotplug</command>.
+      This is done because the kernel no longer needs to call out to an
+      external binary.  Instead <command>udevd</command> will listen on a
+      netlink socket for uevents that the kernel raises. Next, the bootscript
+      copies any static device nodes that exist in <filename
       class="directory">/lib/udev/devices</filename> to <filename
-      class="directory">/dev</filename>. This is necessary because some devices,
-      directories, and symlinks are needed before the dynamic device handling
-      processes are available during the early stages of booting a system, or
-      are required by <command>udevd</command> itself.  Creating static device
-      nodes in <filename class="directory">/lib/udev/devices</filename> also
-      provides an easy workaround for devices that are not supported by the
-      dynamic device handling infrastructure. The bootscript then starts the
-      Udev daemon, <command>udevd</command>, which will act on any uevents it
-      receives. Finally, the bootscript forces the kernel to replay uevents for
-      any devices that have already been registered and then waits for
+      class="directory">/dev</filename>. This is necessary because some
+      devices, directories, and symlinks are needed before the dynamic device
+      handling processes are available during the early stages of booting a
+      system, or are required by <command>udevd</command> itself.  Creating
+      static device nodes in <filename
+      class="directory">/lib/udev/devices</filename> also provides an easy
+      workaround for devices that are not supported by the dynamic device
+      handling infrastructure. The bootscript then starts the Udev daemon,
+      <command>udevd</command>, which will act on any uevents it receives.
+      Finally, the bootscript forces the kernel to replay uevents for any
+      devices that have already been registered and then waits for
       <command>udevd</command> to handle them.</para>
 
+      <para>The <command>/etc/rc.d/init.d/udev_retry</command> initscript takes
+      care of re-triggering events for subsystems whose rules may rely on
+      filesystems that are not mounted until the <command>mountfs</command>
+      script is run (in particular, /usr and /var may cause this).  This script
+      runs after the <command>mountfs</command> script, so those rules (if
+      re-triggered) should succeed the second time around.  It is configured
+      from the <filename>/etc/sysconfig/udev_retry</filename> file; any words
+      in this file other than comments are considered subsystem names to
+      trigger at retry time.  (To find the subsystem of a device, use
+      <command>udevadm info --attribute-walk</command>.)</para>
+
     </sect3>
 
     <sect3>
       <title>Device Node Creation</title>
 
-      <para>To obtain the right major and minor number for a device, Udev relies
-      on the information provided by <systemitem
+      <para>To obtain the right major and minor number for a device, Udev
+      relies on the information provided by <systemitem
       class="filesystem">sysfs</systemitem> in <filename
       class="directory">/sys</filename>.  For example,
       <filename>/sys/class/tty/vcs/dev</filename> contains the string
-      <quote>7:0</quote>. This string is used by <command>udevd</command>
-      to create a device node with major number <emphasis>7</emphasis> and minor
+      <quote>7:0</quote>. This string is used by <command>udevd</command> to
+      create a device node with major number <emphasis>7</emphasis> and minor
       <emphasis>0</emphasis>. The names and permissions of the nodes created
       under the <filename class="directory">/dev</filename> directory are
       determined by rules specified in the files within the <filename

+ 2 - 2
general.ent

@@ -1,5 +1,5 @@
-<!ENTITY version "SVN-20111005">
-<!ENTITY releasedate "Oc5 5, 2011">
+<!ENTITY version "SVN-20111006">
+<!ENTITY releasedate "Oct 6, 2011">
 <!ENTITY copyrightdate "1999-2011"><!-- jhalfs needs a literal dash, not &ndash; -->
 <!ENTITY milestone "7.0">
 <!ENTITY generic-version "development"> <!-- Use "development", "testing", or "x.y[-pre{x}]" -->

+ 1 - 1
packages.ent

@@ -298,7 +298,7 @@
 <!ENTITY less-ch6-du "3.5 MB">
 <!ENTITY less-ch6-sbu "less than 0.1 SBU">
 
-<!ENTITY lfs-bootscripts-version "20110926">                 <!-- Scripts depend on this format -->
+<!ENTITY lfs-bootscripts-version "20111006">                 <!-- Scripts depend on this format -->
 <!ENTITY lfs-bootscripts-size "BOOTSCRIPTS-SIZE KB">         <!-- Updated in Makefile -->
 <!ENTITY lfs-bootscripts-url "&downloads-root;lfs-bootscripts-&lfs-bootscripts-version;.tar.bz2">
 <!ENTITY lfs-bootscripts-md5 "BOOTSCRIPTS-MD5SUM">           <!-- Updated in Makefile -->