<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
        <head>
                <title>Fedora Project, sponsored by Red Hat</title>
                <meta http-equiv="Content-Type" content="text/html">
                <link rel="stylesheet" type="text/css" media="print" href="/css/print.css">
                <style type="text/css" media="screen">
                        @import url("/css/layout.css");
                        @import url("/css/content.css");
                        @import url("/css/docbook.css");
                </style>
                <meta name="MSSmartTagsPreventParsing" content="TRUE">
                <link rel="shortcut icon" href="/images/favicon.ico">
                <link rel="icon" href="/images/favicon.ico">
        </head>

        <body>
                <!-- header BEGIN -->
                <div id="fedora-header">
                        <div id="fedora-header-logo">
                                <a href="/"><img src="/images/header-fedora_logo.png" alt="Fedora Project"></a>
                        </div>

                        <div id="fedora-header-items">
                                <span class="fedora-header-icon">
                                        <a href="/download/"><img src="/images/header-download.png" alt=" ">Download</a>
                                        <a href="/projects/"><img src="/images/header-projects.png" alt=" ">Projects</a>
                                        <a href="/about/faq/"><img src="/images/header-faq.png" alt=" ">FAQ</a></span>
                        </div>
                </div>

                <div id="fedora-nav"></div>
                <!-- header END -->
                
                <!-- leftside BEGIN -->
                <div id="fedora-side-left">
                <div id="fedora-side-nav-label">Site Navigation:</div>    <ul id="fedora-side-nav">
                                <li><a href="/">Home</a></li>
                                <li><a href="/download/">Download</a></li>
                                <li><a href="/docs/">Docs</a>       <ul>
                                        <li><a href="/docs/release-notes/">Release Notes</a></li>
                                        <li><a href="/docs/jargon-buster/">Jargon Buster</a></li>
                                        <li><a href="/docs/selinux-faq/">SELinux FAQ</a></li>
                                        <li><a href="/docs/updates/">Keeping Up to Date</a></li>
                                        <li><a href="/docs/package-list/">Package List</a></li>
                                </ul></li>
                                <li><a href="/projects/">Projects</a></li>
                                <li><a href="/participate/">Participate</a></li>
                                <li><a href="/about/">About</a></li>
                        </ul>
                </div>

                <!-- leftside END -->

                <!-- content BEGIN -->
                <div id="fedora-middle-two">
                        <div class="fedora-corner-tr"> </div>
                        <div class="fedora-corner-tl"> </div>
                        <div id="fedora-content">
                                                <!-- content BEGIN -->
                <h3>FC3 users please update to at least udev-039-10.FC3.1 after installation</h3>
                <p>
                Due to debugging code left accidently in the FC3 udev package,
                SIGCHLD signals are blocked in udev, which prevents getting the proper
                exit status in udev.rules. This means no cdrom symlinks are created
                and pam_console does not apply desktop user ownerships to any cdrom
                devices.
                </p><p>
                All users are urged to upgrade to this version after the installation
                of Fedora Core 3.
                </p><p>
                This update can be downloaded from <a href="http://download.fedora.redhat.com/pub/fedora/linux/core/updates/3/">here</a>.
