mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-30 23:21:08 +03:00
2b41e68a08
This makes the udev operation completely lockless by storing a file for every node in /dev/.udevdb/* This solved the problem with deadlocking concurrent udev processes waiting for each other to release the file lock under heavy load.
80 lines
2.6 KiB
Plaintext
80 lines
2.6 KiB
Plaintext
HOWTO use udev to manage /dev
|
|
|
|
This document describes one way to get udev working on a Fedora-development
|
|
machine to manage /dev. This procedure may be used to get udev to manage
|
|
/dev on other distros, if you modify some of the steps.
|
|
|
|
This will only work if you use a 2.6 based kernel, preferably the most
|
|
recent one. This does not prevent your machine from using a 2.4
|
|
kernel, if you boot into one, udev will not run and your old /dev will
|
|
be present with no changes needed.
|
|
|
|
|
|
NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
|
This is completely unsupported. Attempting to do this may cause your
|
|
machine to be unable to boot properly. USE AT YOUR OWN RISK. Always
|
|
have a rescue disk or CD handy to allow you to fix up any errors that
|
|
may occur.
|
|
NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
|
|
|
|
|
- Build and install udev as specified in the README that comes with
|
|
udev. I recommend using the following build options to get the
|
|
smallest possible binaries:
|
|
make USE_KLIBC=true USE_LOG=false DEBUG=false
|
|
|
|
- disable udev from the boot process by running:
|
|
chkconfig udev off
|
|
or
|
|
chkconfig --del udev
|
|
as root.
|
|
|
|
- place the start_udev script somewhere that is accessible by your
|
|
initscripts. I placed it into /etc/rc.d with the following command:
|
|
copy extras/start_udev /etc/rc.d/
|
|
|
|
- modify the rc.sysinit script to call the start_udev script as one of
|
|
the first things that it does, but after /proc and /sys are mounted.
|
|
I did this with the latest Fedora startup scripts with the patch at
|
|
the end of this file.
|
|
|
|
- make sure the /etc/udev/udev.conf file lists the udev_root as "/dev/"
|
|
and the udev_db as "/dev/.udevdb". It should contain the
|
|
following lines in order to work properly.
|
|
udev_root="/dev/"
|
|
udev_db="/dev/.udevdb"
|
|
|
|
- reboot into a 2.6 kernel and watch udev create all of the initial
|
|
device nodes in /dev
|
|
|
|
|
|
If anyone has any problems with this, please let me, and the
|
|
linux-hotplug-devel@lists.sourceforge.net mailing list know.
|
|
|
|
A big thanks go out to the Gentoo developers for showing me that this is
|
|
possible to do.
|
|
|
|
Greg Kroah-Hartman
|
|
<greg@kroah.com>
|
|
|
|
|
|
----------------------------------
|
|
Patch to modify rc.sysinit to call udev at the beginning of the boot
|
|
process:
|
|
|
|
|
|
--- /etc/rc.sysinit.orig 2004-02-17 11:45:17.000000000 -0800
|
|
+++ /etc/rc.sysinit 2004-02-17 13:28:33.000000000 -0800
|
|
@@ -32,6 +32,9 @@
|
|
|
|
. /etc/init.d/functions
|
|
|
|
+# start udev to populate /dev
|
|
+/etc/rc.d/start_udev
|
|
+
|
|
if [ "$HOSTTYPE" != "s390" -a "$HOSTTYPE" != "s390x" ]; then
|
|
last=0
|
|
for i in `LC_ALL=C grep '^[0-9].*respawn:/sbin/mingetty' /etc/inittab | sed 's/^.* tty\([0-9][0-9]*\).*/\1/g'`; do
|
|
|
|
|