~ [ source navigation ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux-2.6.17/Documentation/filesystems/devfs/

Version: ~ [ 2.6.16 ] ~ [ 2.6.17 ] ~
Architecture: ~ [ ia64 ] ~ [ i386 ] ~ [ arm ] ~ [ ppc ] ~ [ sparc64 ] ~

Name Size Last modified (GMT) Description
Back Parent directory 2006-06-18 01:49:35
File ChangeLog 60887 bytes 2006-06-18 01:49:35
File README 68837 bytes 2006-06-18 01:49:35
File ToDo 1136 bytes 2006-06-18 01:49:35
File boot-options 1681 bytes 2006-06-18 01:49:35

  1 Devfs (Device File System) FAQ
  2 
  3 
  4 Linux Devfs (Device File System) FAQ
  5 Richard Gooch
  6 20-AUG-2002
  7 
  8 
  9 Document languages:
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 -----------------------------------------------------------------------------
 18 
 19 NOTE: the master copy of this document is available online at:
 20 
 21 http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html
 22 and looks much better than the text version distributed with the
 23 kernel sources. A mirror site is available at:
 24 
 25 http://www.ras.ucalgary.ca/~rgooch/linux/docs/devfs.html
 26 
 27 There is also an optional daemon that may be used with devfs. You can
 28 find out more about it at:
 29 
 30 http://www.atnf.csiro.au/~rgooch/linux/
 31 
 32 A mailing list is available which you may subscribe to. Send
 33 email
 34 to majordomo@oss.sgi.com with the following line in the
 35 body of the message:
 36 subscribe devfs
 37 To unsubscribe, send the message body:
 38 unsubscribe devfs
 39 instead. The list is archived at
 40 
 41 http://oss.sgi.com/projects/devfs/archive/.
 42 
 43 -----------------------------------------------------------------------------
 44 
 45 Contents
 46 
 47 
 48 What is it?
 49 
 50 Why do it?
 51 
 52 Who else does it?
 53 
 54 How it works
 55 
 56 Operational issues (essential reading)
 57 
 58 Instructions for the impatient
 59 Permissions persistence across reboots
 60 Dealing with drivers without devfs support
 61 All the way with Devfs
 62 Other Issues
 63 Kernel Naming Scheme
 64 Devfsd Naming Scheme
 65 Old Compatibility Names
 66 SCSI Host Probing Issues
 67 
 68 
 69 
 70 Device drivers currently ported
 71 
 72 Allocation of Device Numbers
 73 
 74 Questions and Answers
 75 
 76 Making things work
 77 Alternatives to devfs
 78 What I don't like about devfs
 79 How to report bugs
 80 Strange kernel messages
 81 Compilation problems with devfsd
 82 
 83 
 84 Other resources
 85 
 86 Translations of this document
 87 
 88 
 89 -----------------------------------------------------------------------------
 90 
 91 
 92 What is it?
 93 
 94 Devfs is an alternative to "real" character and block special devices
 95 on your root filesystem. Kernel device drivers can register devices by
 96 name rather than major and minor numbers. These devices will appear in
 97 devfs automatically, with whatever default ownership and
 98 protection the driver specified. A daemon (devfsd) can be used to
 99 override these defaults. Devfs has been in the kernel since 2.3.46.
100 
101 NOTE that devfs is entirely optional. If you prefer the old
102 disc-based device nodes, then simply leave CONFIG_DEVFS_FS=n (the
103 default). In this case, nothing will change.  ALSO NOTE that if you do
104 enable devfs, the defaults are such that full compatibility is
105 maintained with the old devices names.
106 
107 There are two aspects to devfs: one is the underlying device
108 namespace, which is a namespace just like any mounted filesystem. The
109 other aspect is the filesystem code which provides a view of the
110 device namespace. The reason I make a distinction is because devfs
111 can be mounted many times, with each mount showing the same device
112 namespace. Changes made are global to all mounted devfs filesystems.
113 Also, because the devfs namespace exists without any devfs mounts, you
114 can easily mount the root filesystem by referring to an entry in the
115 devfs namespace.
116 
117 
118 The cost of devfs is a small increase in kernel code size and memory
119 usage. About 7 pages of code (some of that in __init sections) and 72
120 bytes for each entry in the namespace. A modest system has only a
121 couple of hundred device entries, so this costs a few more
122 pages. Compare this with the suggestion to put /dev on a <a
123 href="#why-faq-ramdisc">ramdisc.
124 
125 On a typical machine, the cost is under 0.2 percent. On a modest
126 system with 64 MBytes of RAM, the cost is under 0.1 percent.  The
127 accusations of "bloatware" levelled at devfs are not justified.
128 
129 -----------------------------------------------------------------------------
130 
131 
132 Why do it?
133 
134 There are several problems that devfs addresses. Some of these
135 problems are more serious than others (depending on your point of
136 view), and some can be solved without devfs. However, the totality of
137 these problems really calls out for devfs.
138 
139 The choice is a patchwork of inefficient user space solutions, which
140 are complex and likely to be fragile, or to use a simple and efficient
141 devfs which is robust.
142 
143 There have been many counter-proposals to devfs, all seeking to
144 provide some of the benefits without actually implementing devfs. So
145 far there has been an absence of code and no proposed alternative has
146 been able to provide all the features that devfs does. Further,
147 alternative proposals require far more complexity in user-space (and
148 still deliver less functionality than devfs). Some people have the
149 mantra of reducing "kernel bloat", but don't consider the effects on
150 user-space.
151 
152 A good solution limits the total complexity of kernel-space and
153 user-space.
154 
155 
156 Major&minor allocation
157 
158 The existing scheme requires the allocation of major and minor device
159 numbers for each and every device. This means that a central
160 co-ordinating authority is required to issue these device numbers
161 (unless you're developing a "private" device driver), in order to
162 preserve uniqueness. Devfs shifts the burden to a namespace. This may
163 not seem like a huge benefit, but actually it is. Since driver authors
164 will naturally choose a device name which reflects the functionality
165 of the device, there is far less potential for namespace conflict.
166 Solving this requires a kernel change.
167 
168 /dev management
169 
170 Because you currently access devices through device nodes, these must
171 be created by the system administrator. For standard devices you can
172 usually find a MAKEDEV programme which creates all these (hundreds!)
173 of nodes. This means that changes in the kernel must be reflected by
174 changes in the MAKEDEV programme, or else the system administrator
175 creates device nodes by hand.
176 
177 The basic problem is that there are two separate databases of
178 major and minor numbers. One is in the kernel and one is in /dev (or
179 in a MAKEDEV programme, if you want to look at it that way). This is
180 duplication of information, which is not good practice.
181 Solving this requires a kernel change.
182 
183 /dev growth
184 
185 A typical /dev has over 1200 nodes! Most of these devices simply don't
186 exist because the hardware is not available. A huge /dev increases the
187 time to access devices (I'm just referring to the dentry lookup times
188 and the time taken to read inodes off disc: the next subsection shows
189 some more horrors).
190 
191 An example of how big /dev can grow is if we consider SCSI devices:
192 
193 host           6  bits  (say up to 64 hosts on a really big machine)
194 channel        4  bits  (say up to 16 SCSI buses per host)
195 id             4  bits
196 lun            3  bits
197 partition      6  bits
198 TOTAL          23 bits
199 
200 
201 This requires 8 Mega (1024*1024) inodes if we want to store all
202 possible device nodes. Even if we scrap everything but id,partition
203 and assume a single host adapter with a single SCSI bus and only one
204 logical unit per SCSI target (id), that's still 10 bits or 1024
205 inodes. Each VFS inode takes around 256 bytes (kernel 2.1.78), so
206 that's 256 kBytes of inode storage on disc (assuming real inodes take
207 a similar amount of space as VFS inodes). This is actually not so bad,
208 because disc is cheap these days. Embedded systems would care about
209 256 kBytes of /dev inodes, but you could argue that embedded systems
210 would have hand-tuned /dev directories. I've had to do just that on my
211 embedded systems, but I would rather just leave it to devfs.
212 
213 Another issue is the time taken to lookup an inode when first
214 referenced. Not only does this take time in scanning through a list in
215 memory, but also the seek times to read the inodes off disc.
216 This could be solved in user-space using a clever programme which
217 scanned the kernel logs and deleted /dev entries which are not
218 available and created them when they were available. This programme
219 would need to be run every time a new module was loaded, which would
220 slow things down a lot.
221 
222 There is an existing programme called scsidev which will automatically
223 create device nodes for SCSI devices. It can do this by scanning files
224 in /proc/scsi. Unfortunately, to extend this idea to other device
225 nodes would require significant modifications to existing drivers (so
226 they too would provide information in /proc). This is a non-trivial
227 change (I should know: devfs has had to do something similar). Once
228 you go to this much effort, you may as well use devfs itself (which
229 also provides this information).  Furthermore, such a system would
230 likely be implemented in an ad-hoc fashion, as different drivers will
231 provide their information in different ways.
232 
233 Devfs is much cleaner, because it (naturally) has a uniform mechanism
234 to provide this information: the device nodes themselves!
235 
236 
237 Node to driver file_operations translation
238 
239 There is an important difference between the way disc-based character
240 and block nodes and devfs entries make the connection between an entry
241 in /dev and the actual device driver.
242 
243 With the current 8 bit major and minor numbers the connection between
244 disc-based c&b nodes and per-major drivers is done through a
245 fixed-length table of 128 entries. The various filesystem types set
246 the inode operations for c&b nodes to {chr,blk}dev_inode_operations,
247 so when a device is opened a few quick levels of indirection bring us
248 to the driver file_operations.
249 
250 For miscellaneous character devices a second step is required: there
251 is a scan for the driver entry with the same minor number as the file
252 that was opened, and the appropriate minor open method is called. This
253 scanning is done *every time* you open a device node. Potentially, you
254 may be searching through dozens of misc. entries before you find your
255 open method. While not an enormous performance overhead, this does
256 seem pointless.
257 
258 Linux *must* move beyond the 8 bit major and minor barrier,
259 somehow. If we simply increase each to 16 bits, then the indexing
260 scheme used for major driver lookup becomes untenable, because the
261 major tables (one each for character and block devices) would need to
262 be 64 k entries long (512 kBytes on x86, 1 MByte for 64 bit
263 systems). So we would have to use a scheme like that used for
264 miscellaneous character devices, which means the search time goes up
265 linearly with the average number of major device drivers on your
266 system. Not all "devices" are hardware, some are higher-level drivers
267 like KGI, so you can get more "devices" without adding hardware
268 You can improve this by creating an ordered (balanced:-)
269 binary tree, in which case your search time becomes log(N).
270 Alternatively, you can use hashing to speed up the search.
271 But why do that search at all if you don't have to? Once again, it
272 seems pointless.
273 
274 Note that devfs doesn't use the major&minor system. For devfs
275 entries, the connection is done when you lookup the /dev entry. When
276 devfs_register() is called, an internal table is appended which has
277 the entry name and the file_operations. If the dentry cache doesn't
278 have the /dev entry already, this internal table is scanned to get the
279 file_operations, and an inode is created. If the dentry cache already
280 has the entry, there is *no lookup time* (other than the dentry scan
281 itself, but we can't avoid that anyway, and besides Linux dentries
282 cream other OS's which don't have them:-). Furthermore, the number of
283 node entries in a devfs is only the number of available device
284 entries, not the number of *conceivable* entries. Even if you remove
285 unnecessary entries in a disc-based /dev, the number of conceivable
286 entries remains the same: you just limit yourself in order to save
287 space.
288 
289 Devfs provides a fast connection between a VFS node and the device
290 driver, in a scalable way.
291 
292 /dev as a system administration tool
293 
294 Right now /dev contains a list of conceivable devices, most of which I
295 don't have. Devfs only shows those devices available on my
296 system. This means that listing /dev is a handy way of checking what
297 devices are available.
298 
299 Major&minor size
300 
301 Existing major and minor numbers are limited to 8 bits each. This is
302 now a limiting factor for some drivers, particularly the SCSI disc
303 driver, which consumes a single major number. Only 16 discs are
304 supported, and each disc may have only 15 partitions. Maybe this isn't
305 a problem for you, but some of us are building huge Linux systems with
306 disc arrays. With devfs an arbitrary pointer can be associated with
307 each device entry, which can be used to give an effective 32 bit
308 device identifier (i.e. that's like having a 32 bit minor
309 number). Since this is private to the kernel, there are no C library
310 compatibility issues which you would have with increasing major and
311 minor number sizes. See the section on "Allocation of Device Numbers"
312 for details on maintaining compatibility with userspace.
313 
314 Solving this requires a kernel change.
315 
316 Since writing this, the kernel has been modified so that the SCSI disc
317 driver has more major numbers allocated to it and now supports up to
318 128 discs. Since these major numbers are non-contiguous (a result of
319 unplanned expansion), the implementation is a little more cumbersome
320 than originally.
321 
322 Just like the changes to IPv4 to fix impending limitations in the
323 address space, people find ways around the limitations. In the long
324 run, however, solutions like IPv6 or devfs can't be put off forever.
325 
326 Read-only root filesystem
327 
328 Having your device nodes on the root filesystem means that you can't
329 operate properly with a read-only root filesystem. This is because you
330 want to change ownerships and protections of tty devices. Existing
331 practice prevents you using a CD-ROM as your root filesystem for a
332 *real* system. Sure, you can boot off a CD-ROM, but you can't change
333 tty ownerships, so it's only good for installing.
334 
335 Also, you can't use a shared NFS root filesystem for a cluster of
336 discless Linux machines (having tty ownerships changed on a common
337 /dev is not good). Nor can you embed your root filesystem in a
338 ROM-FS.
339 
340 You can get around this by creating a RAMDISC at boot time, making
341 an ext2 filesystem in it, mounting it somewhere and copying the
342 contents of /dev into it, then unmounting it and mounting it over
343 /dev.
344 
345 A devfs is a cleaner way of solving this.
346 
347 Non-Unix root filesystem
348 
349 Non-Unix filesystems (such as NTFS) can't be used for a root
350 filesystem because they variously don't support character and block
351 special files or symbolic links. You can't have a separate disc-based
352 or RAMDISC-based filesystem mounted on /dev because you need device
353 nodes before you can mount these. Devfs can be mounted without any
354 device nodes. Devlinks won't work because symlinks aren't supported.
355 An alternative solution is to use initrd to mount a RAMDISC initial
356 root filesystem (which is populated with a minimal set of device
357 nodes), and then construct a new /dev in another RAMDISC, and finally
358 switch to your non-Unix root filesystem. This requires clever boot
359 scripts and a fragile and conceptually complex boot procedure.
360 
361 Devfs solves this in a robust and conceptually simple way.
362 
363 PTY security
364 
365 Current pseudo-tty (pty) devices are owned by root and read-writable
366 by everyone. The user of a pty-pair cannot change
367 ownership/protections without being suid-root.
368 
369 This could be solved with a secure user-space daemon which runs as
370 root and does the actual creation of pty-pairs. Such a daemon would
371 require modification to *every* programme that wants to use this new
372 mechanism. It also slows down creation of pty-pairs.
373 
374 An alternative is to create a new open_pty() syscall which does much
375 the same thing as the user-space daemon. Once again, this requires
376 modifications to pty-handling programmes.
377 
378 The devfs solution allows a device driver to "tag" certain device
379 files so that when an unopened device is opened, the ownerships are
380 changed to the current euid and egid of the opening process, and the
381 protections are changed to the default registered by the driver. When
382 the device is closed ownership is set back to root and protections are
383 set back to read-write for everybody. No programme need be changed.
384 The devpts filesystem provides this auto-ownership feature for Unix98
385 ptys. It doesn't support old-style pty devices, nor does it have all
386 the other features of devfs.
387 
388 Intelligent device management
389 
390 Devfs implements a simple yet powerful protocol for communication with
391 a device management daemon (devfsd) which runs in user space. It is
392 possible to send a message (either synchronously or asynchronously) to
393 devfsd on any event, such as registration/unregistration of device
394 entries, opening and closing devices, looking up inodes, scanning
395 directories and more. This has many possibilities. Some of these are
396 already implemented. See:
397 
398 
399 http://www.atnf.csiro.au/~rgooch/linux/
400 
401 Device entry registration events can be used by devfsd to change
402 permissions of newly-created device nodes. This is one mechanism to
403 control device permissions.
404 
405 Device entry registration/unregistration events can be used to run
406 programmes or scripts. This can be used to provide automatic mounting
407 of filesystems when a new block device media is inserted into the
408 drive.
409 
410 Asynchronous device open and close events can be used to implement
411 clever permissions management. For example, the default permissions on
412 /dev/dsp do not allow everybody to read from the device. This is
413 sensible, as you don't want some remote user recording what you say at
414 your console. However, the console user is also prevented from
415 recording. This behaviour is not desirable. With asynchronous device
416 open and close events, you can have devfsd run a programme or script
417 when console devices are opened to change the ownerships for *other*
418 device nodes (such as /dev/dsp). On closure, you can run a different
419 script to restore permissions. An advantage of this scheme over
420 modifying the C library tty handling is that this works even if your
421 programme crashes (how many times have you seen the utmp database with
422 lingering entries for non-existent logins?).
423 
424 Synchronous device open events can be used to perform intelligent
425 device access protections. Before the device driver open() method is
426 called, the daemon must first validate the open attempt, by running an
427 external programme or script. This is far more flexible than access
428 control lists, as access can be determined on the basis of other
429 system conditions instead of just the UID and GID.
430 
431 Inode lookup events can be used to authenticate module autoload
432 requests. Instead of using kmod directly, the event is sent to
433 devfsd which can implement an arbitrary authentication before loading
434 the module itself.
435 
436 Inode lookup events can also be used to construct arbitrary
437 namespaces, without having to resort to populating devfs with symlinks
438 to devices that don't exist.
439 
440 Speculative Device Scanning
441 
442 Consider an application (like cdparanoia) that wants to find all
443 CD-ROM devices on the system (SCSI, IDE and other types), whether or
444 not their respective modules are loaded. The application must
445 speculatively open certain device nodes (such as /dev/sr0 for the SCSI
446 CD-ROMs) in order to make sure the module is loaded. This requires
447 that all Linux distributions follow the standard device naming scheme
448 (last time I looked RedHat did things differently). Devfs solves the
449 naming problem.
450 
451 The same application also wants to see which devices are actually
452 available on the system. With the existing system it needs to read the
453 /dev directory and speculatively open each /dev/sr* device to
454 determine if the device exists or not. With a large /dev this is an
455 inefficient operation, especially if there are many /dev/sr* nodes. A
456 solution like scsidev could reduce the number of /dev/sr* entries (but
457 of course that also requires all that inefficient directory scanning).
458 
459 With devfs, the application can open the /dev/sr directory
460 (which triggers the module autoloading if required), and proceed to
461 read /dev/sr. Since only the available devices will have
462 entries, there are no inefficencies in directory scanning or device
463 openings.
464 
465 -----------------------------------------------------------------------------
466 
467 Who else does it?
468 
469 FreeBSD has a devfs implementation. Solaris and AIX each have a
470 pseudo-devfs (something akin to scsidev but for all devices, with some
471 unspecified kernel support). BeOS, Plan9 and QNX also have it. SGI's
472 IRIX 6.4 and above also have a device filesystem.
473 
474 While we shouldn't just automatically do something because others do
475 it, we should not ignore the work of others either. FreeBSD has a lot
476 of competent people working on it, so their opinion should not be
477 blithely ignored.
478 
479 -----------------------------------------------------------------------------
480 
481 
482 How it works
483 
484 Registering device entries
485 
486 For every entry (device node) in a devfs-based /dev a driver must call
487 devfs_register(). This adds the name of the device entry, the
488 file_operations structure pointer and a few other things to an
489 internal table. Device entries may be added and removed at any
490 time. When a device entry is registered, it automagically appears in
491 any mounted devfs'.
492 
493 Inode lookup
494 
495 When a lookup operation on an entry is performed and if there is no
496 driver information for that entry devfs will attempt to call
497 devfsd. If still no driver information can be found then a negative
498 dentry is yielded and the next stage operation will be called by the
499 VFS (such as create() or mknod() inode methods). If driver information
500 can be found, an inode is created (if one does not exist already) and
501 all is well.
502 
503 Manually creating device nodes
504 
505 The mknod() method allows you to create an ordinary named pipe in the
506 devfs, or you can create a character or block special inode if one
507 does not already exist. You may wish to create a character or block
508 special inode so that you can set permissions and ownership. Later, if
509 a device driver registers an entry with the same name, the
510 permissions, ownership and times are retained. This is how you can set
511 the protections on a device even before the driver is loaded. Once you
512 create an inode it appears in the directory listing.
513 
514 Unregistering device entries
515 
516 A device driver calls devfs_unregister() to unregister an entry.
517 
518 Chroot() gaols
519 
520 2.2.x kernels
521 
522 The semantics of inode creation are different when devfs is mounted
523 with the "explicit" option. Now, when a device entry is registered, it
524 will not appear until you use mknod() to create the device. It doesn't
525 matter if you mknod() before or after the device is registered with
526 devfs_register(). The purpose of this behaviour is to support
527 chroot(2) gaols, where you want to mount a minimal devfs inside the
528 gaol. Only the devices you specifically want to be available (through
529 your mknod() setup) will be accessible.
530 
531 2.4.x kernels
532 
533 As of kernel 2.3.99, the VFS has had the ability to rebind parts of
534 the global filesystem namespace into another part of the namespace.
535 This now works even at the leaf-node level, which means that
536 individual files and device nodes may be bound into other parts of the
537 namespace. This is like making links, but better, because it works
538 across filesystems (unlike hard links) and works through chroot()
539 gaols (unlike symbolic links).
540 
541 Because of these improvements to the VFS, the multi-mount capability
542 in devfs is no longer needed. The administrator may create a minimal
543 device tree inside a chroot(2) gaol by using VFS bindings. As this
544 provides most of the features of the devfs multi-mount capability, I
545 removed the multi-mount support code (after issuing an RFC). This
546 yielded code size reductions and simplifications.
547 
548 If you want to construct a minimal chroot() gaol, the following
549 command should suffice:
550 
551 mount --bind /dev/null /gaol/dev/null
552 
553 
554 Repeat for other device nodes you want to expose. Simple!
555 
556 -----------------------------------------------------------------------------
557 
558 
559 Operational issues
560 
561 
562 Instructions for the impatient
563 
564 Nobody likes reading documentation. People just want to get in there
565 and play. So this section tells you quickly the steps you need to take
566 to run with devfs mounted over /dev. Skip these steps and you will end
567 up with a nearly unbootable system. Subsequent sections describe the
568 issues in more detail, and discuss non-essential configuration
569 options.
570 
571 Devfsd
572 OK, if you're reading this, I assume you want to play with
573 devfs. First you should ensure that /usr/src/linux contains a
574 recent kernel source tree. Then you need to compile devfsd, the device
575 management daemon, available at
576 
577 http://www.atnf.csiro.au/~rgooch/linux/.
578 Because the kernel has a naming scheme
579 which is quite different from the old naming scheme, you need to
580 install devfsd so that software and configuration files that use the
581 old naming scheme will not break.
582 
583 Compile and install devfsd. You will be provided with a default
584 configuration file /etc/devfsd.conf which will provide
585 compatibility symlinks for the old naming scheme. Don't change this
586 config file unless you know what you're doing. Even if you think you
587 do know what you're doing, don't change it until you've followed all
588 the steps below and booted a devfs-enabled system and verified that it
589 works.
590 
591 Now edit your main system boot script so that devfsd is started at the
592 very beginning (before any filesystem
593 checks). /etc/rc.d/rc.sysinit is often the main boot script
594 on systems with SysV-style boot scripts. On systems with BSD-style
595 boot scripts it is often /etc/rc. Also check
596 /sbin/rc.
597 
598 NOTE that the line you put into the boot
599 script should be exactly:
600 
601 /sbin/devfsd /dev
602 
603 DO NOT use some special daemon-launching
604 programme, otherwise the boot script may not wait for devfsd to finish
605 initialising.
606 
607 System Libraries
608 There may still be some problems because of broken software making
609 assumptions about device names. In particular, some software does not
610 handle devices which are symbolic links. If you are running a libc 5
611 based system, install libc 5.4.44 (if you have libc 5.4.46, go back to
612 libc 5.4.44, which is actually correct). If you are running a glibc
613 based system, make sure you have glibc 2.1.3 or later.
614 
615 /etc/securetty
616 PAM (Pluggable Authentication Modules) is supposed to be a flexible
617 mechanism for providing better user authentication and access to
618 services. Unfortunately, it's also fragile, complex and undocumented
619 (check out RedHat 6.1, and probably other distributions as well). PAM
620 has problems with symbolic links. Append the following lines to your
621 /etc/securetty file:
622 
623 vc/1
624 vc/2
625 vc/3
626 vc/4
627 vc/5
628 vc/6
629 vc/7
630 vc/8
631 
632 This will not weaken security. If you have a version of util-linux
633 earlier than 2.10.h, please upgrade to 2.10.h or later. If you
634 absolutely cannot upgrade, then also append the following lines to
635 your /etc/securetty file:
636 
637 1
638 2
639 3
640 4
641 5
642 6
643 7
644 8
645 
646 This may potentially weaken security by allowing root logins over the
647 network (a password is still required, though). However, since there
648 are problems with dealing with symlinks, I'm suspicious of the level
649 of security offered in any case.
650 
651 XFree86
652 While not essential, it's probably a good idea to upgrade to XFree86
653 4.0, as patches went in to make it more devfs-friendly. If you don't,
654 you'll probably need to apply the following patch to
655 /etc/security/console.perms so that ordinary users can run
656 startx. Note that not all distributions have this file (e.g. Debian),
657 so if it's not present, don't worry about it.
658 
659 --- /etc/security/console.perms.orig    Sat Apr 17 16:26:47 1999 
660 +++ /etc/security/console.perms Fri Feb 25 23:53:55 2000 
661 @@ -14,7 +14,7 @@ 
662  # man 5 console.perms 
663 
664  # file classes -- these are regular expressions 
665 -<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] 
666 +<console>=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9] 
667 
668  # device classes -- these are shell-style globs 
669  <floppy>=/dev/fd[0-1]* 
670 
671 If the patch does not apply, then change the line:
672 
673 <console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
674 
675 with:
676 
677 <console>=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
678 
679 
680 Disable devpts
681 I've had a report of devpts mounted on /dev/pts not working
682 correctly. Since devfs will also manage /dev/pts, there is no
683 need to mount devpts as well. You should either edit your
684 /etc/fstab so devpts is not mounted, or disable devpts from
685 your kernel configuration.
686 
687 Unsupported drivers
688 Not all drivers have devfs support. If you depend on one of these
689 drivers, you will need to create a script or tarfile that you can use
690 at boot time to create device nodes as appropriate. There is a
691 section which describes this. Another
692 section lists the drivers which have
693 devfs support.
694 
695 /dev/mouse
696 
697 Many disributions configure /dev/mouse to be the mouse device
698 for XFree86 and GPM. I actually think this is a bad idea, because it
699 adds another level of indirection. When looking at a config file, if
700 you see /dev/mouse you're left wondering which mouse
701 is being referred to. Hence I recommend putting the actual mouse
702 device (for example /dev/psaux) into your
703 /etc/X11/XF86Config file (and similarly for the GPM
704 configuration file).
705 
706 Alternatively, use the same technique used for unsupported drivers
707 described above.
708 
709 The Kernel
710 Finally, you need to make sure devfs is compiled into your kernel. Set
711 CONFIG_EXPERIMENTAL=y, CONFIG_DEVFS_FS=y and CONFIG_DEVFS_MOUNT=y by
712 using favourite configuration tool (i.e. make config or
713 make xconfig) and then make clean and then recompile your kernel and 
714 modules. At boot, devfs will be mounted onto /dev.
715 
716 If you encounter problems booting (for example if you forgot a
717 configuration step), you can pass devfs=nomount at the kernel
718 boot command line. This will prevent the kernel from mounting devfs at
719 boot time onto /dev.
720 
721 In general, a kernel built with CONFIG_DEVFS_FS=y but without mounting
722 devfs onto /dev is completely safe, and requires no
723 configuration changes. One exception to take note of is when
724 LABEL= directives are used in /etc/fstab. In this
725 case you will be unable to boot properly. This is because the
726 mount(8) programme uses /proc/partitions as part of
727 the volume label search process, and the device names it finds are not
728 available, because setting CONFIG_DEVFS_FS=y changes the names in
729 /proc/partitions, irrespective of whether devfs is mounted.
730 
731 Now you've finished all the steps required. You're now ready to boot
732 your shiny new kernel. Enjoy.
733 
734 Changing the configuration
735 
736 OK, you've now booted a devfs-enabled system, and everything works.
737 Now you may feel like changing the configuration (common targets are
738 /etc/fstab and /etc/devfsd.conf). Since you have a
739 system that works, if you make any changes and it doesn't work, you
740 now know that you only have to restore your configuration files to the
741 default and it will work again.
742 
743 
744 Permissions persistence across reboots
745 
746 If you don't use mknod(2) to create a device file, nor use chmod(2) or
747 chown(2) to change the ownerships/permissions, the inode ctime will
748 remain at 0 (the epoch, 12 am, 1-JAN-1970, GMT). Anything with a ctime
749 later than this has had it's ownership/permissions changed. Hence, a
750 simple script or programme may be used to tar up all changed inodes,
751 prior to shutdown. Although effective, many consider this approach a
752 kludge.
753 
754 A much better approach is to use devfsd to save and restore
755 permissions. It may be configured to record changes in permissions and
756 will save them in a database (in fact a directory tree), and restore
757 these upon boot. This is an efficient method and results in immediate
758 saving of current permissions (unlike the tar approach, which saves
759 permissions at some unspecified future time).
760 
761 The default configuration file supplied with devfsd has config entries
762 which you may uncomment to enable persistence management.
763 
764 If you decide to use the tar approach anyway, be aware that tar will
765 first unlink(2) an inode before creating a new device node. The
766 unlink(2) has the effect of breaking the connection between a devfs
767 entry and the device driver. If you use the "devfs=only" boot option,
768 you lose access to the device driver, requiring you to reload the
769 module. I consider this a bug in tar (there is no real need to
770 unlink(2) the inode first).
771 
772 Alternatively, you can use devfsd to provide more sophisticated
773 management of device permissions. You can use devfsd to store
774 permissions for whole groups of devices with a single configuration
775 entry, rather than the conventional single entry per device entry.
776 
777 Permissions database stored in mounted-over /dev
778 
779 If you wish to save and restore your device permissions into the
780 disc-based /dev while still mounting devfs onto /dev
781 you may do so. This requires a 2.4.x kernel (in fact, 2.3.99 or
782 later), which has the VFS binding facility. You need to do the
783 following to set this up:
784 
785 
786 
787 make sure the kernel does not mount devfs at boot time
788 
789 
790 make sure you have a correct /dev/console entry in your
791 root file-system (where your disc-based /dev lives)
792 
793 create the /dev-state directory
794 
795 
796 add the following lines near the very beginning of your boot
797 scripts:
798 
799 mount --bind /dev /dev-state
800 mount -t devfs none /dev
801 devfsd /dev
802 
803 
804 
805 
806 add the following lines to your /etc/devfsd.conf file:
807 
808 REGISTER        ^pt[sy]         IGNORE
809 CREATE          ^pt[sy]         IGNORE
810 CHANGE          ^pt[sy]         IGNORE
811 DELETE          ^pt[sy]         IGNORE
812 REGISTER        .*              COPY    /dev-state/$devname $devpath
813 CREATE          .*              COPY    $devpath /dev-state/$devname
814 CHANGE          .*              COPY    $devpath /dev-state/$devname
815 DELETE          .*              CFUNCTION GLOBAL unlink /dev-state/$devname
816 RESTORE         /dev-state
817 
818 Note that the sample devfsd.conf file contains these lines,
819 as well as other sample configurations you may find useful. See the
820 devfsd distribution
821 
822 
823 reboot.
824 
825 
826 
827 
828 Permissions database stored in normal directory
829 
830 If you are using an older kernel which doesn't support VFS binding,
831 then you won't be able to have the permissions database in a
832 mounted-over /dev. However, you can still use a regular
833 directory to store the database. The sample /etc/devfsd.conf
834 file above may still be used. You will need to create the
835 /dev-state directory prior to installing devfsd. If you have
836 old permissions in /dev, then just copy (or move) the device
837 nodes over to the new directory.
838 
839 Which method is better?
840 
841 The best method is to have the permissions database stored in the
842 mounted-over /dev. This is because you will not need to copy
843 device nodes over to /dev-state, and because it allows you to
844 switch between devfs and non-devfs kernels, without requiring you to
845 copy permissions between /dev-state (for devfs) and
846 /dev (for non-devfs).
847 
848 
849 Dealing with drivers without devfs support
850 
851 Currently, not all device drivers in the kernel have been modified to
852 use devfs. Device drivers which do not yet have devfs support will not
853 automagically appear in devfs. The simplest way to create device nodes
854 for these drivers is to unpack a tarfile containing the required
855 device nodes. You can do this in your boot scripts. All your drivers
856 will now work as before.
857 
858 Hopefully for most people devfs will have enough support so that they
859 can mount devfs directly over /dev without losing most functionality
860 (i.e. losing access to various devices). As of 22-JAN-1998 (devfs
861 patch version 10) I am now running this way. All the devices I have
862 are available in devfs, so I don't lose anything.
863 
864 WARNING: if your configuration requires the old-style device names
865 (i.e. /dev/hda1 or /dev/sda1), you must install devfsd and configure
866 it to maintain compatibility entries. It is almost certain that you
867 will require this. Note that the kernel creates a compatibility entry
868 for the root device, so you don't need initrd.
869 
870 Note that you no longer need to mount devpts if you use Unix98 PTYs,
871 as devfs can manage /dev/pts itself. This saves you some RAM, as you
872 don't need to compile and install devpts. Note that some versions of
873 glibc have a bug with Unix98 pty handling on devfs systems. Contact
874 the glibc maintainers for a fix. Glibc 2.1.3 has the fix.
875 
876 Note also that apart from editing /etc/fstab, other things will need
877 to be changed if you *don't* install devfsd. Some software (like the X
878 server) hard-wire device names in their source. It really is much
879 easier to install devfsd so that compatibility entries are created.
880 You can then slowly migrate your system to using the new device names
881 (for example, by starting with /etc/fstab), and then limiting the
882 compatibility entries that devfsd creates.
883 
884 IF YOU CONFIGURE TO MOUNT DEVFS AT BOOT, MAKE SURE YOU INSTALL DEVFSD
885 BEFORE YOU BOOT A DEVFS-ENABLED KERNEL!
886 
887 Now that devfs has gone into the 2.3.46 kernel, I'm getting a lot of
888 reports back. Many of these are because people are trying to run
889 without devfsd, and hence some things break. Please just run devfsd if
890 things break. I want to concentrate on real bugs rather than
891 misconfiguration problems at the moment. If people are willing to fix
892 bugs/false assumptions in other code (i.e. glibc, X server) and submit
893 that to the respective maintainers, that would be great.
894 
895 
896 All the way with Devfs
897 
898 The devfs kernel patch creates a rationalised device tree. As stated
899 above, if you want to keep using the old /dev naming scheme,
900 you just need to configure devfsd appopriately (see the man
901 page). People who prefer the old names can ignore this section. For
902 those of us who like the rationalised names and an uncluttered
903 /dev, read on.
904 
905 If you don't run devfsd, or don't enable compatibility entry
906 management, then you will have to configure your system to use the new
907 names. For example, you will then need to edit your
908 /etc/fstab to use the new disc naming scheme. If you want to
909 be able to boot non-devfs kernels, you will need compatibility
910 symlinks in the underlying disc-based /dev pointing back to
911 the old-style names for when you boot a kernel without devfs.
912 
913 You can selectively decide which devices you want compatibility
914 entries for. For example, you may only want compatibility entries for
915 BSD pseudo-terminal devices (otherwise you'll have to patch you C
916 library or use Unix98 ptys instead). It's just a matter of putting in
917 the correct regular expression into /dev/devfsd.conf.
918 
919 There are other choices of naming schemes that you may prefer. For
920 example, I don't use the kernel-supplied
921 names, because they are too verbose. A common misconception is
922 that the kernel-supplied names are meant to be used directly in
923 configuration files. This is not the case. They are designed to
924 reflect the layout of the devices attached and to provide easy
925 classification.
926 
927 If you like the kernel-supplied names, that's fine. If you don't then
928 you should be using devfsd to construct a namespace more to your
929 liking. Devfsd has built-in code to construct a
930 namespace that is both logical and easy to
931 manage. In essence, it creates a convenient abbreviation of the
932 kernel-supplied namespace.
933 
934 You are of course free to build your own namespace. Devfsd has all the
935 infrastructure required to make this easy for you. All you need do is
936 write a script. You can even write some C code and devfsd can load the
937 shared object as a callable extension.
938 
939 
940 Other Issues
941 
942 The init programme
943 Another thing to take note of is whether your init programme
944 creates a Unix socket /dev/telinit. Some versions of init
945 create /dev/telinit so that the telinit programme can
946 communicate with the init process. If you have such a system you need
947 to make sure that devfs is mounted over /dev *before* init
948 starts. In other words, you can't leave the mounting of devfs to
949 /etc/rc, since this is executed after init. Other
950 versions of init require a named pipe /dev/initctl
951 which must exist *before* init starts. Once again, you need to
952 mount devfs and then create the named pipe *before* init
953 starts.
954 
955 The default behaviour now is not to mount devfs onto /dev at
956 boot time for 2.3.x and later kernels. You can correct this with the
957 "devfs=mount" boot option. This solves any problems with init,
958 and also prevents the dreaded:
959 
960 Cannot open initial console
961 
962 message. For 2.2.x kernels where you need to apply the devfs patch,
963 the default is to mount.
964 
965 If you have automatic mounting of devfs onto /dev then you
966 may need to create /dev/initctl in your boot scripts. The
967 following lines should suffice:
968 
969 mknod /dev/initctl p
970 kill -SIGUSR1 1       # tell init that /dev/initctl now exists
971 
972 Alternatively, if you don't want the kernel to mount devfs onto
973 /dev then you could use the following procedure is a
974 guideline for how to get around /dev/initctl problems:
975 
976 # cd /sbin
977 # mv init init.real
978 # cat > init
979 #! /bin/sh
980 mount -n -t devfs none /dev
981 mknod /dev/initctl p
982 exec /sbin/init.real $*
983 [control-D]
984 # chmod a+x init
985 
986 Note that newer versions of init create /dev/initctl
987 automatically, so you don't have to worry about this.
988 
989 Module autoloading
990 You will need to configure devfsd to enable module
991 autoloading. The following lines should be placed in your
992 /etc/devfsd.conf file:
993 
994 LOOKUP  .*              MODLOAD
995 
996 
997 As of devfsd-v1.3.10, a generic /etc/modules.devfs
998 configuration file is installed, which is used by the MODLOAD
999 action. This should be sufficient for most configurations. If you
1000 require further configuration, edit your /etc/modules.conf
1001 file. The way module autoloading work with devfs is:
1002 
1003 
1004 a process attempts to lookup a device node (e.g. /dev/fred)
1005 
1006 
1007 if that device node does not exist, the full pathname is passed to
1008 devfsd as a string
1009 
1010 
1011 devfsd will pass the string to the modprobe programme (provided the
1012 configuration line shown above is present), and specifies that
1013 /etc/modules.devfs is the configuration file
1014 
1015 
1016 /etc/modules.devfs includes /etc/modules.conf to
1017 access local configurations
1018 
1019 modprobe will search it's configuration files, looking for an alias
1020 that translates the pathname into a module name
1021 
1022 
1023 the translated pathname is then used to load the module.
1024 
1025 
1026 If you wanted a lookup of /dev/fred to load the
1027 mymod module, you would require the following configuration
1028 line in /etc/modules.conf:
1029 
1030 alias    /dev/fred    mymod
1031 
1032 The /etc/modules.devfs configuration file provides many such
1033 aliases for standard device names. If you look closely at this file,
1034 you will note that some modules require multiple alias configuration
1035 lines. This is required to support module autoloading for old and new
1036 device names.
1037 
1038 Mounting root off a devfs device
1039 If you wish to mount root off a devfs device when you pass the
1040 "devfs=only" boot option, then you need to pass in the
1041 "root=<device>" option to the kernel when booting. If you use
1042 LILO, then you must have this in lilo.conf:
1043 
1044 append = "root=<device>"
1045 
1046 Surprised? Yep, so was I. It turns out if you have (as most people
1047 do):
1048 
1049 root = <device>
1050 
1051 
1052 then LILO will determine the device number of <device> and will
1053 write that device number into a special place in the kernel image
1054 before starting the kernel, and the kernel will use that device number
1055 to mount the root filesystem. So, using the "append" variety ensures
1056 that LILO passes the root filesystem device as a string, which devfs
1057 can then use.
1058 
1059 Note that this isn't an issue if you don't pass "devfs=only".
1060 
1061 TTY issues
1062 The ttyname(3) function in some versions of the C library makes
1063 false assumptions about device entries which are symbolic links.  The
1064 tty(1) programme is one that depends on this function.  I've
1065 written a patch to libc 5.4.43 which fixes this. This has been
1066 included in libc 5.4.44 and a similar fix is in glibc 2.1.3.
1067 
1068 
1069 Kernel Naming Scheme
1070 
1071 The kernel provides a default naming scheme. This scheme is designed
1072 to make it easy to search for specific devices or device types, and to
1073 view the available devices. Some device types (such as hard discs),
1074 have a directory of entries, making it easy to see what devices of
1075 that class are available. Often, the entries are symbolic links into a
1076 directory tree that reflects the topology of available devices. The
1077 topological tree is useful for finding how your devices are arranged.
1078 
1079 Below is a list of the naming schemes for the most common drivers. A
1080 list of reserved device names is
1081 available for reference. Please send email to
1082 rgooch@atnf.csiro.au to obtain an allocation. Please be
1083 patient (the maintainer is busy). An alternative name may be allocated
1084 instead of the requested name, at the discretion of the maintainer.
1085 
1086 Disc Devices
1087 
1088 All discs, whether SCSI, IDE or whatever, are placed under the
1089 /dev/discs hierarchy:
1090 
1091         /dev/discs/disc0        first disc
1092         /dev/discs/disc1        second disc
1093 
1094 
1095 Each of these entries is a symbolic link to the directory for that
1096 device. The device directory contains:
1097 
1098         disc    for the whole disc
1099         part*   for individual partitions
1100 
1101 
1102 CD-ROM Devices
1103 
1104 All CD-ROMs, whether SCSI, IDE or whatever, are placed under the
1105 /dev/cdroms hierarchy:
1106 
1107         /dev/cdroms/cdrom0      first CD-ROM
1108         /dev/cdroms/cdrom1      second CD-ROM
1109 
1110 
1111 Each of these entries is a symbolic link to the real device entry for
1112 that device.
1113 
1114 Tape Devices
1115 
1116 All tapes, whether SCSI, IDE or whatever, are placed under the
1117 /dev/tapes hierarchy:
1118 
1119         /dev/tapes/tape0        first tape
1120         /dev/tapes/tape1        second tape
1121 
1122 
1123 Each of these entries is a symbolic link to the directory for that
1124 device. The device directory contains:
1125 
1126         mt                      for mode 0
1127         mtl                     for mode 1
1128         mtm                     for mode 2
1129         mta                     for mode 3
1130         mtn                     for mode 0, no rewind
1131         mtln                    for mode 1, no rewind
1132         mtmn                    for mode 2, no rewind
1133         mtan                    for mode 3, no rewind
1134 
1135 
1136 SCSI Devices
1137 
1138 To uniquely identify any SCSI device requires the following
1139 information:
1140 
1141   controller    (host adapter)
1142   bus           (SCSI channel)
1143   target        (SCSI ID)
1144   unit          (Logical Unit Number)
1145 
1146 
1147 All SCSI devices are placed under /dev/scsi (assuming devfs
1148 is mounted on /dev). Hence, a SCSI device with the following
1149 parameters: c=1,b=2,t=3,u=4 would appear as:
1150 
1151         /dev/scsi/host1/bus2/target3/lun4       device directory
1152 
1153 
1154 Inside this directory, a number of device entries may be created,
1155 depending on which SCSI device-type drivers were installed.
1156 
1157 See the section on the disc naming scheme to see what entries the SCSI
1158 disc driver creates.
1159 
1160 See the section on the tape naming scheme to see what entries the SCSI
1161 tape driver creates.
1162 
1163 The SCSI CD-ROM driver creates:
1164 
1165         cd
1166 
1167 
1168 The SCSI generic driver creates:
1169 
1170         generic
1171 
1172 
1173 IDE Devices
1174 
1175 To uniquely identify any IDE device requires the following
1176 information:
1177 
1178   controller
1179   bus           (aka. primary/secondary)
1180   target        (aka. master/slave)
1181   unit
1182 
1183 
1184 All IDE devices are placed under /dev/ide, and uses a similar
1185 naming scheme to the SCSI subsystem.
1186 
1187 XT Hard Discs
1188 
1189 All XT discs are placed under /dev/xd. The first XT disc has
1190 the directory /dev/xd/disc0.
1191 
1192 TTY devices
1193 
1194 The tty devices now appear as:
1195 
1196   New name                   Old-name                   Device Type
1197   --------                   --------                   -----------
1198   /dev/tts/{0,1,...}         /dev/ttyS{0,1,...}         Serial ports
1199   /dev/cua/{0,1,...}         /dev/cua{0,1,...}          Call out devices
1200   /dev/vc/0                  /dev/tty                   Current virtual console
1201   /dev/vc/{1,2,...}          /dev/tty{1...63}           Virtual consoles
1202   /dev/vcc/{0,1,...}         /dev/vcs{1...63}           Virtual consoles
1203   /dev/pty/m{0,1,...}        /dev/ptyp??                PTY masters
1204   /dev/pty/s{0,1,...}        /dev/ttyp??                PTY slaves
1205 
1206 
1207 RAMDISCS
1208 
1209 The RAMDISCS are placed in their own directory, and are named thus:
1210 
1211   /dev/rd/{0,1,2,...}
1212 
1213 
1214 Meta Devices
1215 
1216 The meta devices are placed in their own directory, and are named
1217 thus:
1218 
1219   /dev/md/{0,1,2,...}
1220 
1221 
1222 Floppy discs
1223 
1224 Floppy discs are placed in the /dev/floppy directory.
1225 
1226 Loop devices
1227 
1228 Loop devices are placed in the /dev/loop directory.
1229 
1230 Sound devices
1231 
1232 Sound devices are placed in the /dev/sound directory
1233 (audio, sequencer, ...).
1234 
1235 
1236 Devfsd Naming Scheme
1237 
1238 Devfsd provides a naming scheme which is a convenient abbreviation of
1239 the kernel-supplied namespace. In some
1240 cases, the kernel-supplied naming scheme is quite convenient, so
1241 devfsd does not provide another naming scheme. The convenience names
1242 that devfsd creates are in fact the same names as the original devfs
1243 kernel patch created (before Linus mandated the Big Name
1244 Change). These are referred to as "new compatibility entries".
1245 
1246 In order to configure devfsd to create these convenience names, the
1247 following lines should be placed in your /etc/devfsd.conf:
1248 
1249 REGISTER        .*              MKNEWCOMPAT
1250 UNREGISTER      .*              RMNEWCOMPAT
1251 
1252 This will cause devfsd to create (and destroy) symbolic links which
1253 point to the kernel-supplied names.
1254 
1255 SCSI Hard Discs
1256 
1257 All SCSI discs are placed under /dev/sd (assuming devfs is
1258 mounted on /dev). Hence, a SCSI disc with the following
1259 parameters: c=1,b=2,t=3,u=4 would appear as:
1260 
1261         /dev/sd/c1b2t3u4        for the whole disc
1262         /dev/sd/c1b2t3u4p5      for the 5th partition
1263         /dev/sd/c1b2t3u4p5s6    for the 6th slice in the 5th partition
1264 
1265 
1266 SCSI Tapes
1267 
1268 All SCSI tapes are placed under /dev/st. A similar naming
1269 scheme is used as for SCSI discs. A SCSI tape with the
1270 parameters:c=1,b=2,t=3,u=4 would appear as:
1271 
1272         /dev/st/c1b2t3u4m0      for mode 0
1273         /dev/st/c1b2t3u4m1      for mode 1
1274         /dev/st/c1b2t3u4m2      for mode 2
1275         /dev/st/c1b2t3u4m3      for mode 3
1276         /dev/st/c1b2t3u4m0n     for mode 0, no rewind
1277         /dev/st/c1b2t3u4m1n     for mode 1, no rewind
1278         /dev/st/c1b2t3u4m2n     for mode 2, no rewind
1279         /dev/st/c1b2t3u4m3n     for mode 3, no rewind
1280 
1281 
1282 SCSI CD-ROMs
1283 
1284 All SCSI CD-ROMs are placed under /dev/sr. A similar naming
1285 scheme is used as for SCSI discs. A SCSI CD-ROM with the
1286 parameters:c=1,b=2,t=3,u=4 would appear as:
1287 
1288         /dev/sr/c1b2t3u4
1289 
1290 
1291 SCSI Generic Devices
1292 
1293 The generic (aka. raw) interface for all SCSI devices are placed under
1294 /dev/sg. A similar naming scheme is used as for SCSI discs. A
1295 SCSI generic device with the parameters:c=1,b=2,t=3,u=4 would appear
1296 as:
1297 
1298         /dev/sg/c1b2t3u4
1299 
1300 
1301 IDE Hard Discs
1302 
1303 All IDE discs are placed under /dev/ide/hd, using a similar
1304 convention to SCSI discs. The following mappings exist between the new
1305 and the old names:
1306 
1307         /dev/hda        /dev/ide/hd/c0b0t0u0
1308         /dev/hdb        /dev/ide/hd/c0b0t1u0
1309         /dev/hdc        /dev/ide/hd/c0b1t0u0
1310         /dev/hdd        /dev/ide/hd/c0b1t1u0
1311 
1312 
1313 IDE Tapes
1314 
1315 A similar naming scheme is used as for IDE discs. The entries will
1316 appear in the /dev/ide/mt directory.
1317 
1318 IDE CD-ROM
1319 
1320 A similar naming scheme is used as for IDE discs. The entries will
1321 appear in the /dev/ide/cd directory.
1322 
1323 IDE Floppies
1324 
1325 A similar naming scheme is used as for IDE discs. The entries will
1326 appear in the /dev/ide/fd directory.
1327 
1328 XT Hard Discs
1329 
1330 All XT discs are placed under /dev/xd. The first XT disc
1331 would appear as /dev/xd/c0t0.
1332 
1333 
1334 Old Compatibility Names
1335 
1336 The old compatibility names are the legacy device names, such as
1337 /dev/hda, /dev/sda, /dev/rtc and so on.
1338 Devfsd can be configured to create compatibility symlinks so that you
1339 may continue to use the old names in your configuration files and so
1340 that old applications will continue to function correctly.
1341 
1342 In order to configure devfsd to create these legacy names, the
1343 following lines should be placed in your /etc/devfsd.conf:
1344 
1345 REGISTER        .*              MKOLDCOMPAT
1346 UNREGISTER      .*              RMOLDCOMPAT
1347 
1348 This will cause devfsd to create (and destroy) symbolic links which
1349 point to the kernel-supplied names.
1350 
1351 
1352 -----------------------------------------------------------------------------
1353 
1354 
1355 Device drivers currently ported
1356 
1357 - All miscellaneous character devices support devfs (this is done
1358   transparently through misc_register())
1359 
1360 - SCSI discs and generic hard discs
1361 
1362 - Character memory devices (null, zero, full and so on)
1363   Thanks to C. Scott Ananian <cananian@alumni.princeton.edu>
1364 
1365 - Loop devices (/dev/loop?)
1366  
1367 - TTY devices (console, serial ports, terminals and pseudo-terminals)
1368   Thanks to C. Scott Ananian <cananian@alumni.princeton.edu>
1369 
1370 - SCSI tapes (/dev/scsi and /dev/tapes)
1371 
1372 - SCSI CD-ROMs (/dev/scsi and /dev/cdroms)
1373 
1374 - SCSI generic devices (/dev/scsi)
1375 
1376 - RAMDISCS (/dev/ram?)
1377 
1378 - Meta Devices (/dev/md*)
1379 
1380 - Floppy discs (/dev/floppy)
1381 
1382 - Parallel port printers (/dev/printers)
1383 
1384 - Sound devices (/dev/sound)
1385   Thanks to Eric Dumas <dumas@linux.eu.org> and
1386   C. Scott Ananian <cananian@alumni.princeton.edu>
1387 
1388 - Joysticks (/dev/joysticks)
1389 
1390 - Sparc keyboard (/dev/kbd)
1391 
1392 - DSP56001 digital signal processor (/dev/dsp56k)
1393 
1394 - Apple Desktop Bus (/dev/adb)
1395 
1396 - Coda network file system (/dev/cfs*)
1397 
1398 - Virtual console capture devices (/dev/vcc)
1399   Thanks to Dennis Hou <smilax@mindmeld.yi.org>
1400 
1401 - Frame buffer devices (/dev/fb)
1402 
1403 - Video capture devices (/dev/v4l)
1404 
1405 
1406 -----------------------------------------------------------------------------
1407 
1408 
1409 Allocation of Device Numbers
1410 
1411 Devfs allows you to write a driver which doesn't need to allocate a
1412 device number (major&minor numbers) for the internal operation of the
1413 kernel. However, there are a number of userspace programmes that use
1414 the device number as a unique handle for a device. An example is the
1415 find programme, which uses device numbers to determine whether
1416 an inode is on a different filesystem than another inode. The device
1417 number used is the one for the block device which a filesystem is
1418 using. To preserve compatibility with userspace programmes, block
1419 devices using devfs need to have unique device numbers allocated to
1420 them. Furthermore, POSIX specifies device numbers, so some kind of
1421 device number needs to be presented to userspace.
1422 
1423 The simplest option (especially when porting drivers to devfs) is to
1424 keep using the old major and minor numbers. Devfs will take whatever
1425 values are given for major&minor and pass them onto userspace.
1426 
1427 This device number is a 16 bit number, so this leaves plenty of space
1428 for large numbers of discs and partitions. This scheme can also be
1429 used for character devices, in particular the tty devices, which are
1430 currently limited to 256 pseudo-ttys (this limits the total number of
1431 simultaneous xterms and remote logins).  Note that the device number
1432 is limited to the range 36864-61439 (majors 144-239), in order to
1433 avoid any possible conflicts with existing official allocations.
1434 
1435 Please note that using dynamically allocated block device numbers may
1436 break the NFS daemons (both user and kernel mode), which expect dev_t
1437 for a given device to be constant over the lifetime of remote mounts.
1438 
1439 A final note on this scheme: since it doesn't increase the size of
1440 device numbers, there are no compatibility issues with userspace.
1441 
1442 -----------------------------------------------------------------------------
1443 
1444 
1445 Questions and Answers
1446 
1447 
1448 Making things work
1449 Alternatives to devfs
1450 What I don't like about devfs
1451 How to report bugs
1452 Strange kernel messages
1453 Compilation problems with devfsd
1454 
1455 
1456 
1457 Making things work
1458 
1459 Here are some common questions and answers.
1460 
1461 
1462 
1463 Devfsd doesn't start
1464 
1465 Make sure you have compiled and installed devfsd
1466 Make sure devfsd is being started from your boot
1467 scripts
1468 Make sure you have configured your kernel to enable devfs (see
1469 below)
1470 Make sure devfs is mounted (see below)
1471 
1472 
1473 Devfsd is not managing all my permissions
1474 
1475 Make sure you are capturing the appropriate events. For example,
1476 device entries created by the kernel generate REGISTER events,
1477 but those created by devfsd generate CREATE events.
1478 
1479 
1480 Devfsd is not capturing all REGISTER events
1481 
1482 See the previous entry: you may need to capture CREATE events.
1483 
1484 
1485 X will not start
1486 
1487 Make sure you followed the steps 
1488 outlined above.
1489 
1490 
1491 Why don't my network devices appear in devfs?
1492 
1493 This is not a bug. Network devices have their own, completely separate
1494 namespace. They are accessed via socket(2) and
1495 setsockopt(2) calls, and thus require no device nodes. I have
1496 raised the possibilty of moving network devices into the device
1497 namespace, but have had no response.
1498 
1499 
1500 How can I test if I have devfs compiled into my kernel?
1501 
1502 All filesystems built-in or currently loaded are listed in
1503 /proc/filesystems. If you see a devfs entry, then
1504 you know that devfs was compiled into your kernel. If you have
1505 correctly configured and rebuilt your kernel, then devfs will be
1506 built-in. If you think you've configured it in, but
1507 /proc/filesystems doesn't show it, you've made a mistake.
1508 Common mistakes include:
1509 
1510 Using a 2.2.x kernel without applying the devfs patch (if you
1511 don't know how to patch your kernel, use 2.4.x instead, don't bother
1512 asking me how to patch)
1513 Forgetting to set CONFIG_EXPERIMENTAL=y
1514 Forgetting to set CONFIG_DEVFS_FS=y
1515 Forgetting to set CONFIG_DEVFS_MOUNT=y (if you want devfs
1516 to be automatically mounted at boot)
1517 Editing your .config manually, instead of using make
1518 config or make xconfig
1519 Forgetting to run make dep; make clean after changing the
1520 configuration and before compiling
1521 Forgetting to compile your kernel and modules
1522 Forgetting to install your kernel
1523 Forgetting to install your modules
1524 
1525 Please check twice that you've done all these steps before sending in
1526 a bug report.
1527 
1528 
1529 
1530 How can I test if devfs is mounted on /dev?
1531 
1532 The device filesystem will always create an entry called
1533 ".devfsd", which is used to communicate with the daemon. Even
1534 if the daemon is not running, this entry will exist. Testing for the
1535 existence of this entry is the approved method of determining if devfs
1536 is mounted or not. Note that the type of entry (i.e. regular file,
1537 character device, named pipe, etc.) may change without notice. Only
1538 the existence of the entry should be relied upon.
1539 
1540 
1541 When I start devfsd, I see the error:
1542 Error opening file: ".devfsd"   No such file or directory?
1543 
1544 This means that devfs is not mounted. Make sure you have devfs mounted.
1545 
1546 
1547 How do I mount devfs?
1548 
1549 First make sure you have devfs compiled into your kernel (see
1550 above). Then you will either need to:
1551 
1552 set CONFIG_DEVFS_MOUNT=y in your kernel config
1553 pass devfs=mount to your boot loader
1554 mount devfs manually in your boot scripts with:
1555 mount -t none devfs /dev
1556 
1557 
1558 
1559 Mount by volume LABEL=<label> doesn't work with
1560 devfs
1561 
1562 Most probably you are not mounting devfs onto /dev. What
1563 happens is that if your kernel config has CONFIG_DEVFS_FS=y
1564 then the contents of /proc/partitions will have the devfs
1565 names (such as scsi/host0/bus0/target0/lun0/part1). The
1566 contents of /proc/partitions are used by mount(8) when
1567 mounting by volume label. If devfs is not mounted on /dev,
1568 then mount(8) will fail to find devices. The solution is to
1569 make sure that devfs is mounted on /dev. See above for how to
1570 do that.
1571 
1572 
1573 I have extra or incorrect entries in /dev
1574 
1575 You may have stale entries in your dev-state area. Check for a
1576 RESTORE configuration line in your devfsd configuration
1577 (typically /etc/devfsd.conf). If you have this line, check
1578 the contents of the specified directory for stale entries. Remove
1579 any entries which are incorrect, then reboot.
1580 
1581 
1582 I get "Unable to open initial console" messages at boot
1583 
1584 This usually happens when you don't have devfs automounted onto
1585 /dev at boot time, and there is no valid
1586 /dev/console entry on your root file-system. Create a valid
1587 /dev/console device node.
1588 
1589 
1590 
1591 
1592 
1593 Alternatives to devfs
1594 
1595 I've attempted to collate all the anti-devfs proposals and explain
1596 their limitations. Under construction.
1597 
1598 
1599 Why not just pass device create/remove events to a daemon?
1600 
1601 Here the suggestion is to develop an API in the kernel so that devices
1602 can register create and remove events, and a daemon listens for those
1603 events. The daemon would then populate/depopulate /dev (which
1604 resides on disc).
1605 
1606 This has several limitations:
1607 
1608 
1609 it only works for modules loaded and unloaded (or devices inserted
1610 and removed) after the kernel has finished booting. Without a database
1611 of events, there is no way the daemon could fully populate
1612 /dev
1613 
1614 
1615 if you add a database to this scheme, the question is then how to
1616 present that database to user-space. If you make it a list of strings
1617 with embedded event codes which are passed through a pipe to the
1618 daemon, then this is only of use to the daemon. I would argue that the
1619 natural way to present this data is via a filesystem (since many of
1620 the events will be of a hierarchical nature), such as devfs.
1621 Presenting the data as a filesystem makes it easy for the user to see
1622 what is available and also makes it easy to write scripts to scan the
1623 "database"
1624 
1625 
1626 the tight binding between device nodes and drivers is no longer
1627 possible (requiring the otherwise perfectly avoidable
1628 table lookups)
1629 
1630 
1631 you cannot catch inode lookup events on /dev which means
1632 that module autoloading requires device nodes to be created. This is a
1633 problem, particularly for drivers where only a few inodes are created
1634 from a potentially large set
1635 
1636 
1637 this technique can't be used when the root FS is mounted
1638 read-only
1639 
1640 
1641 
1642 
1643 Just implement a better scsidev
1644 
1645 This suggestion involves taking the scsidev programme and
1646 extending it to scan for all devices, not just SCSI devices. The
1647 scsidev programme works by scanning /proc/scsi
1648 
1649 Problems:
1650 
1651 
1652 the kernel does not currently provide a list of all devices
1653 available. Not all drivers register entries in /proc or
1654 generate kernel messages
1655 
1656 
1657 there is no uniform mechanism to register devices other than the
1658 devfs API
1659 
1660 
1661 implementing such an API is then the same as the
1662 proposal above
1663 
1664 
1665 
1666 
1667 Put /dev on a ramdisc
1668 
1669 This suggestion involves creating a ramdisc and populating it with
1670 device nodes and then mounting it over /dev.
1671 
1672 Problems:
1673 
1674 
1675 
1676 this doesn't help when mounting the root filesystem, since you
1677 still need a device node to do that
1678 
1679 
1680 if you want to use this technique for the root device node as
1681 well, you need to use initrd. This complicates the booting sequence
1682 and makes it significantly harder to administer and configure. The
1683 initrd is essentially opaque, robbing the system administrator of easy
1684 configuration
1685 
1686 
1687 insufficient information is available to correctly populate the
1688 ramdisc. So we come back to the
1689 proposal above to "solve" this
1690 
1691 
1692 a ramdisc-based solution would take more kernel memory, since the
1693 backing store would be (at best) normal VFS inodes and dentries, which
1694 take 284 bytes and 112 bytes, respectively, for each entry. Compare
1695 that to 72 bytes for devfs
1696 
1697 
1698 
1699 
1700 Do nothing: there's no problem
1701 
1702 Sometimes people can be heard to claim that the existing scheme is
1703 fine. This is what they're ignoring:
1704 
1705 
1706 device number size (8 bits each for major and minor) is a real
1707 limitation, and must be fixed somehow. Systems with large numbers of
1708 SCSI devices, for example, will continue to consume the remaining
1709 unallocated major numbers. USB will also need to push beyond the 8 bit
1710 minor limitation
1711 
1712 
1713 simply increasing the device number size is insufficient. Apart
1714 from causing a lot of pain, it doesn't solve the management issues
1715 of a /dev with thousands or more device nodes
1716 
1717 
1718 ignoring the problem of a huge /dev will not make it go
1719 away, and dismisses the legitimacy of a large number of people who
1720 want a dynamic /dev
1721 
1722 
1723 the standard response then becomes: "write a device management
1724 daemon", which brings us back to the
1725 proposal above
1726 
1727 
1728 
1729 
1730 What I don't like about devfs
1731 
1732 Here are some common complaints about devfs, and some suggestions and
1733 solutions that may make it more palatable for you. I can't please
1734 everybody, but I do try :-)
1735 
1736 I hate the naming scheme
1737 
1738 First, remember that no naming scheme will please everybody. You hate
1739 the scheme, others love it. Who's to say who's right and who's wrong?
1740 Ultimately, the person who writes the code gets to choose, and what
1741 exists now is a combination of the choices made by the
1742 devfs author and the
1743 kernel maintainer (Linus).
1744 
1745 However, not all is lost. If you want to create your own naming
1746 scheme, it is a simple matter to write a standalone script, hack
1747 devfsd, or write a script called by devfsd. You can create whatever
1748 naming scheme you like.
1749 
1750 Further, if you want to remove all traces of the devfs naming scheme
1751 from /dev, you can mount devfs elsewhere (say
1752 /devfs) and populate /dev with links into
1753 /devfs. This population can be automated using devfsd if you
1754 wish.
1755 
1756 You can even use the VFS binding facility to make the links, rather
1757 than using symbolic links. This way, you don't even have to see the
1758 "destination" of these symbolic links.
1759 
1760 Devfs puts policy into the kernel
1761 
1762 There's already policy in the kernel. Device numbers are in fact
1763 policy (why should the kernel dictate what device numbers I use?).
1764 Face it, some policy has to be in the kernel. The real difference
1765 between device names as policy and device numbers as policy is that
1766 no one will use device numbers directly, because device
1767 numbers are devoid of meaning to humans and are ugly. At least with
1768 the devfs device names, (even though you can add your own naming
1769 scheme) some people will use the devfs-supplied names directly. This
1770 offends some people :-)
1771 
1772 Devfs is bloatware
1773 
1774 This is not even remotely true. As shown above,
1775 both code and data size are quite modest.
1776 
1777 
1778 How to report bugs
1779 
1780 If you have (or think you have) a bug with devfs, please follow the
1781 steps below:
1782 
1783 
1784 
1785 make sure you have enabled debugging output when configuring your
1786 kernel. You will need to set (at least) the following config options:
1787 
1788 CONFIG_DEVFS_DEBUG=y
1789 CONFIG_DEBUG_KERNEL=y
1790 CONFIG_DEBUG_SLAB=y
1791 
1792 
1793 
1794 please make sure you have the latest devfs patches applied. The
1795 latest kernel version might not have the latest devfs patches applied
1796 yet (Linus is very busy)
1797 
1798 
1799 save a copy of your complete kernel logs (preferably by
1800 using the dmesg programme) for later inclusion in your bug
1801 report. You may need to use the -s switch to increase the
1802 internal buffer size so you can capture all the boot messages.
1803 Don't edit or trim the dmesg output
1804 
1805 
1806 
1807 
1808 try booting with devfs=dall passed to the kernel boot
1809 command line (read the documentation on your bootloader on how to do
1810 this), and save the result to a file. This may be quite verbose, and
1811 it may overflow the messages buffer, but try to get as much of it as
1812 you can
1813 
1814 
1815 send a copy of your devfsd configuration file(s)
1816 
1817 send the bug report to me first.
1818 Don't expect that I will see it if you post it to the linux-kernel
1819 mailing list. Include all the information listed above, plus
1820 anything else that you think might be relevant. Put the string
1821 devfs somewhere in the subject line, so my mail filters mark
1822 it as urgent
1823 
1824 
1825 
1826 
1827 Here is a general guide on how to ask questions in a way that greatly
1828 improves your chances of getting a reply:
1829 
1830 http://www.tuxedo.org/~esr/faqs/smart-questions.html. If you have
1831 a bug to report, you should also read
1832 
1833 http://www.chiark.greenend.org.uk/~sgtatham/bugs.html.
1834 
1835 
1836 Strange kernel messages
1837 
1838 You may see devfs-related messages in your kernel logs. Below are some
1839 messages and what they mean (and what you should do about them, if
1840 anything).
1841 
1842 
1843 
1844 devfs_register(fred): could not append to parent, err: -17
1845 
1846 You need to check what the error code means, but usually 17 means
1847 EEXIST. This means that a driver attempted to create an entry
1848 fred in a directory, but there already was an entry with that
1849 name. This is often caused by flawed boot scripts which untar a bunch
1850 of inodes into /dev, as a way to restore permissions. This
1851 message is harmless, as the device nodes will still
1852 provide access to the driver (unless you use the devfs=only
1853 boot option, which is only for dedicated souls:-). If you want to get
1854 rid of these annoying messages, upgrade to devfsd-v1.3.20 and use the
1855 recommended RESTORE directive to restore permissions.
1856 
1857 
1858 devfs_mk_dir(bill): using old entry in dir: c1808724 ""
1859 
1860 This is similar to the message above, except that a driver attempted
1861 to create a directory named bill, and the parent directory
1862 has an entry with the same name. In this case, to ensure that drivers
1863 continue to work properly, the old entry is re-used and given to the
1864 driver. In 2.5 kernels, the driver is given a NULL entry, and thus,
1865 under rare circumstances, may not create the require device nodes.
1866 The solution is the same as above.
1867 
1868 
1869 
1870 
1871 
1872 Compilation problems with devfsd
1873 
1874 Usually, you can compile devfsd just by typing in
1875 make in the source directory, followed by a make
1876 install (as root). Sometimes, you may have problems, particularly
1877 on broken configurations.
1878 
1879 
1880 
1881 error messages relating to DEVFSD_NOTIFY_DELETE
1882 
1883 This happened because you have an ancient set of kernel headers
1884 installed in /usr/include/linux or /usr/src/linux.
1885 Install kernel 2.4.10 or later. You may need to pass the
1886 KERNEL_DIR variable to make (if you did not install
1887 the new kernel sources as /usr/src/linux), or you may copy
1888 the devfs_fs.h file in the kernel source tree into
1889 /usr/include/linux.
1890 
1891 
1892 
1893 
1894 -----------------------------------------------------------------------------
1895 
1896 
1897 Other resources
1898 
1899 
1900 
1901 Douglas Gilbert has written a useful document at
1902 
1903 http://www.torque.net/sg/devfs_scsi.html which
1904 explores the SCSI subsystem and how it interacts with devfs
1905 
1906 
1907 Douglas Gilbert has written another useful document at
1908 
1909 http://www.torque.net/scsi/SCSI-2.4-HOWTO/ which
1910 discusses the Linux SCSI subsystem in 2.4.
1911 
1912 
1913 Johannes Erdfelt has started a discussion paper on Linux and
1914 hot-swap devices, describing what the requirements are for a scalable
1915 solution and how and why he's used devfs+devfsd. Note that this is an
1916 early draft only, available in plain text form at:
1917 
1918 http://johannes.erdfelt.com/hotswap.txt.
1919 Johannes has promised a HTML version will follow.
1920 
1921 
1922 I presented an invited 
1923 paper
1924 at the
1925 
1926 2nd Annual Storage Management Workshop held in Miamia, Florida,
1927 U.S.A. in October 2000.
1928 
1929 
1930 
1931 
1932 -----------------------------------------------------------------------------
1933 
1934 
1935 Translations of this document
1936 
1937 This document has been translated into other languages.
1938 
1939 
1940 
1941 
1942 The document master (in English) by rgooch@atnf.csiro.au is
1943 available at
1944 
1945 http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html
1946 
1947 
1948 
1949 A Korean translation by viatoris@nownuri.net is available at
1950 
1951 http://your.destiny.pe.kr/devfs/devfs.html
1952 
1953 
1954 
1955 
1956 -----------------------------------------------------------------------------
1957 Most flags courtesy of ITA's 
1958 Flags of All Countries
1959 used with permission. 

~ [ source navigation ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.