<pre class="screen">
fce34e8e8ab6a54d07c46d2626529e22  SRPMS/udev-039-10.FC3.1.src.rpm
e86fc1ec12edddd4f7ca68bfebe956cc  x86_64/udev-039-10.FC3.1.x86_64.rpm
8b69da0b3adb624a11fc8185f98bada6  x86_64/debug/udev-debuginfo-039-10.FC3.1.x86_64.rpm
7df95371172d0b52452df76612cf674d  i386/udev-039-10.FC3.1.i386.rpm
9897ebb971ab099de04c9ceb1ad31b57  i386/debug/udev-debuginfo-039-10.FC3.1.i386.rpm
</pre>
                This update can also be installed with the Update Agent; you can
                launch the Update Agent with the 'up2date' command.
                </p>
                <h1>Udev on Fedora</h1>
                <h2>by Harald Hoyer</h2>
                <p>
                This document tries to reveal the secrets of udev and how it works on Fedora.
                </p>
                <p>
                udev was developed by Greg  Kroah-Hartman  <greg@kroah.com>  with  much
                help  from  Dan  Stekloff <dsteklof@us.ibm.com>, Kay Sievers <kay.sievers@vrfy.org>,
                 and many others.
                </p>
                <p>
                The <a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">udev homepage</a> and the
                Linux-hotplug-devel mailing list  <a href="https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel">https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel</a> are the main development sources.               
                </p><p>
                </p>

                <h2>What Does Udev Do?</h2>
                <p>
                udev  provides a dynamic device directory containing only the files for
                actually present devices. It creates or removes device node files  usually
                located in the <tt class="filename">/dev/</tt> directory, or it renames network interfaces.
                </p><p>
                As  part  of the hotplug subsystem, udev is executed if a kernel device
                is added or removed from the system.  On device  creation,  udev  reads
                the  sysfs  directory  of the given device to collect device attributes
                like label, serial number or bus device number.  These  attributes  may
                be  used as keys to determine a unique name for the device.  udev maintains
                a database for devices present on the system.
                On device removal, udev queries its database for the name of the device
                file to be deleted.
                </p><p>
                udev gets called by hotplug, if a module is loaded, and a device is added
                or removed. udev looks in <tt class="filename">/sys/</tt>, if the driver provides a "dev" file, which 
                contains the major and minor number for a device node to communicate with 
                the driver. After looking in the udev rules (in the <tt class="filename">/etc/udev/rules.d/</tt> directory), which 
                specify the device node filename and symlinks, a device node is created 
                in <tt class="filename">/dev/</tt> with the permissions, which are specified in <tt class="filename">/etc/udev/permissions.d/</tt>.
                </p>
                After device node creation, removal, or network device  renaming,  udev
                executes  the  programs  in  the directory tree under <tt class="filename">/etc/dev.d/</tt>.  The
                name of a program must end with the <tt class="filename">.dev</tt> suffix, to be recognized.
                In addition to the hotplug environment variables, DEVNAME  is  exported
                to make the name of the created node or the name the network device is
                renamed to, available to the executed program. The  programs  in  every
                directory  are  sorted  in  lexical  order,  while  the directories are
                searched in the following order:
                <ul>
                <li><tt class="filename">/etc/dev.d/$(DEVNAME)/*.dev</tt></li>
                <li><tt class="filename">/etc/dev.d/$(SUBSYSTEM)/*.dev</tt></li>
                <li><tt class="filename">/etc/dev.d/default/*.dev</tt></li>
                </ul>
                
                <h2>How is Udev Integrated on Fedora?</h2>
                <h3><tt class="command">initrd</tt> / <tt class="command">initfs</tt></h3>
                <p>
                <tt class="command">mkinitrd</tt> copies <tt class="filename">/sbin/udev.static</tt> 
                to the <tt class="command">initrd</tt> <tt class="filename">/sbin/udev</tt> and symlinks it to 
                <tt class="filename">/sbin/udevstart</tt>.
                </p><p>
After the kernel boots, it executes the nash script of the <tt class="command">initrd</tt>. This
mounts a tmpfs filesystem on <tt class="filename">/dev/</tt>. Instead of hotplug <tt class="command">/sbin/udev</tt> is
called in the <tt class="command">initrd</tt> phase. udevstart creates all device nodes for the
devices, which are compiled in the kernel and for the modules, which
are loaded by nash. </p>

<h4>Problems</h4> 

The whole udev and hotplug infrastructure is
not available in <tt class="command">initrd</tt>. Thus no hotplug scripts, udev rules, and
permissions and no <tt class="filename">/etc/dev.d/</tt> scripts are executed for any hotplug
event, which is sent from the kernel. 

<h3><tt class="filename">rc.sysinit</tt></h3>
                <p> First, if SELinux is loaded and enabled,
the context of <tt class="filename">/dev/</tt> is set. <tt class="filename">rc.sysinit</tt> calls <tt class="filename">/sbin/start_udev</tt>.
<tt class="filename">start_udev</tt> mounts a tmpfs filesystem on <tt class="filename">/dev/</tt>, if there is none already
mounted. Then it creates some device nodes, which need module
autoloading, or where there is no kernel module. After that
<tt class="command">/sbin/udevstart</tt> is called again, which simulates the hotplug events in
the <tt class="command">initrd</tt> phase, to apply the whole udev rules and permissions. After
that <tt class="filename">rc.sysinit</tt> parses the ouput of <tt class="filename">/sbin/kmodule</tt> and loads every
module. This should provide device nodes for all hardware found on your
computer. </p>
                <h3>Console User Permissions</h3>
                <p>
<tt class="filename">/etc/dev.d/default/pam_console.dev</tt> is called whenever a device node is
created and calls <tt class="filename">/sbin/pam_console_setowner</tt> with the filename (and an
optional symlink) of the device node. This sets the permissions for
console users like specified in <tt class="filename">/etc/security/console.perms</tt>. </p>
                <h2>Customizing Udev on Fedora</h2>
                <p>
                Read the manpage of udev and udevinfo.
                Please try not to modify the files of RPM packages.
                </p>
                <h3>New Rules</h3>
                <p>
New rules should be placed in a file, which ends in <tt class="filename">.rules</tt> in
<tt class="filename">/etc/udev/rules.d/</tt>. Please do not use <tt class="filename">50-udev.rules</tt>. The supported and
preferred way is to create rules without the "NAME" tag and only
create "SYMLINK"s. </p><p>                
                A nice document describing how to write rules can be found on <a href="http://www.reactivated.net/udevrules.php">http://www.reactivated.net/udevrules.php</a>.            
                </p>

<h3>Permissions</h3>
New permissions should be placed in a file, which ends in
<tt class="filename">.permissions</tt> in <tt class="filename">/etc/udev/permissions.d/</tt>. Please do not use
<tt class="filename">50-udev.permissions</tt>. 

<h3>But I Really Want My Device Node!</h3>
                <p>
                Put them in <tt class="filename">/etc/udev/devices/</tt>, and they will get copied to <tt class="filename">/dev/</tt>. <a href="https://bugzilla.redhat.com/bugzilla">File a bugzilla entry</a>, if you think that should be done per default.
                </p>

                <h2>Updating to udev Without <tt class="filename">/dev/</tt></h2>
                <p>
                The steps to upgrade without Anaconda or a rescue CD are (NOT recommended):
                </p>

                <ul>
                <li>start from a kernel-2.6
                </li><li>Make sure <tt class="filename">/sys/</tt> is mounted
                </li><li>Install the latest <tt class="filename">initscripts</tt> package
                </li><li>Install the latest <tt class="filename">udev</tt> package
                </li><li>Execute <tt class="command">/sbin/start_udev</tt>
                </li><li>Install the latest <tt class="filename">mkinitrd</tt> package
                </li><li>Install the latest <tt class="filename">kernel</tt> package
                </li><li>Or execute <tt class="command">mkinitrd</tt> for your existing kernel(s)
                </li></ul>
                
                <h2>Udev without <tt class="command">initrd</tt></h2>

                <p>Install Fedore Core as usual and reboot. Execute the following commands
                </p>

<pre class="screen">
<tt class="command">
mkdir /tmp/dev
mount --move /dev /tmp/dev
sbin/MAKEDEV null console zero
mount --move /tmp/dev /dev
</tt></pre>
                Install your kernel without an <tt class="command">initrd</tt>. Reboot.
                <p>
                You will get some SELinux errors, and syslogd will not work as expected.
                </p>
                <h2>Current Problems on Fedora</h2> 
                <p>
                <a href="http://bugzilla.redhat.com/bugzilla/buglist.cgi?short_desc_type=allwordssubstr&component=udev&bug_status=ASSIGNED&bug_status=MODIFIED&bug_status=NEEDINFO&bug_status=NEW&bug_status=REOPENED&bug_status=VERIFIED&bug_severity=high&bug_severity=low&bug_severity=normal&bug_severity=security&bug_severity=translation&long_desc_type=allwordssubstr&bug_file_loc_type=allwordssubstr&status_whiteboard_type=allwordssubstr&fixed_in_type=allwordssubstr&devel_whiteboard_type=allwordssubstr&keywords_type=allwords&cust_facing=YES&emailassigned_to1=1&emailtype1=exact&emailreporter2=1&emailtype2=exact&bugidtype=include&chfieldto=Now&cmdtype=doit&remaction=run&namedcmd=blank&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop">All open bugs for <code class="filename">udev</code></a>
                </p>
                <h3>Nvidia</h3>             
                <p>Quick solution: If you do not need rhgb, just load the nvidia module in <tt class="filename">/etc/rc.local</tt>
                </p><p>
                If you have udev >= 032-5, load the nvidia module:
                </p>
<pre class="screen">
<tt class="command">
cp -a /dev/nvidia* /etc/udev/devices
chown root.root /etc/udev/devices/nvidia*
</tt></pre>
                
                <p>The Bugzilla for this problem is <strike><a href="https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=133900">133900</a></strike>.</p>
                <h3>Palm Pilot</h3>         
                <p>
                If you have udev >= 032-5, execute the command:
                </p>
<pre class="screen">
<tt class="command">
ln -s ttyUSB1 /etc/udev/devices/pilot
</tt></pre>
                or you may try something like this in <tt class="filename">/etc/udev/rules.d/10-custum.rules</tt>:
<pre class="screen">
<tt class="command">
BUS="usb", SYSFS{product}="palmOne Handheld*", KERNEL="ttyUSB*", NAME{ignore_remove}="pilot", MODE="666"
</tt></pre>

                <h3>ISDN</h3>               
                <p>
                If you have udev >= 032-5:
                </p>
<pre class="screen">
<tt class="command">
/sbin/MAKEDEV -d /etc/udev/devices isdn
</tt></pre>
                </pre>
                
                <!-- content END -->


                </div>
                        <div class="fedora-corner-br"> </div>
                        <div class="fedora-corner-bl"> </div>
                </div>
                <!-- content END -->
                
                <!-- footer BEGIN -->
                <div id="fedora-footer">
                        Copyright © 2003-2004 Red Hat, Inc. All rights reserved.
                        <br>The Fedora Project is not a supported product of Red Hat, Inc.
                        <br><a href="/legal/">Legal</a> | <a href="/about/trademarks/">Trademark Guidelines</a>
                        <br>
                        This page last modified at: 2005/03/30 17:47:23 
                        <br>
                </div>
                <!-- footer END -->
        </body>
</html>