From bff468813f78f81e36ebb2a3f4354de7365e640f Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 14 Dec 2006 16:41:33 +0000 Subject: Upgrade to Linux 2.6.19 - Includes large parts of the patch from #1021 by dpalffy - Includes RB532 NAND driver changes by n0-1 SVN-Revision: 5789 --- .../generic-2.6/patches/000-reenable_devfs.patch | 718 -- .../generic-2.6/patches/000-reinstate-devfs.patch | 12377 +++++++++++++++++++ .../linux/generic-2.6/patches/001-squashfs.patch | 207 +- .../generic-2.6/patches/002-squashfs_lzma.patch | 113 +- .../patches/004-extra_optimization.patch | 7 +- .../linux/generic-2.6/patches/005-gcc4_fix.patch | 221 - .../generic-2.6/patches/006-gcc4_inline_fix.patch | 9 +- .../generic-2.6/patches/007-samsung_flash.patch | 15 +- .../010-disable_old_squashfs_compatibility.patch | 12 +- .../linux/generic-2.6/patches/011-mips_boot.patch | 9 +- ...dpart_redboot_byteswap_partition_truncate.patch | 12 +- .../patches/100-netfilter_layer7_2.1nbd.patch | 246 +- .../generic-2.6/patches/101-ipp2p_0.8.1rc1.patch | 217 +- .../102-openswan-2.4.0.kernel-2.6-natt.patch | 48 +- .../generic-2.6/patches/103-netfilter-ipset.patch | 788 +- .../generic-2.6/patches/105-netfilter_time.patch | 84 +- .../generic-2.6/patches/106-netfilter_imq.patch | 199 +- .../patches/107-netfilter_nat_sip.patch | 830 -- .../generic-2.6/patches/108-netfilter_route.patch | 210 +- .../linux/generic-2.6/patches/200-sched_esfq.patch | 26 +- .../patches/201-multiple_default_gateways.patch | 283 +- .../patches/202-mips-freestanding.patch | 7 +- .../patches/203-fix_initrd_duplication.patch | 13 - .../generic-2.6/patches/204-jffs2_eofdetect.patch | 16 +- .../generic-2.6/patches/205-block2mtd_fix.patch | 235 - .../generic-2.6/patches/206-pppoe_mtu_fix.patch | 12 - .../patches/207-powerpc_asm_segment_h.patch | 6 +- .../generic-2.6/patches/208-rtl8110sb_fix.patch | 20 +- target/linux/generic-2.6/patches/209-mini_fo.patch | 205 +- .../patches/900-headers_type_and_time.patch | 19 +- .../patches/901-asm_bitops_include.patch | 9 +- 31 files changed, 13835 insertions(+), 3338 deletions(-) delete mode 100644 target/linux/generic-2.6/patches/000-reenable_devfs.patch create mode 100644 target/linux/generic-2.6/patches/000-reinstate-devfs.patch delete mode 100644 target/linux/generic-2.6/patches/005-gcc4_fix.patch delete mode 100644 target/linux/generic-2.6/patches/107-netfilter_nat_sip.patch delete mode 100644 target/linux/generic-2.6/patches/203-fix_initrd_duplication.patch delete mode 100644 target/linux/generic-2.6/patches/205-block2mtd_fix.patch delete mode 100644 target/linux/generic-2.6/patches/206-pppoe_mtu_fix.patch (limited to 'target/linux/generic-2.6/patches') diff --git a/target/linux/generic-2.6/patches/000-reenable_devfs.patch b/target/linux/generic-2.6/patches/000-reenable_devfs.patch deleted file mode 100644 index 7871c4c378..0000000000 --- a/target/linux/generic-2.6/patches/000-reenable_devfs.patch +++ /dev/null @@ -1,718 +0,0 @@ -diff -ur linux-2.6.15-rc5/drivers/mtd/mtd_blkdevs.c linux-2.6.15-rc5-openwrt/drivers/mtd/mtd_blkdevs.c ---- linux-2.6.15-rc5/drivers/mtd/mtd_blkdevs.c 2005-12-04 06:10:42.000000000 +0100 -+++ linux-2.6.15-rc5-openwrt/drivers/mtd/mtd_blkdevs.c 2005-12-15 07:53:20.000000000 +0100 -@@ -21,6 +21,9 @@ - #include - #include - #include -+#ifdef CONFIG_DEVFS_FS -+#include -+#endif - - static LIST_HEAD(blktrans_majors); - -@@ -302,6 +305,11 @@ - snprintf(gd->disk_name, sizeof(gd->disk_name), - "%s%d", tr->name, new->devnum); - -+#ifdef CONFIG_DEVFS_FS -+ snprintf(gd->devfs_name, sizeof(gd->devfs_name), -+ "%s/%c", tr->name, (tr->part_bits?'a':'0') + new->devnum); -+#endif -+ - /* 2.5 has capacity in units of 512 bytes while still - having BLOCK_SIZE_BITS set to 10. Just to keep us amused. */ - set_capacity(gd, (new->size * new->blksize) >> 9); -@@ -418,6 +426,10 @@ - return ret; - } - -+#ifdef CONFIG_DEVFS_FS -+ devfs_mk_dir(tr->name); -+#endif -+ - INIT_LIST_HEAD(&tr->devs); - list_add(&tr->list, &blktrans_majors); - -@@ -450,6 +462,10 @@ - tr->remove_dev(dev); - } - -+#ifdef CONFIG_DEVFS_FS -+ devfs_remove(tr->name); -+#endif -+ - blk_cleanup_queue(tr->blkcore_priv->rq); - unregister_blkdev(tr->major, tr->name); - -diff -ur linux-2.6.15-rc5/drivers/mtd/mtdchar.c linux-2.6.15-rc5-openwrt/drivers/mtd/mtdchar.c ---- linux-2.6.15-rc5/drivers/mtd/mtdchar.c 2005-12-04 06:10:42.000000000 +0100 -+++ linux-2.6.15-rc5-openwrt/drivers/mtd/mtdchar.c 2005-12-15 07:49:15.000000000 +0100 -@@ -19,19 +18,33 @@ - - #include - -+#ifdef CONFIG_DEVFS_FS -+#include -+#else -+#include -+ - static struct class *mtd_class; -+#endif - - static void mtd_notify_add(struct mtd_info* mtd) - { - if (!mtd) - return; - -+#ifdef CONFIG_DEVFS_FS -+ devfs_mk_cdev(MKDEV(MTD_CHAR_MAJOR, mtd->index*2), -+ S_IFCHR | S_IRUGO | S_IWUGO, "mtd/%d", mtd->index); -+ -+ devfs_mk_cdev(MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1), -+ S_IFCHR | S_IRUGO, "mtd/%dro", mtd->index); -+#else - class_device_create(mtd_class, NULL, MKDEV(MTD_CHAR_MAJOR, mtd->index*2), - NULL, "mtd%d", mtd->index); - - class_device_create(mtd_class, NULL, - MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1), - NULL, "mtd%dro", mtd->index); -+#endif - } - - static void mtd_notify_remove(struct mtd_info* mtd) -@@ -39,8 +52,13 @@ - if (!mtd) - return; - -+#ifdef CONFIG_DEVFS_FS -+ devfs_remove("mtd/%d", mtd->index); -+ devfs_remove("mtd/%dro", mtd->index); -+#else - class_device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2)); - class_device_destroy(mtd_class, MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1)); -+#endif - } - - static struct mtd_notifier notifier = { -@@ -48,6 +66,22 @@ - .remove = mtd_notify_remove, - }; - -+#ifdef CONFIG_DEVFS_FS -+ static inline void mtdchar_devfs_init(void) -+ { -+ devfs_mk_dir("mtd"); -+ register_mtd_user(¬ifier); -+ } -+ static inline void mtdchar_devfs_exit(void) -+ { -+ unregister_mtd_user(¬ifier); -+ devfs_remove("mtd"); -+ } -+ #else /* !DEVFS */ -+ #define mtdchar_devfs_init() do { } while(0) -+ #define mtdchar_devfs_exit() do { } while(0) -+#endif -+ - /* - * We use file->private_data to store a pointer to the MTDdevice. - * Since alighment is at least 32 bits, we have 2 bits free for OTP -@@ -643,6 +677,9 @@ - return -EAGAIN; - } - -+#ifdef CONFIG_DEVFS_FS -+ mtdchar_devfs_init(); -+#else - mtd_class = class_create(THIS_MODULE, "mtd"); - - if (IS_ERR(mtd_class)) { -@@ -652,13 +689,19 @@ - } - - register_mtd_user(¬ifier); -+#endif - return 0; - } - - static void __exit cleanup_mtdchar(void) - { -+ -+#ifdef CONFIG_DEVFS_FS -+ mtdchar_devfs_exit(); -+#else - unregister_mtd_user(¬ifier); - class_destroy(mtd_class); -+#endif - unregister_chrdev(MTD_CHAR_MAJOR, "mtd"); - } - -diff -ur linux-2.6.15-rc5/fs/Kconfig linux-2.6.15-rc5-openwrt/fs/Kconfig ---- linux-2.6.15-rc5/fs/Kconfig 2005-12-04 06:10:42.000000000 +0100 -+++ linux-2.6.15-rc5-openwrt/fs/Kconfig 2005-12-15 07:44:01.000000000 +0100 -@@ -772,6 +772,56 @@ - help - Exports the dump image of crashed kernel in ELF format. - -+config DEVFS_FS -+ bool "/dev file system support (OBSOLETE)" -+ depends on EXPERIMENTAL -+ help -+ This is support for devfs, a virtual file system (like /proc) which -+ provides the file system interface to device drivers, normally found -+ in /dev. Devfs does not depend on major and minor number -+ allocations. Device drivers register entries in /dev which then -+ appear automatically, which means that the system administrator does -+ not have to create character and block special device files in the -+ /dev directory using the mknod command (or MAKEDEV script) anymore. -+ -+ This is work in progress. If you want to use this, you *must* read -+ the material in , especially -+ the file README there. -+ -+ Note that devfs no longer manages /dev/pts! If you are using UNIX98 -+ ptys, you will also need to mount the /dev/pts filesystem (devpts). -+ -+ Note that devfs has been obsoleted by udev, -+ . -+ It has been stripped down to a bare minimum and is only provided for -+ legacy installations that use its naming scheme which is -+ unfortunately different from the names normal Linux installations -+ use. -+ -+ If unsure, say N. -+ -+config DEVFS_MOUNT -+ bool "Automatically mount at boot" -+ depends on DEVFS_FS -+ help -+ This option appears if you have CONFIG_DEVFS_FS enabled. Setting -+ this to 'Y' will make the kernel automatically mount devfs onto /dev -+ when the system is booted, before the init thread is started. -+ You can override this with the "devfs=nomount" boot option. -+ -+ If unsure, say N. -+ -+config DEVFS_DEBUG -+ bool "Debug devfs" -+ depends on DEVFS_FS -+ help -+ If you say Y here, then the /dev file system code will generate -+ debugging messages. See the file -+ for more -+ details. -+ -+ If unsure, say N. -+ - config SYSFS - bool "sysfs file system support" if EMBEDDED - default y -diff -ur linux-2.6.17/drivers/ieee1394/dv1394.c linux-2.6.17-devfs/drivers/ieee1394/dv1394.c ---- linux-2.6.17/drivers/ieee1394/dv1394.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/ieee1394/dv1394.c 2006-08-25 11:06:18.000000000 -0700 -@@ -73,7 +73,7 @@ - - fix all XXX showstoppers - - disable IR/IT DMA interrupts on shutdown - - flush pci writes to the card by issuing a read -- - character device dispatching -+ - devfs and character device dispatching (* needs testing with Linux 2.2.x) - - switch over to the new kernel DMA API (pci_map_*()) (* needs testing on platforms with IOMMU!) - - keep all video_cards in a list (for open() via chardev), set file->private_data = video - - dv1394_poll should indicate POLLIN when receiving buffers are available -@@ -1096,6 +1096,7 @@ - - init.api_version = DV1394_API_VERSION; - init.n_frames = DV1394_MAX_FRAMES / 4; -+ /* the following are now set via devfs */ - init.channel = video->channel; - init.format = video->pal_or_ntsc; - init.cip_n = video->cip_n; -@@ -1790,6 +1791,8 @@ - { - struct video_card *video = NULL; - -+ /* if the device was opened through devfs, then file->private_data -+ has already been set to video by devfs */ - if (file->private_data) { - video = (struct video_card*) file->private_data; - -@@ -2208,7 +2211,7 @@ - video = kzalloc(sizeof(*video), GFP_KERNEL); - if (!video) { - printk(KERN_ERR "dv1394: cannot allocate video_card\n"); -- return -1; -+ goto err; - } - - video->ohci = ohci; -@@ -2263,14 +2266,37 @@ - list_add_tail(&video->list, &dv1394_cards); - spin_unlock_irqrestore(&dv1394_cards_lock, flags); - -+ if (devfs_mk_cdev(MKDEV(IEEE1394_MAJOR, -+ IEEE1394_MINOR_BLOCK_DV1394*16 + video->id), -+ S_IFCHR|S_IRUGO|S_IWUGO, -+ "ieee1394/dv/host%d/%s/%s", -+ (video->id>>2), -+ (video->pal_or_ntsc == DV1394_NTSC ? "NTSC" : "PAL"), -+ (video->mode == MODE_RECEIVE ? "in" : "out")) < 0) -+ goto err_free; -+ - debug_printk("dv1394: dv1394_init() OK on ID %d\n", video->id); -+ - return 0; -+ -+ err_free: -+ kfree(video); -+ err: -+ return -1; - } - - static void dv1394_un_init(struct video_card *video) - { -+ char buf[32]; -+ - /* obviously nobody has the driver open at this point */ - do_dv1394_shutdown(video, 1); -+ snprintf(buf, sizeof(buf), "dv/host%d/%s/%s", (video->id >> 2), -+ (video->pal_or_ntsc == DV1394_NTSC ? "NTSC" : "PAL"), -+ (video->mode == MODE_RECEIVE ? "in" : "out") -+ ); -+ -+ devfs_remove("ieee1394/%s", buf); - kfree(video); - } - -@@ -2307,6 +2333,9 @@ - - class_device_destroy(hpsb_protocol_class, - MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_DV1394 * 16 + (id<<2))); -+ devfs_remove("ieee1394/dv/host%d/NTSC", id); -+ devfs_remove("ieee1394/dv/host%d/PAL", id); -+ devfs_remove("ieee1394/dv/host%d", id); - } - - static void dv1394_add_host (struct hpsb_host *host) -@@ -2323,6 +2352,9 @@ - class_device_create(hpsb_protocol_class, NULL, MKDEV( - IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_DV1394 * 16 + (id<<2)), - NULL, "dv1394-%d", id); -+ devfs_mk_dir("ieee1394/dv/host%d", id); -+ devfs_mk_dir("ieee1394/dv/host%d/NTSC", id); -+ devfs_mk_dir("ieee1394/dv/host%d/PAL", id); - - dv1394_init(ohci, DV1394_NTSC, MODE_RECEIVE); - dv1394_init(ohci, DV1394_NTSC, MODE_TRANSMIT); -@@ -2579,8 +2611,10 @@ - static void __exit dv1394_exit_module(void) - { - hpsb_unregister_protocol(&dv1394_driver); -+ - hpsb_unregister_highlevel(&dv1394_highlevel); - cdev_del(&dv1394_cdev); -+ devfs_remove("ieee1394/dv"); - } - - static int __init dv1394_init_module(void) -@@ -2596,12 +2630,15 @@ - return ret; - } - -+ devfs_mk_dir("ieee1394/dv"); -+ - hpsb_register_highlevel(&dv1394_highlevel); - - ret = hpsb_register_protocol(&dv1394_driver); - if (ret) { - printk(KERN_ERR "dv1394: failed to register protocol\n"); - hpsb_unregister_highlevel(&dv1394_highlevel); -+ devfs_remove("ieee1394/dv"); - cdev_del(&dv1394_cdev); - return ret; - } -diff -ur linux-2.6.17/drivers/ieee1394/ieee1394_core.c linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.c ---- linux-2.6.17/drivers/ieee1394/ieee1394_core.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.c 2006-08-25 11:06:18.000000000 -0700 -@@ -1078,10 +1078,17 @@ - goto exit_release_kernel_thread; - } - -+ /* actually this is a non-fatal error */ -+ ret = devfs_mk_dir("ieee1394"); -+ if (ret < 0) { -+ HPSB_ERR("unable to make devfs dir for device major %d!\n", IEEE1394_MAJOR); -+ goto release_chrdev; -+ } -+ - ret = bus_register(&ieee1394_bus_type); - if (ret < 0) { - HPSB_INFO("bus register failed"); -- goto release_chrdev; -+ goto release_devfs; - } - - for (i = 0; fw_bus_attrs[i]; i++) { -@@ -1092,7 +1099,7 @@ - fw_bus_attrs[i--]); - } - bus_unregister(&ieee1394_bus_type); -- goto release_chrdev; -+ goto release_devfs; - } - } - -@@ -1145,6 +1152,8 @@ - for (i = 0; fw_bus_attrs[i]; i++) - bus_remove_file(&ieee1394_bus_type, fw_bus_attrs[i]); - bus_unregister(&ieee1394_bus_type); -+release_devfs: -+ devfs_remove("ieee1394"); - release_chrdev: - unregister_chrdev_region(IEEE1394_CORE_DEV, 256); - exit_release_kernel_thread: -@@ -1182,6 +1191,7 @@ - hpsb_cleanup_config_roms(); - - unregister_chrdev_region(IEEE1394_CORE_DEV, 256); -+ devfs_remove("ieee1394"); - } - - module_init(ieee1394_init); -diff -ur linux-2.6.17/drivers/ieee1394/ieee1394_core.h linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.h ---- linux-2.6.17/drivers/ieee1394/ieee1394_core.h 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/ieee1394/ieee1394_core.h 2006-08-25 11:06:18.000000000 -0700 -@@ -3,6 +3,7 @@ - #define _IEEE1394_CORE_H - - #include -+#include - #include - #include - #include "hosts.h" -diff -ur linux-2.6.17/drivers/ieee1394/raw1394.c linux-2.6.17-devfs/drivers/ieee1394/raw1394.c ---- linux-2.6.17/drivers/ieee1394/raw1394.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/ieee1394/raw1394.c 2006-08-25 11:06:18.000000000 -0700 -@@ -41,6 +41,7 @@ - #include - #include - #include -+#include - #include - - #include "csr1212.h" -@@ -2998,6 +2999,9 @@ - goto out_unreg; - } - -+ devfs_mk_cdev(MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_RAW1394 * 16), -+ S_IFCHR | S_IRUSR | S_IWUSR, RAW1394_DEVICE_NAME); -+ - cdev_init(&raw1394_cdev, &raw1394_fops); - raw1394_cdev.owner = THIS_MODULE; - kobject_set_name(&raw1394_cdev.kobj, RAW1394_DEVICE_NAME); -@@ -3019,6 +3023,7 @@ - goto out; - - out_dev: -+ devfs_remove(RAW1394_DEVICE_NAME); - class_device_destroy(hpsb_protocol_class, - MKDEV(IEEE1394_MAJOR, - IEEE1394_MINOR_BLOCK_RAW1394 * 16)); -@@ -3034,6 +3039,7 @@ - MKDEV(IEEE1394_MAJOR, - IEEE1394_MINOR_BLOCK_RAW1394 * 16)); - cdev_del(&raw1394_cdev); -+ devfs_remove(RAW1394_DEVICE_NAME); - hpsb_unregister_highlevel(&raw1394_highlevel); - hpsb_unregister_protocol(&raw1394_driver); - } -diff -ur linux-2.6.17/drivers/ieee1394/video1394.c linux-2.6.17-devfs/drivers/ieee1394/video1394.c ---- linux-2.6.17/drivers/ieee1394/video1394.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/ieee1394/video1394.c 2006-08-25 11:06:18.000000000 -0700 -@@ -42,6 +42,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1321,6 +1322,9 @@ - class_device_create(hpsb_protocol_class, NULL, MKDEV( - IEEE1394_MAJOR, minor), - NULL, "%s-%d", VIDEO1394_DRIVER_NAME, ohci->host->id); -+ devfs_mk_cdev(MKDEV(IEEE1394_MAJOR, minor), -+ S_IFCHR | S_IRUSR | S_IWUSR, -+ "%s/%d", VIDEO1394_DRIVER_NAME, ohci->host->id); - } - - -@@ -1328,9 +1332,12 @@ - { - struct ti_ohci *ohci = hpsb_get_hostinfo(&video1394_highlevel, host); - -- if (ohci) -+ if (ohci) { - class_device_destroy(hpsb_protocol_class, MKDEV(IEEE1394_MAJOR, - IEEE1394_MINOR_BLOCK_VIDEO1394 * 16 + ohci->host->id)); -+ devfs_remove("%s/%d", VIDEO1394_DRIVER_NAME, ohci->host->id); -+ } -+ - return; - } - -@@ -1471,8 +1478,12 @@ - static void __exit video1394_exit_module (void) - { - hpsb_unregister_protocol(&video1394_driver); -+ - hpsb_unregister_highlevel(&video1394_highlevel); -+ -+ devfs_remove(VIDEO1394_DRIVER_NAME); - cdev_del(&video1394_cdev); -+ - PRINT_G(KERN_INFO, "Removed " VIDEO1394_DRIVER_NAME " module"); - } - -@@ -1489,12 +1500,15 @@ - return ret; - } - -+ devfs_mk_dir(VIDEO1394_DRIVER_NAME); -+ - hpsb_register_highlevel(&video1394_highlevel); - - ret = hpsb_register_protocol(&video1394_driver); - if (ret) { - PRINT_G(KERN_ERR, "video1394: failed to register protocol"); - hpsb_unregister_highlevel(&video1394_highlevel); -+ devfs_remove(VIDEO1394_DRIVER_NAME); - cdev_del(&video1394_cdev); - return ret; - } -diff -ur linux-2.6.17/drivers/scsi/osst.c linux-2.6.17-devfs/drivers/scsi/osst.c ---- linux-2.6.17/drivers/scsi/osst.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/scsi/osst.c 2006-08-25 11:06:18.000000000 -0700 -@@ -48,6 +48,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -5721,7 +5722,7 @@ - struct st_partstat * STps; - struct osst_buffer * buffer; - struct gendisk * drive; -- int i, dev_num; -+ int i, mode, dev_num; - - if (SDp->type != TYPE_TAPE || !osst_supports(SDp)) - return -ENODEV; -@@ -5857,6 +5858,18 @@ - snprintf(name, 8, "%s%s", "n", tape_name(tpnt)); - osst_sysfs_add(MKDEV(OSST_MAJOR, dev_num + 128), dev, tpnt, name); - } -+ for (mode = 0; mode < ST_NBR_MODES; ++mode) { -+ /* Rewind entry */ -+ devfs_mk_cdev(MKDEV(OSST_MAJOR, dev_num + (mode << 5)), -+ S_IFCHR | S_IRUGO | S_IWUGO, -+ "%s/ot%s", SDp->devfs_name, osst_formats[mode]); -+ -+ /* No-rewind entry */ -+ devfs_mk_cdev(MKDEV(OSST_MAJOR, dev_num + (mode << 5) + 128), -+ S_IFCHR | S_IRUGO | S_IWUGO, -+ "%s/ot%sn", SDp->devfs_name, osst_formats[mode]); -+ } -+ drive->number = devfs_register_tape(SDp->devfs_name); - - sdev_printk(KERN_INFO, SDp, - "osst :I: Attached OnStream %.5s tape as %s\n", -@@ -5873,7 +5886,7 @@ - { - struct scsi_device * SDp = to_scsi_device(dev); - struct osst_tape * tpnt; -- int i; -+ int i, mode; - - if ((SDp->type != TYPE_TAPE) || (osst_nr_dev <= 0)) - return 0; -@@ -5884,6 +5897,11 @@ - osst_sysfs_destroy(MKDEV(OSST_MAJOR, i)); - osst_sysfs_destroy(MKDEV(OSST_MAJOR, i+128)); - tpnt->device = NULL; -+ for (mode = 0; mode < ST_NBR_MODES; ++mode) { -+ devfs_remove("%s/ot%s", SDp->devfs_name, osst_formats[mode]); -+ devfs_remove("%s/ot%sn", SDp->devfs_name, osst_formats[mode]); -+ } -+ devfs_unregister_tape(tpnt->drive->number); - put_disk(tpnt->drive); - os_scsi_tapes[i] = NULL; - osst_nr_dev--; -diff -ur linux-2.6.17/drivers/scsi/scsi.c linux-2.6.17-devfs/drivers/scsi/scsi.c ---- linux-2.6.17/drivers/scsi/scsi.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/scsi/scsi.c 2006-08-25 11:07:42.000000000 -0700 -@@ -48,6 +48,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1247,6 +1248,7 @@ - for_each_possible_cpu(i) - INIT_LIST_HEAD(&per_cpu(scsi_done_q, i)); - -+ devfs_mk_dir("scsi"); - printk(KERN_NOTICE "SCSI subsystem initialized\n"); - return 0; - -@@ -1271,6 +1273,7 @@ - scsi_exit_sysctl(); - scsi_exit_hosts(); - scsi_exit_devinfo(); -+ devfs_remove("scsi"); - scsi_exit_procfs(); - scsi_exit_queue(); - } -diff -ur linux-2.6.17/drivers/scsi/scsi_scan.c linux-2.6.17-devfs/drivers/scsi/scsi_scan.c ---- linux-2.6.17/drivers/scsi/scsi_scan.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/scsi/scsi_scan.c 2006-08-25 11:06:18.000000000 -0700 -@@ -716,8 +716,12 @@ - if (inq_result[7] & 0x10) - sdev->sdtr = 1; - -+ sprintf(sdev->devfs_name, "scsi/host%d/bus%d/target%d/lun%d", -+ sdev->host->host_no, sdev->channel, -+ sdev->id, sdev->lun); -+ - /* -- * End sysfs code. -+ * End driverfs/devfs code. - */ - - if ((sdev->scsi_level >= SCSI_2) && (inq_result[7] & 2) && -diff -ur linux-2.6.17/drivers/scsi/sd.c linux-2.6.17-devfs/drivers/scsi/sd.c ---- linux-2.6.17/drivers/scsi/sd.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/scsi/sd.c 2006-08-25 11:06:18.000000000 -0700 -@@ -1683,6 +1683,8 @@ - 'a' + m1, 'a' + m2, 'a' + m3); - } - -+ strcpy(gd->devfs_name, sdp->devfs_name); -+ - gd->private_data = &sdkp->driver; - gd->queue = sdkp->device->request_queue; - -diff -ur linux-2.6.17/drivers/scsi/sg.c linux-2.6.17-devfs/drivers/scsi/sg.c ---- linux-2.6.17/drivers/scsi/sg.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/scsi/sg.c 2006-08-25 11:06:18.000000000 -0700 -@@ -44,6 +44,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1427,10 +1428,14 @@ - k = error; - sdp = sg_dev_arr[k]; - -+ devfs_mk_cdev(MKDEV(SCSI_GENERIC_MAJOR, k), -+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, -+ "%s/generic", scsidp->devfs_name); - error = cdev_add(cdev, MKDEV(SCSI_GENERIC_MAJOR, k), 1); -- if (error) -+ if (error) { -+ devfs_remove("%s/generic", scsidp->devfs_name); - goto out; -- -+ } - sdp->cdev = cdev; - if (sg_sysfs_valid) { - struct class_device * sg_class_member; -@@ -1520,6 +1525,7 @@ - class_device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, k)); - cdev_del(sdp->cdev); - sdp->cdev = NULL; -+ devfs_remove("%s/generic", scsidp->devfs_name); - put_disk(sdp->disk); - sdp->disk = NULL; - if (NULL == sdp->headfp) -diff -ur linux-2.6.17/drivers/scsi/sr.c linux-2.6.17-devfs/drivers/scsi/sr.c ---- linux-2.6.17/drivers/scsi/sr.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/scsi/sr.c 2006-08-25 11:06:18.000000000 -0700 -@@ -592,6 +592,8 @@ - get_capabilities(cd); - sr_vendor_init(cd); - -+ snprintf(disk->devfs_name, sizeof(disk->devfs_name), -+ "%s/cd", sdev->devfs_name); - disk->driverfs_dev = &sdev->sdev_gendev; - set_capacity(disk, cd->capacity); - disk->private_data = &cd->driver; -diff -ur linux-2.6.17/drivers/scsi/st.c linux-2.6.17-devfs/drivers/scsi/st.c ---- linux-2.6.17/drivers/scsi/st.c 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/drivers/scsi/st.c 2006-08-25 11:06:18.000000000 -0700 -@@ -35,6 +35,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -4053,8 +4054,23 @@ - do_create_class_files(tpnt, dev_num, mode); - } - -+ for (mode = 0; mode < ST_NBR_MODES; ++mode) { -+ /* Make sure that the minor numbers corresponding to the four -+ first modes always get the same names */ -+ i = mode << (4 - ST_NBR_MODE_BITS); -+ /* Rewind entry */ -+ devfs_mk_cdev(MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, 0)), -+ S_IFCHR | S_IRUGO | S_IWUGO, -+ "%s/mt%s", SDp->devfs_name, st_formats[i]); -+ /* No-rewind entry */ -+ devfs_mk_cdev(MKDEV(SCSI_TAPE_MAJOR, TAPE_MINOR(dev_num, mode, 1)), -+ S_IFCHR | S_IRUGO | S_IWUGO, -+ "%s/mt%sn", SDp->devfs_name, st_formats[i]); -+ } -+ disk->number = devfs_register_tape(SDp->devfs_name); -+ - sdev_printk(KERN_WARNING, SDp, - "Attached scsi tape %s\n", tape_name(tpnt)); - printk(KERN_WARNING "%s: try direct i/o: %s (alignment %d B)\n", - tape_name(tpnt), tpnt->try_dio ? "yes" : "no", - queue_dma_alignment(SDp->request_queue) + 1); -@@ -4106,9 +4122,13 @@ - scsi_tapes[i] = NULL; - st_nr_dev--; - write_unlock(&st_dev_arr_lock); -+ devfs_unregister_tape(tpnt->disk->number); - sysfs_remove_link(&tpnt->device->sdev_gendev.kobj, - "tape"); - for (mode = 0; mode < ST_NBR_MODES; ++mode) { -+ j = mode << (4 - ST_NBR_MODE_BITS); -+ devfs_remove("%s/mt%s", SDp->devfs_name, st_formats[j]); -+ devfs_remove("%s/mt%sn", SDp->devfs_name, st_formats[j]); - for (j=0; j < 2; j++) { - class_device_destroy(st_sysfs_class, - MKDEV(SCSI_TAPE_MAJOR, -diff -ur linux-2.6.17/include/scsi/scsi_device.h linux-2.6.17-devfs/include/scsi/scsi_device.h ---- linux-2.6.17/include/scsi/scsi_device.h 2006-06-17 18:49:35.000000000 -0700 -+++ linux-2.6.17-devfs/include/scsi/scsi_device.h 2006-08-25 11:06:18.000000000 -0700 -@@ -74,6 +74,7 @@ - unsigned sector_size; /* size in bytes */ - - void *hostdata; /* available to low-level driver */ -+ char devfs_name[256]; /* devfs junk */ - char type; - char scsi_level; - char inq_periph_qual; /* PQ from INQUIRY data */ diff --git a/target/linux/generic-2.6/patches/000-reinstate-devfs.patch b/target/linux/generic-2.6/patches/000-reinstate-devfs.patch new file mode 100644 index 0000000000..aff55a98ac --- /dev/null +++ b/target/linux/generic-2.6/patches/000-reinstate-devfs.patch @@ -0,0 +1,12377 @@ +diff -urN linux-2.6.19.old/arch/cris/arch-v10/kernel/debugport.c linux-2.6.19.dev/arch/cris/arch-v10/kernel/debugport.c +--- linux-2.6.19.old/arch/cris/arch-v10/kernel/debugport.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/cris/arch-v10/kernel/debugport.c 2006-12-14 03:12:59.000000000 +0100 +@@ -540,7 +540,7 @@ + dummy_driver.init_termios = tty_std_termios; + dummy_driver.init_termios.c_cflag = + B115200 | CS8 | CREAD | HUPCL | CLOCAL; /* is normally B9600 default... */ +- dummy_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; ++ dummy_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; + + dummy_driver.open = dummy_open; + dummy_driver.close = dummy_close; +diff -urN linux-2.6.19.old/arch/cris/arch-v32/kernel/debugport.c linux-2.6.19.dev/arch/cris/arch-v32/kernel/debugport.c +--- linux-2.6.19.old/arch/cris/arch-v32/kernel/debugport.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/cris/arch-v32/kernel/debugport.c 2006-12-14 03:12:59.000000000 +0100 +@@ -352,7 +352,7 @@ + dummy_driver.init_termios = tty_std_termios; + dummy_driver.init_termios.c_cflag = + B115200 | CS8 | CREAD | HUPCL | CLOCAL; /* is normally B9600 default... */ +- dummy_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; ++ dummy_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; + + dummy_driver.open = dummy_open; + dummy_driver.close = dummy_close; +diff -urN linux-2.6.19.old/arch/i386/kernel/microcode.c linux-2.6.19.dev/arch/i386/kernel/microcode.c +--- linux-2.6.19.old/arch/i386/kernel/microcode.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/i386/kernel/microcode.c 2006-12-14 03:12:59.000000000 +0100 +@@ -460,6 +460,7 @@ + static struct miscdevice microcode_dev = { + .minor = MICROCODE_MINOR, + .name = "microcode", ++ .devfs_name = "cpu/microcode", + .fops = µcode_fops, + }; + +diff -urN linux-2.6.19.old/arch/ppc/4xx_io/serial_sicc.c linux-2.6.19.dev/arch/ppc/4xx_io/serial_sicc.c +--- linux-2.6.19.old/arch/ppc/4xx_io/serial_sicc.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/ppc/4xx_io/serial_sicc.c 2006-12-14 03:12:59.000000000 +0100 +@@ -1757,7 +1757,7 @@ + siccnormal_driver->subtype = SERIAL_TYPE_NORMAL; + siccnormal_driver->init_termios = tty_std_termios; + siccnormal_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; +- siccnormal_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; ++ siccnormal_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; + tty_set_operations(siccnormal_driver, &sicc_ops); + + if (tty_register_driver(siccnormal_driver)) +diff -urN linux-2.6.19.old/arch/sparc64/solaris/socksys.c linux-2.6.19.dev/arch/sparc64/solaris/socksys.c +--- linux-2.6.19.old/arch/sparc64/solaris/socksys.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/sparc64/solaris/socksys.c 2006-12-14 03:12:59.000000000 +0100 +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + #include + +@@ -188,6 +189,8 @@ + return ret; + } + ++ devfs_mk_cdev(MKDEV(30, 0), S_IFCHR|S_IRUSR|S_IWUSR, "socksys"); ++ + file = fcheck(ret); + /* N.B. Is this valid? Suppose the f_ops are in a module ... */ + socksys_file_ops = *file->f_op; +@@ -202,4 +205,5 @@ + { + if (unregister_chrdev(30, "socksys")) + printk ("Couldn't unregister socksys character device\n"); ++ devfs_remove ("socksys"); + } +diff -urN linux-2.6.19.old/arch/um/drivers/line.c linux-2.6.19.dev/arch/um/drivers/line.c +--- linux-2.6.19.old/arch/um/drivers/line.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/um/drivers/line.c 2006-12-14 03:12:59.000000000 +0100 +@@ -8,6 +8,7 @@ + #include "linux/list.h" + #include "linux/kd.h" + #include "linux/interrupt.h" ++#include "linux/devfs_fs_kernel.h" + #include "asm/uaccess.h" + #include "chan_kern.h" + #include "irq_user.h" +@@ -653,6 +654,7 @@ + + driver->driver_name = line_driver->name; + driver->name = line_driver->device_name; ++ driver->devfs_name = line_driver->devfs_name; + driver->major = line_driver->major; + driver->minor_start = line_driver->minor_start; + driver->type = line_driver->type; +diff -urN linux-2.6.19.old/arch/um/drivers/ssl.c linux-2.6.19.dev/arch/um/drivers/ssl.c +--- linux-2.6.19.old/arch/um/drivers/ssl.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/um/drivers/ssl.c 2006-12-14 03:12:59.000000000 +0100 +@@ -53,6 +53,7 @@ + static struct line_driver driver = { + .name = "UML serial line", + .device_name = "ttyS", ++ .devfs_name = "tts/", + .major = TTY_MAJOR, + .minor_start = 64, + .type = TTY_DRIVER_TYPE_SERIAL, +diff -urN linux-2.6.19.old/arch/um/drivers/stdio_console.c linux-2.6.19.dev/arch/um/drivers/stdio_console.c +--- linux-2.6.19.old/arch/um/drivers/stdio_console.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/um/drivers/stdio_console.c 2006-12-14 03:12:59.000000000 +0100 +@@ -59,6 +59,7 @@ + static struct line_driver driver = { + .name = "UML console", + .device_name = "tty", ++ .devfs_name = "vc/", + .major = TTY_MAJOR, + .minor_start = 0, + .type = TTY_DRIVER_TYPE_CONSOLE, +diff -urN linux-2.6.19.old/arch/um/drivers/ubd_kern.c linux-2.6.19.dev/arch/um/drivers/ubd_kern.c +--- linux-2.6.19.old/arch/um/drivers/ubd_kern.c 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/um/drivers/ubd_kern.c 2006-12-14 03:12:59.000000000 +0100 +@@ -24,6 +24,7 @@ + #include "linux/blkdev.h" + #include "linux/hdreg.h" + #include "linux/init.h" ++#include "linux/devfs_fs_kernel.h" + #include "linux/cdrom.h" + #include "linux/proc_fs.h" + #include "linux/ctype.h" +@@ -645,10 +646,14 @@ + disk->first_minor = unit << UBD_SHIFT; + disk->fops = &ubd_blops; + set_capacity(disk, size / 512); +- if(major == MAJOR_NR) ++ if(major == MAJOR_NR){ + sprintf(disk->disk_name, "ubd%c", 'a' + unit); +- else ++ sprintf(disk->devfs_name, "ubd/disc%d", unit); ++ } ++ else { + sprintf(disk->disk_name, "ubd_fake%d", unit); ++ sprintf(disk->devfs_name, "ubd_fake/disc%d", unit); ++ } + + /* sysfs register (not for ide fake devices) */ + if (major == MAJOR_NR) { +@@ -853,6 +864,7 @@ + { + int i; + ++ devfs_mk_dir("ubd"); + if (register_blkdev(MAJOR_NR, "ubd")) + return -1; + +@@ -866,6 +878,7 @@ + char name[sizeof("ubd_nnn\0")]; + + snprintf(name, sizeof(name), "ubd_%d", fake_major); ++ devfs_mk_dir(name); + if (register_blkdev(fake_major, "ubd")) + return -1; + } +diff -urN linux-2.6.19.old/arch/um/include/line.h linux-2.6.19.dev/arch/um/include/line.h +--- linux-2.6.19.old/arch/um/include/line.h 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/arch/um/include/line.h 2006-12-14 03:12:59.000000000 +0100 +@@ -17,6 +17,7 @@ + struct line_driver { + char *name; + char *device_name; ++ char *devfs_name; + short major; + short minor_start; + short type; +diff -urN linux-2.6.19.old/Documentation/Changes linux-2.6.19.dev/Documentation/Changes +--- linux-2.6.19.old/Documentation/Changes 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/Documentation/Changes 2006-12-14 03:12:59.000000000 +0100 +@@ -180,8 +180,8 @@ + -------------------- + + A driver has been added to allow updating of Intel IA32 microcode, +-accessible as a normal (misc) character device. If you are not using +-udev you may need to: ++accessible as both a devfs regular file and as a normal (misc) ++character device. If you are not using devfs you may need to: + + mkdir /dev/cpu + mknod /dev/cpu/microcode c 10 184 +@@ -200,9 +200,7 @@ + udev + ---- + udev is a userspace application for populating /dev dynamically with +-only entries for devices actually present. udev replaces the basic +-functionality of devfs, while allowing persistant device naming for +-devices. ++only entries for devices actually present. udev replaces devfs. + + FUSE + ---- +@@ -232,13 +230,18 @@ + enable it to operate over diverse media layers. If you use PPP, + upgrade pppd to at least 2.4.0. + +-If you are not using udev, you must have the device file /dev/ppp ++If you are not using devfs, you must have the device file /dev/ppp + which can be made by: + + mknod /dev/ppp c 108 0 + + as root. + ++If you use devfsd and build ppp support as modules, you will need ++the following in your /etc/devfsd.conf file: ++ ++LOOKUP PPP MODLOAD ++ + Isdn4k-utils + ------------ + +diff -urN linux-2.6.19.old/Documentation/DocBook/kernel-api.tmpl linux-2.6.19.dev/Documentation/DocBook/kernel-api.tmpl +--- linux-2.6.19.old/Documentation/DocBook/kernel-api.tmpl 2006-11-29 22:57:37.000000000 +0100 ++++ linux-2.6.19.dev/Documentation/DocBook/kernel-api.tmpl 2006-12-14 03:12:59.000000000 +0100 +@@ -84,6 +84,9 @@ + !Ekernel/rcupdate.c + + ++ ++ The Device File System ++!Efs/devfs/base.c + + + +diff -urN linux-2.6.19.old/Documentation/filesystems/devfs/boot-options linux-2.6.19.dev/Documentation/filesystems/devfs/boot-options +--- linux-2.6.19.old/Documentation/filesystems/devfs/boot-options 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.19.dev/Documentation/filesystems/devfs/boot-options 2006-12-14 03:12:59.000000000 +0100 +@@ -0,0 +1,65 @@ ++/* -*- auto-fill -*- */ ++ ++ Device File System (devfs) Boot Options ++ ++ Richard Gooch ++ ++ 18-AUG-2001 ++ ++ ++When CONFIG_DEVFS_DEBUG is enabled, you can pass several boot options ++to the kernel to debug devfs. The boot options are prefixed by ++"devfs=", and are separated by commas. Spaces are not allowed. The ++syntax looks like this: ++ ++devfs=,, ++ ++and so on. For example, if you wanted to turn on debugging for module ++load requests and device registration, you would do: ++ ++devfs=dmod,dreg ++ ++You may prefix "no" to any option. This will invert the option. ++ ++ ++Debugging Options ++================= ++ ++These requires CONFIG_DEVFS_DEBUG to be enabled. ++Note that all debugging options have 'd' as the first character. By ++default all options are off. All debugging output is sent to the ++kernel logs. The debugging options do not take effect until the devfs ++version message appears (just prior to the root filesystem being ++mounted). ++ ++These are the options: ++ ++dmod print module load requests to ++ ++dreg print device register requests to ++ ++dunreg print device unregister requests to ++ ++dchange print device change requests to ++ ++dilookup print inode lookup requests ++ ++diget print VFS inode allocations ++ ++diunlink print inode unlinks ++ ++dichange print inode changes ++ ++dimknod print calls to mknod(2) ++ ++dall some debugging turned on ++ ++ ++Other Options ++============= ++ ++These control the default behaviour of devfs. The options are: ++ ++mount mount devfs onto /dev at boot time ++ ++only disable non-devfs device nodes for devfs-capable drivers +diff -urN linux-2.6.19.old/Documentation/filesystems/devfs/ChangeLog linux-2.6.19.dev/Documentation/filesystems/devfs/ChangeLog +--- linux-2.6.19.old/Documentation/filesystems/devfs/ChangeLog 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.19.dev/Documentation/filesystems/devfs/ChangeLog 2006-12-14 03:12:59.000000000 +0100 +@@ -0,0 +1,1977 @@ ++/* -*- auto-fill -*- */ ++=============================================================================== ++Changes for patch v1 ++ ++- creation of devfs ++ ++- modified miscellaneous character devices to support devfs ++=============================================================================== ++Changes for patch v2 ++ ++- bug fix with manual inode creation ++=============================================================================== ++Changes for patch v3 ++ ++- bugfixes ++ ++- documentation improvements ++ ++- created a couple of scripts (one to save&restore a devfs and the ++ other to set up compatibility symlinks) ++ ++- devfs support for SCSI discs. New name format is: sd_hHcCiIlL ++=============================================================================== ++Changes for patch v4 ++ ++- bugfix for the directory reading code ++ ++- bugfix for compilation with kerneld ++ ++- devfs support for generic hard discs ++ ++- rationalisation of the various watchdog drivers ++=============================================================================== ++Changes for patch v5 ++ ++- support for mounting directly from entries in the devfs (it doesn't ++ need to be mounted to do this), including the root filesystem. ++ Mounting of swap partitions also works. Hence, now if you set ++ CONFIG_DEVFS_ONLY to 'Y' then you won't be able to access your discs ++ via ordinary device nodes. Naturally, the default is 'N' so that you ++ can still use your old device nodes. If you want to mount from devfs ++ entries, make sure you use: append = "root=/dev/sd_..." in your ++ lilo.conf. It seems LILO looks for the device number (major&minor) ++ and writes that into the kernel image :-( ++ ++- support for character memory devices (/dev/null, /dev/zero, /dev/full ++ and so on). Thanks to C. Scott Ananian ++=============================================================================== ++Changes for patch v6 ++ ++- support for subdirectories ++ ++- support for symbolic links (created by devfs_mk_symlink(), no ++ support yet for creation via symlink(2)) ++ ++- SCSI disc naming now cast in stone, with the format: ++ /dev/sd/c0b1t2u3 controller=0, bus=1, ID=2, LUN=3, whole disc ++ /dev/sd/c0b1t2u3p4 controller=0, bus=1, ID=2, LUN=3, 4th partition ++ ++- loop devices now appear in devfs ++ ++- tty devices, console, serial ports, etc. now appear in devfs ++ Thanks to C. Scott Ananian ++ ++- bugs with mounting devfs-only devices now fixed ++=============================================================================== ++Changes for patch v7 ++ ++- SCSI CD-ROMS, tapes and generic devices now appear in devfs ++=============================================================================== ++Changes for patch v8 ++ ++- bugfix with no-rewind SCSI tapes ++ ++- RAMDISCs now appear in devfs ++ ++- better cleaning up of devfs entries created by various modules ++ ++- interface change to ++=============================================================================== ++Changes for patch v9 ++ ++- the v8 patch was corrupted somehow, which would affect the patch for ++ linux/fs/filesystems.c ++ I've also fixed the v8 patch file on the WWW ++ ++- MetaDevices (/dev/md*) should now appear in devfs ++=============================================================================== ++Changes for patch v10 ++ ++- bugfix in meta device support for devfs ++ ++- created this ChangeLog file ++ ++- added devfs support to the floppy driver ++ ++- added support for creating sockets in a devfs ++=============================================================================== ++Changes for patch v11 ++ ++- added DEVFS_FL_HIDE_UNREG flag ++ ++- incorporated better patch for ttyname() in libc 5.4.43 from H.J. Lu. ++ ++- interface change to ++ ++- support for creating symlinks with symlink(2) ++ ++- parallel port printer (/dev/lp*) now appears in devfs ++=============================================================================== ++Changes for patch v12 ++ ++- added inode check to function ++ ++- improved devfs support when mounting from devfs ++ ++- added call to <> operation when removing swap areas on ++ devfs devices ++ ++- increased NR_SUPER to 128 to support large numbers of devfs mounts ++ (for chroot(2) gaols) ++ ++- fixed bug in SCSI disc support: was generating incorrect minors if ++ SCSI ID's did not start at 0 and increase by 1 ++ ++- support symlink traversal when mounting root ++=============================================================================== ++Changes for patch v13 ++ ++- added devfs support to soundcard driver ++ Thanks to Eric Dumas and ++ C. Scott Ananian ++ ++- added devfs support to the joystick driver ++ ++- loop driver now has it's own subdirectory "/dev/loop/" ++ ++- created and functions ++ ++- fix problem with SCSI disc compatibility names (sd{a,b,c,d,e,f}) ++ which assumes ID's start at 0 and increase by 1. Also only create ++ devfs entries for SCSI disc partitions which actually exist ++ Show new names in partition check ++ Thanks to Jakub Jelinek ++=============================================================================== ++Changes for patch v14 ++ ++- bug fix in floppy driver: would not compile without ++ CONFIG_DEVFS_FS='Y' ++ Thanks to Jurgen Botz ++ ++- bug fix in loop driver ++ Thanks to C. Scott Ananian ++ ++- do not create devfs entries for printers not configured ++ Thanks to C. Scott Ananian ++ ++- do not create devfs entries for serial ports not present ++ Thanks to C. Scott Ananian ++ ++- ensure is exported from tty_io.c ++ Thanks to C. Scott Ananian ++ ++- allow unregistering of devfs symlink entries ++ ++- fixed bug in SCSI disc naming introduced in last patch version ++=============================================================================== ++Changes for patch v15 ++ ++- ported to kernel 2.1.81 ++=============================================================================== ++Changes for patch v16 ++ ++- created function ++ ++- moved DEVFS_SUPER_MAGIC into header file ++ ++- added DEVFS_FL_HIDE flag ++ ++- created ++ ++- created ++ ++- fixed bugs in searching by major&minor ++ ++- changed interface to , and ++ ++ ++- fixed inode times when symlink created with symlink(2) ++ ++- change tty driver to do auto-creation of devfs entries ++ Thanks to C. Scott Ananian ++ ++- fixed bug in genhd.c: whole disc (non-SCSI) was not registered to ++ devfs ++ ++- updated libc 5.4.43 patch for ttyname() ++=============================================================================== ++Changes for patch v17 ++ ++- added CONFIG_DEVFS_TTY_COMPAT ++ Thanks to C. Scott Ananian ++ ++- bugfix in devfs support for drivers/char/lp.c ++ Thanks to C. Scott Ananian ++ ++- clean up serial driver so that PCMCIA devices unregister correctly ++ Thanks to C. Scott Ananian ++ ++- fixed bug in genhd.c: whole disc (non-SCSI) was not registered to ++ devfs [was missing in patch v16] ++ ++- updated libc 5.4.43 patch for ttyname() [was missing in patch v16] ++ ++- all SCSI devices now registered in /dev/sg ++ ++- support removal of devfs entries via unlink(2) ++=============================================================================== ++Changes for patch v18 ++ ++- added floppy/?u720 floppy entry ++ ++- fixed kerneld support for entries in devfs subdirectories ++ ++- incorporated latest patch for ttyname() in libc 5.4.43 from H.J. Lu. ++=============================================================================== ++Changes for patch v19 ++ ++- bug fix when looking up unregistered entries: kerneld was not called ++ ++- fixes for kernel 2.1.86 (now requires 2.1.86) ++=============================================================================== ++Changes for patch v20 ++ ++- only create available floppy entries ++ Thanks to Andrzej Krzysztofowicz ++ ++- new IDE naming scheme following SCSI format (i.e. /dev/id/c0b0t0u0p1 ++ instead of /dev/hda1) ++ Thanks to Andrzej Krzysztofowicz ++ ++- new XT disc naming scheme following SCSI format (i.e. /dev/xd/c0t0p1 ++ instead of /dev/xda1) ++ Thanks to Andrzej Krzysztofowicz ++ ++- new non-standard CD-ROM names (i.e. /dev/sbp/c#t#) ++ Thanks to Andrzej Krzysztofowicz ++ ++- allow symlink traversal when mounting the root filesystem ++ ++- Create entries for MD devices at MD init ++ Thanks to Christophe Leroy ++=============================================================================== ++Changes for patch v21 ++ ++- ported to kernel 2.1.91 ++=============================================================================== ++Changes for patch v22 ++ ++- SCSI host number patch ("scsihosts=" kernel option) ++ Thanks to Andrzej Krzysztofowicz ++=============================================================================== ++Changes for patch v23 ++ ++- Fixed persistence bug with device numbers for manually created ++ device files ++ ++- Fixed problem with recreating symlinks with different content ++ ++- Added CONFIG_DEVFS_MOUNT (mount devfs on /dev at boot time) ++=============================================================================== ++Changes for patch v24 ++ ++- Switched from CONFIG_KERNELD to CONFIG_KMOD: module autoloading ++ should now work again ++ ++- Hide entries which are manually unlinked ++ ++- Always invalidate devfs dentry cache when registering entries ++ ++- Support removal of devfs directories via rmdir(2) ++ ++- Ensure directories created by are visible ++ ++- Default no access for "other" for floppy device ++=============================================================================== ++Changes for patch v25 ++ ++- Updates to CREDITS file and minor IDE numbering change ++ Thanks to Andrzej Krzysztofowicz ++ ++- Invalidate devfs dentry cache when making directories ++ ++- Invalidate devfs dentry cache when removing entries ++ ++- More informative message if root FS mount fails when devfs ++ configured ++ ++- Fixed persistence bug with fifos ++=============================================================================== ++Changes for patch v26 ++ ++- ported to kernel 2.1.97 ++ ++- Changed serial directory from "/dev/serial" to "/dev/tts" and ++ "/dev/consoles" to "/dev/vc" to be more friendly to new procps ++=============================================================================== ++Changes for patch v27 ++ ++- Added support for IDE4 and IDE5 ++ Thanks to Andrzej Krzysztofowicz ++ ++- Documented "scsihosts=" boot parameter ++ ++- Print process command when debugging kerneld/kmod ++ ++- Added debugging for register/unregister/change operations ++ ++- Added "devfs=" boot options ++ ++- Hide unregistered entries by default ++=============================================================================== ++Changes for patch v28 ++ ++- No longer lock/unlock superblock in (cope with ++ recent VFS interface change) ++ ++- Do not automatically change ownership/protection of /dev/tty ++ ++- Drop negative dentries when they are released ++ ++- Manage dcache more efficiently ++=============================================================================== ++Changes for patch v29 ++ ++- Added DEVFS_FL_AUTO_DEVNUM flag ++=============================================================================== ++Changes for patch v30 ++ ++- No longer set unnecessary methods ++ ++- Ported to kernel 2.1.99-pre3 ++=============================================================================== ++Changes for patch v31 ++ ++- Added PID display to debugging message ++ ++- Added "diread" and "diwrite" options ++ ++- Ported to kernel 2.1.102 ++ ++- Fixed persistence problem with permissions ++=============================================================================== ++Changes for patch v32 ++ ++- Fixed devfs support in drivers/block/md.c ++=============================================================================== ++Changes for patch v33 ++ ++- Support legacy device nodes ++ ++- Fixed bug where recreated inodes were hidden ++ ++- New IDE naming scheme: everything is under /dev/ide ++=============================================================================== ++Changes for patch v34 ++ ++- Improved debugging in ++ ++- Prevent duplicate calls to in SCSI layer ++ ++- No longer free old dentries in ++ ++- Free all dentries for a given entry when deleting inodes ++=============================================================================== ++Changes for patch v35 ++ ++- Ported to kernel 2.1.105 (sound driver changes) ++=============================================================================== ++Changes for patch v36 ++ ++- Fixed sound driver port ++=============================================================================== ++Changes for patch v37 ++ ++- Minor documentation tweaks ++=============================================================================== ++Changes for patch v38 ++ ++- More documentation tweaks ++ ++- Fix for sound driver port ++ ++- Removed ttyname-patch (grab libc 5.4.44 instead) ++ ++- Ported to kernel 2.1.107-pre2 (loop driver fix) ++=============================================================================== ++Changes for patch v39 ++ ++- Ported to kernel 2.1.107 (hd.c hunk broke due to spelling "fixes"). Sigh ++ ++- Removed many #ifdef's, replaced with trickery in include/devfs_fs.h ++=============================================================================== ++Changes for patch v40 ++ ++- Fix for sound driver port ++ ++- Limit auto-device numbering to majors 128 to 239 ++=============================================================================== ++Changes for patch v41 ++ ++- Fixed inode times persistence problem ++=============================================================================== ++Changes for patch v42 ++ ++- Ported to kernel 2.1.108 (drivers/scsi/hosts.c hunk broke) ++=============================================================================== ++Changes for patch v43 ++ ++- Fixed spelling in debug ++ ++- Fixed bug in parsing "dilookup" ++ ++- More #ifdef's removed ++ ++- Supported Sparc keyboard (/dev/kbd) ++ ++- Supported DSP56001 digital signal processor (/dev/dsp56k) ++ ++- Supported Apple Desktop Bus (/dev/adb) ++ ++- Supported Coda network file system (/dev/cfs*) ++=============================================================================== ++Changes for patch v44 ++ ++- Fixed devfs inode leak when manually recreating inodes ++ ++- Fixed permission persistence problem when recreating inodes ++=============================================================================== ++Changes for patch v45 ++ ++- Ported to kernel 2.1.110 ++=============================================================================== ++Changes for patch v46 ++ ++- Ported to kernel 2.1.112-pre1 ++ ++- Removed harmless "unused variable" compiler warning ++ ++- Fixed modes for manually recreated device nodes ++=============================================================================== ++Changes for patch v47 ++ ++- Added NULL devfs inode warning in ++ ++- Force all inode nlink values to 1 ++=============================================================================== ++Changes for patch v48 ++ ++- Added "dimknod" option ++ ++- Set inode nlink to 0 when freeing dentries ++ ++- Added support for virtual console capture devices (/dev/vcs*) ++ Thanks to Dennis Hou ++ ++- Fixed modes for manually recreated symlinks ++=============================================================================== ++Changes for patch v49 ++ ++- Ported to kernel 2.1.113 ++=============================================================================== ++Changes for patch v50 ++ ++- Fixed bugs in recreated directories and symlinks ++=============================================================================== ++Changes for patch v51 ++ ++- Improved robustness of rc.devfs script ++ Thanks to Roderich Schupp ++ ++- Fixed bugs in recreated device nodes ++ ++- Fixed bug in currently unused ++ ++- Defined new type ++ ++- Improved debugging when getting entries ++ ++- Fixed bug where directories could be emptied ++ ++- Ported to kernel 2.1.115 ++=============================================================================== ++Changes for patch v52 ++ ++- Replaced dummy .epoch inode with .devfsd character device ++ ++- Modified rc.devfs to take account of above change ++ ++- Removed spurious driver warning messages when CONFIG_DEVFS_FS=n ++ ++- Implemented devfsd protocol revision 0 ++=============================================================================== ++Changes for patch v53 ++ ++- Ported to kernel 2.1.116 (kmod change broke hunk) ++ ++- Updated Documentation/Configure.help ++ ++- Test and tty pattern patch for rc.devfs script ++ Thanks to Roderich Schupp ++ ++- Added soothing message to warning in ++=============================================================================== ++Changes for patch v54 ++ ++- Ported to kernel 2.1.117 ++ ++- Fixed default permissions in sound driver ++ ++- Added support for frame buffer devices (/dev/fb*) ++=============================================================================== ++Changes for patch v55 ++ ++- Ported to kernel 2.1.119 ++ ++- Use GCC extensions for structure initialisations ++ ++- Implemented async open notification ++ ++- Incremented devfsd protocol revision to 1 ++=============================================================================== ++Changes for patch v56 ++ ++- Ported to kernel 2.1.120-pre3 ++ ++- Moved async open notification to end of ++=============================================================================== ++Changes for patch v57 ++ ++- Ported to kernel 2.1.121 ++ ++- Prepended "/dev/" to module load request ++ ++- Renamed to ++ ++- Created sample modules.conf file ++=============================================================================== ++Changes for patch v58 ++ ++- Fixed typo "AYSNC" -> "ASYNC" ++=============================================================================== ++Changes for patch v59 ++ ++- Added open flag for files ++=============================================================================== ++Changes for patch v60 ++ ++- Ported to kernel 2.1.123-pre2 ++=============================================================================== ++Changes for patch v61 ++ ++- Set i_blocks=0 and i_blksize=1024 in ++=============================================================================== ++Changes for patch v62 ++ ++- Ported to kernel 2.1.123 ++=============================================================================== ++Changes for patch v63 ++ ++- Ported to kernel 2.1.124-pre2 ++=============================================================================== ++Changes for patch v64 ++ ++- Fixed Unix98 pty support ++ ++- Increased buffer size in to avoid crash and ++ burn ++=============================================================================== ++Changes for patch v65 ++ ++- More Unix98 pty support fixes ++ ++- Added test for empty <> in ++ ++- Renamed to and published ++ ++- Created /dev/root symlink ++ Thanks to Roderich Schupp ++ with further modifications by me ++=============================================================================== ++Changes for patch v66 ++ ++- Yet more Unix98 pty support fixes (now tested) ++ ++- Created ++ ++- Support media change checks when CONFIG_DEVFS_ONLY=y ++ ++- Abolished Unix98-style PTY names for old PTY devices ++=============================================================================== ++Changes for patch v67 ++ ++- Added inline declaration for dummy ++ ++- Removed spurious "unable to register... in devfs" messages when ++ CONFIG_DEVFS_FS=n ++ ++- Fixed misc. devices when CONFIG_DEVFS_FS=n ++ ++- Limit auto-device numbering to majors 144 to 239 ++=============================================================================== ++Changes for patch v68 ++ ++- Hide unopened virtual consoles from directory listings ++ ++- Added support for video capture devices ++ ++- Ported to kernel 2.1.125 ++=============================================================================== ++Changes for patch v69 ++ ++- Fix for CONFIG_VT=n ++=============================================================================== ++Changes for patch v70 ++ ++- Added support for non-OSS/Free sound cards ++=============================================================================== ++Changes for patch v71 ++ ++- Ported to kernel 2.1.126-pre2 ++=============================================================================== ++Changes for patch v72 ++ ++- #ifdef's for CONFIG_DEVFS_DISABLE_OLD_NAMES removed ++=============================================================================== ++Changes for patch v73 ++ ++- CONFIG_DEVFS_DISABLE_OLD_NAMES replaced with "nocompat" boot option ++ ++- CONFIG_DEVFS_BOOT_OPTIONS removed: boot options always available ++=============================================================================== ++Changes for patch v74 ++ ++- Removed CONFIG_DEVFS_MOUNT and "mount" boot option and replaced with ++ "nomount" boot option ++ ++- Documentation updates ++ ++- Updated sample modules.conf ++=============================================================================== ++Changes for patch v75 ++ ++- Updated sample modules.conf ++ ++- Remount devfs after initrd finishes ++ ++- Ported to kernel 2.1.127 ++ ++- Added support for ISDN ++ Thanks to Christophe Leroy ++=============================================================================== ++Changes for patch v76 ++ ++- Updated an email address in ChangeLog ++ ++- CONFIG_DEVFS_ONLY replaced with "only" boot option ++=============================================================================== ++Changes for patch v77 ++ ++- Added DEVFS_FL_REMOVABLE flag ++ ++- Check for disc change when listing directories with removable media ++ devices ++ ++- Use DEVFS_FL_REMOVABLE in sd.c ++ ++- Ported to kernel 2.1.128 ++=============================================================================== ++Changes for patch v78 ++ ++- Only call on first call to ++ ++- Ported to kernel 2.1.129-pre5 ++ ++- ISDN support improvements ++ Thanks to Christophe Leroy ++=============================================================================== ++Changes for patch v79 ++ ++- Ported to kernel 2.1.130 ++ ++- Renamed miscdevice "apm" to "apm_bios" to be consistent with ++ devices.txt ++=============================================================================== ++Changes for patch v80 ++ ++- Ported to kernel 2.1.131 ++ ++- Updated for VFS change in 2.1.131 ++=============================================================================== ++Changes for patch v81 ++ ++- Fixed permissions on /dev/ptmx ++=============================================================================== ++Changes for patch v82 ++ ++- Ported to kernel 2.1.132-pre4 ++ ++- Changed initial permissions on /dev/pts/* ++ ++- Created ++ ++- Added "symlinks" boot option ++ ++- Changed devfs_register_blkdev() back to register_blkdev() for IDE ++ ++- Check for partitions on removable media in ++=============================================================================== ++Changes for patch v83 ++ ++- Fixed support for ramdisc when using string-based root FS name ++ ++- Ported to kernel 2.2.0-pre1 ++=============================================================================== ++Changes for patch v84 ++ ++- Ported to kernel 2.2.0-pre7 ++=============================================================================== ++Changes for patch v85 ++ ++- Compile fixes for driver/sound/sound_common.c (non-module) and ++ drivers/isdn/isdn_common.c ++ Thanks to Christophe Leroy ++ ++- Added support for registering regular files ++ ++- Created ++ ++- Added /dev/cpu/mtrr as an alternative interface to /proc/mtrr ++ ++- Update devfs inodes from entries if not changed through FS ++=============================================================================== ++Changes for patch v86 ++ ++- Ported to kernel 2.2.0-pre9 ++=============================================================================== ++Changes for patch v87 ++ ++- Fixed bug when mounting non-devfs devices in a devfs ++=============================================================================== ++Changes for patch v88 ++ ++- Fixed to only initialise temporary inodes ++ ++- Trap for NULL fops in ++ ++- Return -ENODEV in for non-driver inodes ++ ++- Fixed bug when unswapping non-devfs devices in a devfs ++=============================================================================== ++Changes for patch v89 ++ ++- Switched to C data types in include/linux/devfs_fs.h ++ ++- Switched from PATH_MAX to DEVFS_PATHLEN ++ ++- Updated Documentation/filesystems/devfs/modules.conf to take account ++ of reverse scanning (!) by modprobe ++ ++- Ported to kernel 2.2.0 ++=============================================================================== ++Changes for patch v90 ++ ++- CONFIG_DEVFS_DISABLE_OLD_TTY_NAMES replaced with "nottycompat" boot ++ option ++ ++- CONFIG_DEVFS_TTY_COMPAT removed: existing "symlinks" boot option now ++ controls this. This means you must have libc 5.4.44 or later, or a ++ recent version of libc 6 if you use the "symlinks" option ++=============================================================================== ++Changes for patch v91 ++ ++- Switch from to in ++ drivers/char/vc_screen.c to fix problems with Midnight Commander ++=============================================================================== ++Changes for patch v92 ++ ++- Ported to kernel 2.2.2-pre5 ++=============================================================================== ++Changes for patch v93 ++ ++- Modified in drivers/scsi/sd.c to cope with devices that ++ don't exist (which happens with new RAID autostart code printk()s) ++=============================================================================== ++Changes for patch v94 ++ ++- Fixed bug in joystick driver: only first joystick was registered ++=============================================================================== ++Changes for patch v95 ++ ++- Fixed another bug in joystick driver ++ ++- Fixed to not overrun event buffer ++=============================================================================== ++Changes for patch v96 ++ ++- Ported to kernel 2.2.5-2 ++ ++- Created ++ ++- Fixed bugs: compatibility entries were not unregistered for: ++ loop driver ++ floppy driver ++ RAMDISC driver ++ IDE tape driver ++ SCSI CD-ROM driver ++ SCSI HDD driver ++=============================================================================== ++Changes for patch v97 ++ ++- Fixed bugs: compatibility entries were not unregistered for: ++ ALSA sound driver ++ partitions in generic disc driver ++ ++- Don't return unregistred entries in ++ ++- Panic in if entry unregistered ++ ++- Don't panic in for duplicates ++=============================================================================== ++Changes for patch v98 ++ ++- Don't unregister already unregistered entries in ++ ++- Register entry in ++ ++- Unregister entry in ++ ++- Changed to in drivers/char/tty_io.c ++ ++- Ported to kernel 2.2.7 ++=============================================================================== ++Changes for patch v99 ++ ++- Ported to kernel 2.2.8 ++ ++- Fixed bug in drivers/scsi/sd.c when >16 SCSI discs ++ ++- Disable warning messages when unable to read partition table for ++ removable media ++=============================================================================== ++Changes for patch v100 ++ ++- Ported to kernel 2.3.1-pre5 ++ ++- Added "oops-on-panic" boot option ++ ++- Improved debugging in and ++ ++- Register entry in ++ ++- Unregister entry in ++ ++- Register entry in ++ ++- Unregister entry in ++ ++- Added support for ALSA drivers ++=============================================================================== ++Changes for patch v101 ++ ++- Ported to kernel 2.3.2 ++=============================================================================== ++Changes for patch v102 ++ ++- Update serial driver to register PCMCIA entries ++ Thanks to Roch-Alexandre Nomine-Beguin ++ ++- Updated an email address in ChangeLog ++ ++- Hide virtual console capture entries from directory listings when ++ corresponding console device is not open ++=============================================================================== ++Changes for patch v103 ++ ++- Ported to kernel 2.3.3 ++=============================================================================== ++Changes for patch v104 ++ ++- Added documentation for some functions ++ ++- Added "doc" target to fs/devfs/Makefile ++ ++- Added "v4l" directory for video4linux devices ++ ++- Replaced call to in with call to ++ ++ ++- Moved registration for sr and sg drivers from detect() to attach() ++ methods ++ ++- Register entries in and unregister in ++ ++- Work around IDE driver treating CD-ROM as gendisk ++ ++- Use instead of in rc.devfs ++ ++- Updated ToDo list ++ ++- Removed "oops-on-panic" boot option: now always Oops ++=============================================================================== ++Changes for patch v105 ++ ++- Unregister SCSI host from in ++ Thanks to Zoltán Böszörményi ++ ++- Don't save /dev/log in rc.devfs ++ ++- Ported to kernel 2.3.4-pre1 ++=============================================================================== ++Changes for patch v106 ++ ++- Fixed silly typo in drivers/scsi/st.c ++ ++- Improved debugging in ++=============================================================================== ++Changes for patch v107 ++ ++- Added "diunlink" and "nokmod" boot options ++ ++- Removed superfluous warning message in ++=============================================================================== ++Changes for patch v108 ++ ++- Remove entries when unloading sound module ++=============================================================================== ++Changes for patch v109 ++ ++- Ported to kernel 2.3.6-pre2 ++=============================================================================== ++Changes for patch v110 ++ ++- Took account of change to ++=============================================================================== ++Changes for patch v111 ++ ++- Created separate event queue for each mounted devfs ++ ++- Removed ++ ++- Created new ioctl()s for devfsd ++ ++- Incremented devfsd protocol revision to 3 ++ ++- Fixed bug when re-creating directories: contents were lost ++ ++- Block access to inodes until devfsd updates permissions ++=============================================================================== ++Changes for patch v112 ++ ++- Modified patch so it applies against 2.3.5 and 2.3.6 ++ ++- Updated an email address in ChangeLog ++ ++- Do not automatically change ownership/protection of /dev/tty ++ ++- Updated sample modules.conf ++ ++- Switched to sending process uid/gid to devfsd ++ ++- Renamed to ++ ++- Added DEVFSD_NOTIFY_LOOKUP event ++ ++- Added DEVFSD_NOTIFY_CHANGE event ++ ++- Added DEVFSD_NOTIFY_CREATE event ++ ++- Incremented devfsd protocol revision to 4 ++ ++- Moved kernel-specific stuff to include/linux/devfs_fs_kernel.h ++=============================================================================== ++Changes for patch v113 ++ ++- Ported to kernel 2.3.9 ++ ++- Restricted permissions on some block devices ++=============================================================================== ++Changes for patch v114 ++ ++- Added support for /dev/netlink ++ Thanks to Dennis Hou ++ ++- Return EISDIR rather than EINVAL for read(2) on directories ++ ++- Ported to kernel 2.3.10 ++=============================================================================== ++Changes for patch v115 ++ ++- Added support for all remaining character devices ++ Thanks to Dennis Hou ++ ++- Cleaned up netlink support ++=============================================================================== ++Changes for patch v116 ++ ++- Added support for /dev/parport%d ++ Thanks to Tim Waugh ++ ++- Fixed parallel port ATAPI tape driver ++ ++- Fixed Atari SLM laser printer driver ++=============================================================================== ++Changes for patch v117 ++ ++- Added support for COSA card ++ Thanks to Dennis Hou ++ ++- Fixed drivers/char/ppdev.c: missing #include ++ ++- Fixed drivers/char/ftape/zftape/zftape-init.c ++ Thanks to Vladimir Popov ++=============================================================================== ++Changes for patch v118 ++ ++- Ported to kernel 2.3.15-pre3 ++ ++- Fixed bug in loop driver ++ ++- Unregister /dev/lp%d entries in drivers/char/lp.c ++ Thanks to Maciej W. Rozycki ++=============================================================================== ++Changes for patch v119 ++ ++- Ported to kernel 2.3.16 ++=============================================================================== ++Changes for patch v120 ++ ++- Fixed bug in drivers/scsi/scsi.c ++ ++- Added /dev/ppp ++ Thanks to Dennis Hou ++ ++- Ported to kernel 2.3.17 ++=============================================================================== ++Changes for patch v121 ++ ++- Fixed bug in drivers/block/loop.c ++ ++- Ported to kernel 2.3.18 ++=============================================================================== ++Changes for patch v122 ++ ++- Ported to kernel 2.3.19 ++=============================================================================== ++Changes for patch v123 ++ ++- Ported to kernel 2.3.20 ++=============================================================================== ++Changes for patch v124 ++ ++- Ported to kernel 2.3.21 ++=============================================================================== ++Changes for patch v125 ++ ++- Created , , ++ and ++ Added <> parameter to , , ++ and ++ Work sponsored by SGI ++ ++- Fixed apparent bug in COSA driver ++ ++- Re-instated "scsihosts=" boot option ++=============================================================================== ++Changes for patch v126 ++ ++- Always create /dev/pts if CONFIG_UNIX98_PTYS=y ++ ++- Fixed call to in drivers/block/ide-disk.c ++ Thanks to Dennis Hou ++ ++- Allow multiple unregistrations ++ ++- Created /dev/scsi hierarchy ++ Work sponsored by SGI ++=============================================================================== ++Changes for patch v127 ++ ++Work sponsored by SGI ++ ++- No longer disable devpts if devfs enabled (caveat emptor) ++ ++- Added flags array to struct gendisk and removed code from ++ drivers/scsi/sd.c ++ ++- Created /dev/discs hierarchy ++=============================================================================== ++Changes for patch v128 ++ ++Work sponsored by SGI ++ ++- Created /dev/cdroms hierarchy ++=============================================================================== ++Changes for patch v129 ++ ++Work sponsored by SGI ++ ++- Removed compatibility entries for sound devices ++ ++- Removed compatibility entries for printer devices ++ ++- Removed compatibility entries for video4linux devices ++ ++- Removed compatibility entries for parallel port devices ++ ++- Removed compatibility entries for frame buffer devices ++=============================================================================== ++Changes for patch v130 ++ ++Work sponsored by SGI ++ ++- Added major and minor number to devfsd protocol ++ ++- Incremented devfsd protocol revision to 5 ++ ++- Removed compatibility entries for SoundBlaster CD-ROMs ++ ++- Removed compatibility entries for netlink devices ++ ++- Removed compatibility entries for SCSI generic devices ++ ++- Removed compatibility entries for SCSI tape devices ++=============================================================================== ++Changes for patch v131 ++ ++Work sponsored by SGI ++ ++- Support info pointer for all devfs entry types ++ ++- Added <> parameter to and ++ ++- Removed /dev/st hierarchy ++ ++- Removed /dev/sg hierarchy ++ ++- Removed compatibility entries for loop devices ++ ++- Removed compatibility entries for IDE tape devices ++ ++- Removed compatibility entries for SCSI CD-ROMs ++ ++- Removed /dev/sr hierarchy ++=============================================================================== ++Changes for patch v132 ++ ++Work sponsored by SGI ++ ++- Removed compatibility entries for floppy devices ++ ++- Removed compatibility entries for RAMDISCs ++ ++- Removed compatibility entries for meta-devices ++ ++- Removed compatibility entries for SCSI discs ++ ++- Created ++ ++- Removed /dev/sd hierarchy ++ ++- Support "../" when searching devfs namespace ++ ++- Created /dev/ide/host* hierarchy ++ ++- Supported IDE hard discs in /dev/ide/host* hierarchy ++ ++- Removed compatibility entries for IDE discs ++ ++- Removed /dev/ide/hd hierarchy ++ ++- Supported IDE CD-ROMs in /dev/ide/host* hierarchy ++ ++- Removed compatibility entries for IDE CD-ROMs ++ ++- Removed /dev/ide/cd hierarchy ++=============================================================================== ++Changes for patch v133 ++ ++Work sponsored by SGI ++ ++- Created ++ ++- Fixed bug in fs/partitions/check.c when rescanning ++=============================================================================== ++Changes for patch v134 ++ ++Work sponsored by SGI ++ ++- Removed /dev/sd, /dev/sr, /dev/st and /dev/sg directories ++ ++- Removed /dev/ide/hd directory ++ ++- Exported ++ ++- Created and /dev/tapes hierarchy ++ ++- Removed /dev/ide/mt hierarchy ++ ++- Removed /dev/ide/fd hierarchy ++ ++- Ported to kernel 2.3.25 ++=============================================================================== ++Changes for patch v135 ++ ++Work sponsored by SGI ++ ++- Removed compatibility entries for virtual console capture devices ++ ++- Removed unused ++ ++- Removed compatibility entries for serial devices ++ ++- Removed compatibility entries for console devices ++ ++- Do not hide entries from devfsd or children ++ ++- Removed DEVFS_FL_TTY_COMPAT flag ++ ++- Removed "nottycompat" boot option ++ ++- Removed ++=============================================================================== ++Changes for patch v136 ++ ++Work sponsored by SGI ++ ++- Moved BSD pty devices to /dev/pty ++ ++- Added DEVFS_FL_WAIT flag ++=============================================================================== ++Changes for patch v137 ++ ++Work sponsored by SGI ++ ++- Really fixed bug in fs/partitions/check.c when rescanning ++ ++- Support new "disc" naming scheme in ++ ++- Allow NULL fops in ++ ++- Removed redundant name functions in SCSI disc and IDE drivers ++=============================================================================== ++Changes for patch v138 ++ ++Work sponsored by SGI ++ ++- Fixed old bugs in drivers/block/paride/pt.c, drivers/char/tpqic02.c, ++ drivers/net/wan/cosa.c and drivers/scsi/scsi.c ++ Thanks to Sergey Kubushin ++ ++- Fall back to major table if NULL fops given to ++=============================================================================== ++Changes for patch v139 ++ ++Work sponsored by SGI ++ ++- Corrected and moved and declarations ++ from arch/alpha/kernel/osf_sys.c to include/linux/fs.h ++ ++- Removed name function from struct gendisk ++ ++- Updated devfs FAQ ++=============================================================================== ++Changes for patch v140 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.27 ++=============================================================================== ++Changes for patch v141 ++ ++Work sponsored by SGI ++ ++- Bug fix in arch/m68k/atari/joystick.c ++ ++- Moved ISDN and capi devices to /dev/isdn ++=============================================================================== ++Changes for patch v142 ++ ++Work sponsored by SGI ++ ++- Bug fix in drivers/block/ide-probe.c (patch confusion) ++=============================================================================== ++Changes for patch v143 ++ ++Work sponsored by SGI ++ ++- Bug fix in drivers/block/blkpg.c:partition_name() ++=============================================================================== ++Changes for patch v144 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.29 ++ ++- Removed calls to from cdu31a, cm206, mcd and mcdx ++ CD-ROM drivers: generic driver handles this now ++ ++- Moved joystick devices to /dev/joysticks ++=============================================================================== ++Changes for patch v145 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.30-pre3 ++ ++- Register whole-disc entry even for invalid partition tables ++ ++- Fixed bug in mounting root FS when initrd enabled ++ ++- Fixed device entry leak with IDE CD-ROMs ++ ++- Fixed compile problem with drivers/isdn/isdn_common.c ++ ++- Moved COSA devices to /dev/cosa ++ ++- Support fifos when unregistering ++ ++- Created and used in many drivers ++ ++- Moved Coda devices to /dev/coda ++ ++- Moved parallel port IDE tapes to /dev/pt ++ ++- Moved parallel port IDE generic devices to /dev/pg ++=============================================================================== ++Changes for patch v146 ++ ++Work sponsored by SGI ++ ++- Removed obsolete DEVFS_FL_COMPAT and DEVFS_FL_TOLERANT flags ++ ++- Fixed compile problem with fs/coda/psdev.c ++ ++- Reinstate change to in ++ drivers/block/ide-probe.c now that fs/isofs/inode.c is fixed ++ ++- Switched to in drivers/block/floppy.c, ++ drivers/scsi/sr.c and drivers/block/md.c ++ ++- Moved DAC960 devices to /dev/dac960 ++=============================================================================== ++Changes for patch v147 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.32-pre4 ++=============================================================================== ++Changes for patch v148 ++ ++Work sponsored by SGI ++ ++- Removed kmod support: use devfsd instead ++ ++- Moved miscellaneous character devices to /dev/misc ++=============================================================================== ++Changes for patch v149 ++ ++Work sponsored by SGI ++ ++- Ensure include/linux/joystick.h is OK for user-space ++ ++- Improved debugging in ++ ++- Ensure dentries created by devfsd will be cleaned up ++=============================================================================== ++Changes for patch v150 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.34 ++=============================================================================== ++Changes for patch v151 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.35-pre1 ++ ++- Created ++=============================================================================== ++Changes for patch v152 ++ ++Work sponsored by SGI ++ ++- Updated sample modules.conf ++ ++- Ported to kernel 2.3.36-pre1 ++=============================================================================== ++Changes for patch v153 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.42 ++ ++- Removed ++=============================================================================== ++Changes for patch v154 ++ ++Work sponsored by SGI ++ ++- Took account of device number changes for /dev/fb* ++=============================================================================== ++Changes for patch v155 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.43-pre8 ++ ++- Moved /dev/tty0 to /dev/vc/0 ++ ++- Moved sequence number formatting from <_tty_make_name> to drivers ++=============================================================================== ++Changes for patch v156 ++ ++Work sponsored by SGI ++ ++- Fixed breakage in drivers/scsi/sd.c due to recent SCSI changes ++=============================================================================== ++Changes for patch v157 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.45 ++=============================================================================== ++Changes for patch v158 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.46-pre2 ++=============================================================================== ++Changes for patch v159 ++ ++Work sponsored by SGI ++ ++- Fixed drivers/block/md.c ++ Thanks to Mike Galbraith ++ ++- Documentation fixes ++ ++- Moved device registration from to ++ Thanks to Tim Waugh ++=============================================================================== ++Changes for patch v160 ++ ++Work sponsored by SGI ++ ++- Fixed drivers/char/joystick/joystick.c ++ Thanks to Vojtech Pavlik ++ ++- Documentation updates ++ ++- Fixed arch/i386/kernel/mtrr.c if procfs and devfs not enabled ++ ++- Fixed drivers/char/stallion.c ++=============================================================================== ++Changes for patch v161 ++ ++Work sponsored by SGI ++ ++- Remove /dev/ide when ide-mod is unloaded ++ ++- Fixed bug in drivers/block/ide-probe.c when secondary but no primary ++ ++- Added DEVFS_FL_NO_PERSISTENCE flag ++ ++- Used new DEVFS_FL_NO_PERSISTENCE flag for Unix98 pty slaves ++ ++- Removed unnecessary call to in ++ ++ ++- Only set auto-ownership for /dev/pty/s* ++=============================================================================== ++Changes for patch v162 ++ ++Work sponsored by SGI ++ ++- Set inode->i_size to correct size for symlinks ++ Thanks to Jeremy Fitzhardinge ++ ++- Only give lookup() method to directories to comply with new VFS ++ assumptions ++ ++- Remove unnecessary tests in symlink methods ++ ++- Don't kill existing block ops in ++ ++- Restore auto-ownership for /dev/pty/m* ++=============================================================================== ++Changes for patch v163 ++ ++Work sponsored by SGI ++ ++- Don't create missing directories in ++ ++- Removed Documentation/filesystems/devfs/mk-devlinks ++ ++- Updated Documentation/filesystems/devfs/README ++=============================================================================== ++Changes for patch v164 ++ ++Work sponsored by SGI ++ ++- Fixed CONFIG_DEVFS breakage in drivers/char/serial.c introduced in ++ linux-2.3.99-pre6-7 ++=============================================================================== ++Changes for patch v165 ++ ++Work sponsored by SGI ++ ++- Ported to kernel 2.3.99-pre6 ++=============================================================================== ++Changes for patch v166 ++ ++Work sponsored by SGI ++ ++- Added CONFIG_DEVFS_MOUNT ++=============================================================================== ++Changes for patch v167 ++ ++Work sponsored by SGI ++ ++- Updated Documentation/filesystems/devfs/README ++ ++- Updated sample modules.conf ++=============================================================================== ++Changes for patch v168 ++ ++Work sponsored by SGI ++ ++- Disabled multi-mount capability (use VFS bindings instead) ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v169 ++ ++Work sponsored by SGI ++ ++- Removed multi-mount code ++ ++- Removed compatibility macros: VFS has changed too much ++=============================================================================== ++Changes for patch v170 ++ ++Work sponsored by SGI ++ ++- Updated README from master HTML file ++ ++- Merged devfs inode into devfs entry ++=============================================================================== ++Changes for patch v171 ++ ++Work sponsored by SGI ++ ++- Updated sample modules.conf ++ ++- Removed dead code in which used to call ++ ++ ++- Ported to kernel 2.4.0-test2-pre3 ++=============================================================================== ++Changes for patch v172 ++ ++Work sponsored by SGI ++ ++- Changed interface to ++ ++- Changed interface to ++=============================================================================== ++Changes for patch v173 ++ ++Work sponsored by SGI ++ ++- Simplified interface to ++ ++- Simplified interface to ++ ++- Simplified interface to ++=============================================================================== ++Changes for patch v174 ++ ++Work sponsored by SGI ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v175 ++ ++Work sponsored by SGI ++ ++- DocBook update for fs/devfs/base.c ++ Thanks to Tim Waugh ++ ++- Removed stale fs/tunnel.c (was never used or completed) ++=============================================================================== ++Changes for patch v176 ++ ++Work sponsored by SGI ++ ++- Updated ToDo list ++ ++- Removed sample modules.conf: now distributed with devfsd ++ ++- Updated README from master HTML file ++ ++- Ported to kernel 2.4.0-test3-pre4 (which had devfs-patch-v174) ++=============================================================================== ++Changes for patch v177 ++ ++- Updated README from master HTML file ++ ++- Documentation cleanups ++ ++- Ensure terminates string for root entry ++ Thanks to Tim Jansen ++ ++- Exported to modules ++ ++- Make send events to devfsd ++ ++- Cleaned up option processing in ++ ++- Fixed bugs in handling symlinks: could leak or cause Oops ++ ++- Cleaned up directory handling by separating fops ++ Thanks to Alexander Viro ++=============================================================================== ++Changes for patch v178 ++ ++- Fixed handling of inverted options in ++=============================================================================== ++Changes for patch v179 ++ ++- Adjusted to account for fix ++=============================================================================== ++Changes for patch v180 ++ ++- Fixed !CONFIG_DEVFS_FS stub declaration of ++=============================================================================== ++Changes for patch v181 ++ ++- Answered question posed by Al Viro and removed his comments from ++ ++- Moved setting of registered flag after other fields are changed ++ ++- Fixed race between and ++ ++- Global VFS changes added bogus BKL to devfsd_close(): removed ++ ++- Widened locking in and ++ ++- Replaced stack usage with kmalloc ++ ++- Simplified locking in and fixed memory leak ++=============================================================================== ++Changes for patch v182 ++ ++- Created and ++ ++- Removed broken devnum allocation and use ++ ++- Fixed old devnum leak by calling new ++ ++- Created ++ ++- Fixed number leak for /dev/cdroms/cdrom%d ++ ++- Fixed number leak for /dev/discs/disc%d ++=============================================================================== ++Changes for patch v183 ++ ++- Fixed bug in which could hang boot process ++=============================================================================== ++Changes for patch v184 ++ ++- Documentation typo fix for fs/devfs/util.c ++ ++- Fixed drivers/char/stallion.c for devfs ++ ++- Added DEVFSD_NOTIFY_DELETE event ++ ++- Updated README from master HTML file ++ ++- Removed #include from fs/devfs/base.c ++=============================================================================== ++Changes for patch v185 ++ ++- Made and in fs/devfs/util.c ++ private ++ ++- Fixed inode table races by removing it and using inode->u.generic_ip ++ instead ++ ++- Moved into ++ ++- Moved into ++=============================================================================== ++Changes for patch v186 ++ ++- Fixed race in for uni-processor ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v187 ++ ++- Fixed drivers/char/stallion.c for devfs ++ ++- Fixed drivers/char/rocket.c for devfs ++ ++- Fixed bug in : limited to 128 numbers ++=============================================================================== ++Changes for patch v188 ++ ++- Updated major masks in fs/devfs/util.c up to Linus' "no new majors" ++ proclamation. Block: were 126 now 122 free, char: were 26 now 19 free ++ ++- Updated README from master HTML file ++ ++- Removed remnant of multi-mount support in ++ ++- Removed unused DEVFS_FL_SHOW_UNREG flag ++=============================================================================== ++Changes for patch v189 ++ ++- Removed nlink field from struct devfs_inode ++ ++- Removed auto-ownership for /dev/pty/* (BSD ptys) and used ++ DEVFS_FL_CURRENT_OWNER|DEVFS_FL_NO_PERSISTENCE for /dev/pty/s* (just ++ like Unix98 pty slaves) and made /dev/pty/m* rw-rw-rw- access ++=============================================================================== ++Changes for patch v190 ++ ++- Updated README from master HTML file ++ ++- Replaced BKL with global rwsem to protect symlink data (quick and ++ dirty hack) ++=============================================================================== ++Changes for patch v191 ++ ++- Replaced global rwsem for symlink with per-link refcount ++=============================================================================== ++Changes for patch v192 ++ ++- Removed unnecessary #ifdef CONFIG_DEVFS_FS from arch/i386/kernel/mtrr.c ++ ++- Ported to kernel 2.4.10-pre11 ++ ++- Set inode->i_mapping->a_ops for block nodes in ++=============================================================================== ++Changes for patch v193 ++ ++- Went back to global rwsem for symlinks (refcount scheme no good) ++=============================================================================== ++Changes for patch v194 ++ ++- Fixed overrun in by removing function (not needed) ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v195 ++ ++- Fixed buffer underrun in ++ ++- Moved down_read() from to ++=============================================================================== ++Changes for patch v196 ++ ++- Fixed race in when setting event mask ++ Thanks to Kari Hurtta ++ ++- Avoid deadlock in by using temporary buffer ++=============================================================================== ++Changes for patch v197 ++ ++- First release of new locking code for devfs core (v1.0) ++ ++- Fixed bug in drivers/cdrom/cdrom.c ++=============================================================================== ++Changes for patch v198 ++ ++- Discard temporary buffer, now use "%s" for dentry names ++ ++- Don't generate path in : use fake entry instead ++ ++- Use "existing" directory in <_devfs_make_parent_for_leaf> ++ ++- Use slab cache rather than fixed buffer for devfsd events ++=============================================================================== ++Changes for patch v199 ++ ++- Removed obsolete usage of DEVFS_FL_NO_PERSISTENCE ++ ++- Send DEVFSD_NOTIFY_REGISTERED events in ++ ++- Fixed locking bug in due to typo ++ ++- Do not send CREATE, CHANGE, ASYNC_OPEN or DELETE events from devfsd ++ or children ++=============================================================================== ++Changes for patch v200 ++ ++- Ported to kernel 2.5.1-pre2 ++=============================================================================== ++Changes for patch v201 ++ ++- Fixed bug in : was dereferencing freed pointer ++=============================================================================== ++Changes for patch v202 ++ ++- Fixed bug in : was dereferencing freed pointer ++ ++- Added process group check for devfsd privileges ++=============================================================================== ++Changes for patch v203 ++ ++- Use SLAB_ATOMIC in from ++=============================================================================== ++Changes for patch v204 ++ ++- Removed long obsolete rc.devfs ++ ++- Return old entry in for 2.4.x kernels ++ ++- Updated README from master HTML file ++ ++- Increment refcount on module in ++ ++- Created and exported ++ ++- Increment refcount on module in ++ ++- Created and used where needed to fix races ++ ++- Added clarifying comments in response to preliminary EMC code review ++ ++- Added poisoning to ++ ++- Improved debugging messages ++ ++- Fixed unregister bugs in drivers/md/lvm-fs.c ++=============================================================================== ++Changes for patch v205 ++ ++- Corrected (made useful) debugging message in ++ ++- Moved in to ++ ++- Fixed drivers/md/lvm-fs.c to create "lvm" entry ++ ++- Added magic number to guard against scribbling drivers ++ ++- Only return old entry in if a directory ++ ++- Defined macros for error and debug messages ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v206 ++ ++- Added support for multiple Compaq cpqarray controllers ++ ++- Fixed (rare, old) race in ++=============================================================================== ++Changes for patch v207 ++ ++- Fixed deadlock bug in ++ ++- Tag VFS deletable in if handle ignored ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v208 ++ ++- Added KERN_* to remaining messages ++ ++- Cleaned up declaration of ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v209 ++ ++- Updated README from master HTML file ++ ++- Removed silently introduced calls to lock_kernel() and ++ unlock_kernel() due to recent VFS locking changes. BKL isn't ++ required in devfs ++ ++- Changed to allow later additions if not yet empty ++ ++- Added calls to in drivers/block/blkpc.c ++ and ++ ++- Fixed bug in : was clearing beyond ++ bitfield ++ ++- Fixed bitfield data type for ++ ++- Made major bitfield type and initialiser 64 bit safe ++=============================================================================== ++Changes for patch v210 ++ ++- Updated fs/devfs/util.c to fix shift warning on 64 bit machines ++ Thanks to Anton Blanchard ++ ++- Updated README from master HTML file ++=============================================================================== ++Changes for patch v211 ++ ++- Do not put miscellaneous character devices in /dev/misc if they ++ specify their own directory (i.e. contain a '/' character) ++ ++- Copied macro for error messages from fs/devfs/base.c to ++ fs/devfs/util.c and made use of this macro ++ ++- Removed 2.4.x compatibility code from fs/devfs/base.c ++=============================================================================== ++Changes for patch v212 ++ ++- Added BKL to because drivers still need it ++=============================================================================== ++Changes for patch v213 ++ ++- Protected and ++ from changing directory contents ++=============================================================================== ++Changes for patch v214 ++ ++- Switched to ISO C structure field initialisers ++ ++- Switch to set_current_state() and move before add_wait_queue() ++ ++- Updated README from master HTML file ++ ++- Fixed devfs entry leak in when *readdir fails ++=============================================================================== ++Changes for patch v215 ++ ++- Created ++ ++- Switched many functions from to ++ ++ ++- Switched many functions from to ++=============================================================================== ++Changes for patch v216 ++ ++- Switched arch/ia64/sn/io/hcl.c from to ++ ++ ++- Removed deprecated ++=============================================================================== ++Changes for patch v217 ++ ++- Exported and to modules ++ ++- Updated README from master HTML file ++ ++- Fixed module unload race in ++=============================================================================== ++Changes for patch v218 ++ ++- Removed DEVFS_FL_AUTO_OWNER flag ++ ++- Switched lingering structure field initialiser to ISO C ++ ++- Added locking when setting/clearing flags ++ ++- Documentation fix in fs/devfs/util.c +diff -urN linux-2.6.19.old/Documentation/filesystems/devfs/README linux-2.6.19.dev/Documentation/filesystems/devfs/README +--- linux-2.6.19.old/Documentation/filesystems/devfs/README 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.19.dev/Documentation/filesystems/devfs/README 2006-12-14 03:12:59.000000000 +0100 +@@ -0,0 +1,1959 @@ ++Devfs (Device File System) FAQ ++ ++ ++Linux Devfs (Device File System) FAQ ++Richard Gooch ++20-AUG-2002 ++ ++ ++Document languages: ++ ++ ++ ++ ++ ++ ++ ++----------------------------------------------------------------------------- ++ ++NOTE: the master copy of this document is available online at: ++ ++http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html ++and looks much better than the text version distributed with the ++kernel sources. A mirror site is available at: ++ ++http://www.ras.ucalgary.ca/~rgooch/linux/docs/devfs.html ++ ++There is also an optional daemon that may be used with devfs. You can ++find out more about it at: ++ ++http://www.atnf.csiro.au/~rgooch/linux/ ++ ++A mailing list is available which you may subscribe to. Send ++email ++to majordomo@oss.sgi.com with the following line in the ++body of the message: ++subscribe devfs ++To unsubscribe, send the message body: ++unsubscribe devfs ++instead. The list is archived at ++ ++http://oss.sgi.com/projects/devfs/archive/. ++ ++----------------------------------------------------------------------------- ++ ++Contents ++ ++ ++What is it? ++ ++Why do it? ++ ++Who else does it? ++ ++How it works ++ ++Operational issues (essential reading) ++ ++Instructions for the impatient ++Permissions persistence across reboots ++Dealing with drivers without devfs support ++All the way with Devfs ++Other Issues ++Kernel Naming Scheme ++Devfsd Naming Scheme ++Old Compatibility Names ++SCSI Host Probing Issues ++ ++ ++ ++Device drivers currently ported ++ ++Allocation of Device Numbers ++ ++Questions and Answers ++ ++Making things work ++Alternatives to devfs ++What I don't like about devfs ++How to report bugs ++Strange kernel messages ++Compilation problems with devfsd ++ ++ ++Other resources ++ ++Translations of this document ++ ++ ++----------------------------------------------------------------------------- ++ ++ ++What is it? ++ ++Devfs is an alternative to "real" character and block special devices ++on your root filesystem. Kernel device drivers can register devices by ++name rather than major and minor numbers. These devices will appear in ++devfs automatically, with whatever default ownership and ++protection the driver specified. A daemon (devfsd) can be used to ++override these defaults. Devfs has been in the kernel since 2.3.46. ++ ++NOTE that devfs is entirely optional. If you prefer the old ++disc-based device nodes, then simply leave CONFIG_DEVFS_FS=n (the ++default). In this case, nothing will change. ALSO NOTE that if you do ++enable devfs, the defaults are such that full compatibility is ++maintained with the old devices names. ++ ++There are two aspects to devfs: one is the underlying device ++namespace, which is a namespace just like any mounted filesystem. The ++other aspect is the filesystem code which provides a view of the ++device namespace. The reason I make a distinction is because devfs ++can be mounted many times, with each mount showing the same device ++namespace. Changes made are global to all mounted devfs filesystems. ++Also, because the devfs namespace exists without any devfs mounts, you ++can easily mount the root filesystem by referring to an entry in the ++devfs namespace. ++ ++ ++The cost of devfs is a small increase in kernel code size and memory ++usage. About 7 pages of code (some of that in __init sections) and 72 ++bytes for each entry in the namespace. A modest system has only a ++couple of hundred device entries, so this costs a few more ++pages. Compare this with the suggestion to put /dev on a ramdisc. ++ ++On a typical machine, the cost is under 0.2 percent. On a modest ++system with 64 MBytes of RAM, the cost is under 0.1 percent. The ++accusations of "bloatware" levelled at devfs are not justified. ++ ++----------------------------------------------------------------------------- ++ ++ ++Why do it? ++ ++There are several problems that devfs addresses. Some of these ++problems are more serious than others (depending on your point of ++view), and some can be solved without devfs. However, the totality of ++these problems really calls out for devfs. ++ ++The choice is a patchwork of inefficient user space solutions, which ++are complex and likely to be fragile, or to use a simple and efficient ++devfs which is robust. ++ ++There have been many counter-proposals to devfs, all seeking to ++provide some of the benefits without actually implementing devfs. So ++far there has been an absence of code and no proposed alternative has ++been able to provide all the features that devfs does. Further, ++alternative proposals require far more complexity in user-space (and ++still deliver less functionality than devfs). Some people have the ++mantra of reducing "kernel bloat", but don't consider the effects on ++user-space. ++ ++A good solution limits the total complexity of kernel-space and ++user-space. ++ ++ ++Major&minor allocation ++ ++The existing scheme requires the allocation of major and minor device ++numbers for each and every device. This means that a central ++co-ordinating authority is required to issue these device numbers ++(unless you're developing a "private" device driver), in order to ++preserve uniqueness. Devfs shifts the burden to a namespace. This may ++not seem like a huge benefit, but actually it is. Since driver authors ++will naturally choose a device name which reflects the functionality ++of the device, there is far less potential for namespace conflict. ++Solving this requires a kernel change. ++ ++/dev management ++ ++Because you currently access devices through device nodes, these must ++be created by the system administrator. For standard devices you can ++usually find a MAKEDEV programme which creates all these (hundreds!) ++of nodes. This means that changes in the kernel must be reflected by ++changes in the MAKEDEV programme, or else the system administrator ++creates device nodes by hand. ++ ++The basic problem is that there are two separate databases of ++major and minor numbers. One is in the kernel and one is in /dev (or ++in a MAKEDEV programme, if you want to look at it that way). This is ++duplication of information, which is not good practice. ++Solving this requires a kernel change. ++ ++/dev growth ++ ++A typical /dev has over 1200 nodes! Most of these devices simply don't ++exist because the hardware is not available. A huge /dev increases the ++time to access devices (I'm just referring to the dentry lookup times ++and the time taken to read inodes off disc: the next subsection shows ++some more horrors). ++ ++An example of how big /dev can grow is if we consider SCSI devices: ++ ++host 6 bits (say up to 64 hosts on a really big machine) ++channel 4 bits (say up to 16 SCSI buses per host) ++id 4 bits ++lun 3 bits ++partition 6 bits ++TOTAL 23 bits ++ ++ ++This requires 8 Mega (1024*1024) inodes if we want to store all ++possible device nodes. Even if we scrap everything but id,partition ++and assume a single host adapter with a single SCSI bus and only one ++logical unit per SCSI target (id), that's still 10 bits or 1024 ++inodes. Each VFS inode takes around 256 bytes (kernel 2.1.78), so ++that's 256 kBytes of inode storage on disc (assuming real inodes take ++a similar amount of space as VFS inodes). This is actually not so bad, ++because disc is cheap these days. Embedded systems would care about ++256 kBytes of /dev inodes, but you could argue that embedded systems ++would have hand-tuned /dev directories. I've had to do just that on my ++embedded systems, but I would rather just leave it to devfs. ++ ++Another issue is the time taken to lookup an inode when first ++referenced. Not only does this take time in scanning through a list in ++memory, but also the seek times to read the inodes off disc. ++This could be solved in user-space using a clever programme which ++scanned the kernel logs and deleted /dev entries which are not ++available and created them when they were available. This programme ++would need to be run every time a new module was loaded, which would ++slow things down a lot. ++ ++There is an existing programme called scsidev which will automatically ++create device nodes for SCSI devices. It can do this by scanning files ++in /proc/scsi. Unfortunately, to extend this idea to other device ++nodes would require significant modifications to existing drivers (so ++they too would provide information in /proc). This is a non-trivial ++change (I should know: devfs has had to do something similar). Once ++you go to this much effort, you may as well use devfs itself (which ++also provides this information). Furthermore, such a system would ++likely be implemented in an ad-hoc fashion, as different drivers will ++provide their information in different ways. ++ ++Devfs is much cleaner, because it (naturally) has a uniform mechanism ++to provide this information: the device nodes themselves! ++ ++ ++Node to driver file_operations translation ++ ++There is an important difference between the way disc-based character ++and block nodes and devfs entries make the connection between an entry ++in /dev and the actual device driver. ++ ++With the current 8 bit major and minor numbers the connection between ++disc-based c&b nodes and per-major drivers is done through a ++fixed-length table of 128 entries. The various filesystem types set ++the inode operations for c&b nodes to {chr,blk}dev_inode_operations, ++so when a device is opened a few quick levels of indirection bring us ++to the driver file_operations. ++ ++For miscellaneous character devices a second step is required: there ++is a scan for the driver entry with the same minor number as the file ++that was opened, and the appropriate minor open method is called. This ++scanning is done *every time* you open a device node. Potentially, you ++may be searching through dozens of misc. entries before you find your ++open method. While not an enormous performance overhead, this does ++seem pointless. ++ ++Linux *must* move beyond the 8 bit major and minor barrier, ++somehow. If we simply increase each to 16 bits, then the indexing ++scheme used for major driver lookup becomes untenable, because the ++major tables (one each for character and block devices) would need to ++be 64 k entries long (512 kBytes on x86, 1 MByte for 64 bit ++systems). So we would have to use a scheme like that used for ++miscellaneous character devices, which means the search time goes up ++linearly with the average number of major device drivers on your ++system. Not all "devices" are hardware, some are higher-level drivers ++like KGI, so you can get more "devices" without adding hardware ++You can improve this by creating an ordered (balanced:-) ++binary tree, in which case your search time becomes log(N). ++Alternatively, you can use hashing to speed up the search. ++But why do that search at all if you don't have to? Once again, it ++seems pointless. ++ ++Note that devfs doesn't use the major&minor system. For devfs ++entries, the connection is done when you lookup the /dev entry. When ++devfs_register() is called, an internal table is appended which has ++the entry name and the file_operations. If the dentry cache doesn't ++have the /dev entry already, this internal table is scanned to get the ++file_operations, and an inode is created. If the dentry cache already ++has the entry, there is *no lookup time* (other than the dentry scan ++itself, but we can't avoid that anyway, and besides Linux dentries ++cream other OS's which don't have them:-). Furthermore, the number of ++node entries in a devfs is only the number of available device ++entries, not the number of *conceivable* entries. Even if you remove ++unnecessary entries in a disc-based /dev, the number of conceivable ++entries remains the same: you just limit yourself in order to save ++space. ++ ++Devfs provides a fast connection between a VFS node and the device ++driver, in a scalable way. ++ ++/dev as a system administration tool ++ ++Right now /dev contains a list of conceivable devices, most of which I ++don't have. Devfs only shows those devices available on my ++system. This means that listing /dev is a handy way of checking what ++devices are available. ++ ++Major&minor size ++ ++Existing major and minor numbers are limited to 8 bits each. This is ++now a limiting factor for some drivers, particularly the SCSI disc ++driver, which consumes a single major number. Only 16 discs are ++supported, and each disc may have only 15 partitions. Maybe this isn't ++a problem for you, but some of us are building huge Linux systems with ++disc arrays. With devfs an arbitrary pointer can be associated with ++each device entry, which can be used to give an effective 32 bit ++device identifier (i.e. that's like having a 32 bit minor ++number). Since this is private to the kernel, there are no C library ++compatibility issues which you would have with increasing major and ++minor number sizes. See the section on "Allocation of Device Numbers" ++for details on maintaining compatibility with userspace. ++ ++Solving this requires a kernel change. ++ ++Since writing this, the kernel has been modified so that the SCSI disc ++driver has more major numbers allocated to it and now supports up to ++128 discs. Since these major numbers are non-contiguous (a result of ++unplanned expansion), the implementation is a little more cumbersome ++than originally. ++ ++Just like the changes to IPv4 to fix impending limitations in the ++address space, people find ways around the limitations. In the long ++run, however, solutions like IPv6 or devfs can't be put off forever. ++ ++Read-only root filesystem ++ ++Having your device nodes on the root filesystem means that you can't ++operate properly with a read-only root filesystem. This is because you ++want to change ownerships and protections of tty devices. Existing ++practice prevents you using a CD-ROM as your root filesystem for a ++*real* system. Sure, you can boot off a CD-ROM, but you can't change ++tty ownerships, so it's only good for installing. ++ ++Also, you can't use a shared NFS root filesystem for a cluster of ++discless Linux machines (having tty ownerships changed on a common ++/dev is not good). Nor can you embed your root filesystem in a ++ROM-FS. ++ ++You can get around this by creating a RAMDISC at boot time, making ++an ext2 filesystem in it, mounting it somewhere and copying the ++contents of /dev into it, then unmounting it and mounting it over ++/dev. ++ ++A devfs is a cleaner way of solving this. ++ ++Non-Unix root filesystem ++ ++Non-Unix filesystems (such as NTFS) can't be used for a root ++filesystem because they variously don't support character and block ++special files or symbolic links. You can't have a separate disc-based ++or RAMDISC-based filesystem mounted on /dev because you need device ++nodes before you can mount these. Devfs can be mounted without any ++device nodes. Devlinks won't work because symlinks aren't supported. ++An alternative solution is to use initrd to mount a RAMDISC initial ++root filesystem (which is populated with a minimal set of device ++nodes), and then construct a new /dev in another RAMDISC, and finally ++switch to your non-Unix root filesystem. This requires clever boot ++scripts and a fragile and conceptually complex boot procedure. ++ ++Devfs solves this in a robust and conceptually simple way. ++ ++PTY security ++ ++Current pseudo-tty (pty) devices are owned by root and read-writable ++by everyone. The user of a pty-pair cannot change ++ownership/protections without being suid-root. ++ ++This could be solved with a secure user-space daemon which runs as ++root and does the actual creation of pty-pairs. Such a daemon would ++require modification to *every* programme that wants to use this new ++mechanism. It also slows down creation of pty-pairs. ++ ++An alternative is to create a new open_pty() syscall which does much ++the same thing as the user-space daemon. Once again, this requires ++modifications to pty-handling programmes. ++ ++The devfs solution allows a device driver to "tag" certain device ++files so that when an unopened device is opened, the ownerships are ++changed to the current euid and egid of the opening process, and the ++protections are changed to the default registered by the driver. When ++the device is closed ownership is set back to root and protections are ++set back to read-write for everybody. No programme need be changed. ++The devpts filesystem provides this auto-ownership feature for Unix98 ++ptys. It doesn't support old-style pty devices, nor does it have all ++the other features of devfs. ++ ++Intelligent device management ++ ++Devfs implements a simple yet powerful protocol for communication with ++a device management daemon (devfsd) which runs in user space. It is ++possible to send a message (either synchronously or asynchronously) to ++devfsd on any event, such as registration/unregistration of device ++entries, opening and closing devices, looking up inodes, scanning ++directories and more. This has many possibilities. Some of these are ++already implemented. See: ++ ++ ++http://www.atnf.csiro.au/~rgooch/linux/ ++ ++Device entry registration events can be used by devfsd to change ++permissions of newly-created device nodes. This is one mechanism to ++control device permissions. ++ ++Device entry registration/unregistration events can be used to run ++programmes or scripts. This can be used to provide automatic mounting ++of filesystems when a new block device media is inserted into the ++drive. ++ ++Asynchronous device open and close events can be used to implement ++clever permissions management. For example, the default permissions on ++/dev/dsp do not allow everybody to read from the device. This is ++sensible, as you don't want some remote user recording what you say at ++your console. However, the console user is also prevented from ++recording. This behaviour is not desirable. With asynchronous device ++open and close events, you can have devfsd run a programme or script ++when console devices are opened to change the ownerships for *other* ++device nodes (such as /dev/dsp). On closure, you can run a different ++script to restore permissions. An advantage of this scheme over ++modifying the C library tty handling is that this works even if your ++programme crashes (how many times have you seen the utmp database with ++lingering entries for non-existent logins?). ++ ++Synchronous device open events can be used to perform intelligent ++device access protections. Before the device driver open() method is ++called, the daemon must first validate the open attempt, by running an ++external programme or script. This is far more flexible than access ++control lists, as access can be determined on the basis of other ++system conditions instead of just the UID and GID. ++ ++Inode lookup events can be used to authenticate module autoload ++requests. Instead of using kmod directly, the event is sent to ++devfsd which can implement an arbitrary authentication before loading ++the module itself. ++ ++Inode lookup events can also be used to construct arbitrary ++namespaces, without having to resort to populating devfs with symlinks ++to devices that don't exist. ++ ++Speculative Device Scanning ++ ++Consider an application (like cdparanoia) that wants to find all ++CD-ROM devices on the system (SCSI, IDE and other types), whether or ++not their respective modules are loaded. The application must ++speculatively open certain device nodes (such as /dev/sr0 for the SCSI ++CD-ROMs) in order to make sure the module is loaded. This requires ++that all Linux distributions follow the standard device naming scheme ++(last time I looked RedHat did things differently). Devfs solves the ++naming problem. ++ ++The same application also wants to see which devices are actually ++available on the system. With the existing system it needs to read the ++/dev directory and speculatively open each /dev/sr* device to ++determine if the device exists or not. With a large /dev this is an ++inefficient operation, especially if there are many /dev/sr* nodes. A ++solution like scsidev could reduce the number of /dev/sr* entries (but ++of course that also requires all that inefficient directory scanning). ++ ++With devfs, the application can open the /dev/sr directory ++(which triggers the module autoloading if required), and proceed to ++read /dev/sr. Since only the available devices will have ++entries, there are no inefficencies in directory scanning or device ++openings. ++ ++----------------------------------------------------------------------------- ++ ++Who else does it? ++ ++FreeBSD has a devfs implementation. Solaris and AIX each have a ++pseudo-devfs (something akin to scsidev but for all devices, with some ++unspecified kernel support). BeOS, Plan9 and QNX also have it. SGI's ++IRIX 6.4 and above also have a device filesystem. ++ ++While we shouldn't just automatically do something because others do ++it, we should not ignore the work of others either. FreeBSD has a lot ++of competent people working on it, so their opinion should not be ++blithely ignored. ++ ++----------------------------------------------------------------------------- ++ ++ ++How it works ++ ++Registering device entries ++ ++For every entry (device node) in a devfs-based /dev a driver must call ++devfs_register(). This adds the name of the device entry, the ++file_operations structure pointer and a few other things to an ++internal table. Device entries may be added and removed at any ++time. When a device entry is registered, it automagically appears in ++any mounted devfs'. ++ ++Inode lookup ++ ++When a lookup operation on an entry is performed and if there is no ++driver information for that entry devfs will attempt to call ++devfsd. If still no driver information can be found then a negative ++dentry is yielded and the next stage operation will be called by the ++VFS (such as create() or mknod() inode methods). If driver information ++can be found, an inode is created (if one does not exist already) and ++all is well. ++ ++Manually creating device nodes ++ ++The mknod() method allows you to create an ordinary named pipe in the ++devfs, or you can create a character or block special inode if one ++does not already exist. You may wish to create a character or block ++special inode so that you can set permissions and ownership. Later, if ++a device driver registers an entry with the same name, the ++permissions, ownership and times are retained. This is how you can set ++the protections on a device even before the driver is loaded. Once you ++create an inode it appears in the directory listing. ++ ++Unregistering device entries ++ ++A device driver calls devfs_unregister() to unregister an entry. ++ ++Chroot() gaols ++ ++2.2.x kernels ++ ++The semantics of inode creation are different when devfs is mounted ++with the "explicit" option. Now, when a device entry is registered, it ++will not appear until you use mknod() to create the device. It doesn't ++matter if you mknod() before or after the device is registered with ++devfs_register(). The purpose of this behaviour is to support ++chroot(2) gaols, where you want to mount a minimal devfs inside the ++gaol. Only the devices you specifically want to be available (through ++your mknod() setup) will be accessible. ++ ++2.4.x kernels ++ ++As of kernel 2.3.99, the VFS has had the ability to rebind parts of ++the global filesystem namespace into another part of the namespace. ++This now works even at the leaf-node level, which means that ++individual files and device nodes may be bound into other parts of the ++namespace. This is like making links, but better, because it works ++across filesystems (unlike hard links) and works through chroot() ++gaols (unlike symbolic links). ++ ++Because of these improvements to the VFS, the multi-mount capability ++in devfs is no longer needed. The administrator may create a minimal ++device tree inside a chroot(2) gaol by using VFS bindings. As this ++provides most of the features of the devfs multi-mount capability, I ++removed the multi-mount support code (after issuing an RFC). This ++yielded code size reductions and simplifications. ++ ++If you want to construct a minimal chroot() gaol, the following ++command should suffice: ++ ++mount --bind /dev/null /gaol/dev/null ++ ++ ++Repeat for other device nodes you want to expose. Simple! ++ ++----------------------------------------------------------------------------- ++ ++ ++Operational issues ++ ++ ++Instructions for the impatient ++ ++Nobody likes reading documentation. People just want to get in there ++and play. So this section tells you quickly the steps you need to take ++to run with devfs mounted over /dev. Skip these steps and you will end ++up with a nearly unbootable system. Subsequent sections describe the ++issues in more detail, and discuss non-essential configuration ++options. ++ ++Devfsd ++OK, if you're reading this, I assume you want to play with ++devfs. First you should ensure that /usr/src/linux contains a ++recent kernel source tree. Then you need to compile devfsd, the device ++management daemon, available at ++ ++http://www.atnf.csiro.au/~rgooch/linux/. ++Because the kernel has a naming scheme ++which is quite different from the old naming scheme, you need to ++install devfsd so that software and configuration files that use the ++old naming scheme will not break. ++ ++Compile and install devfsd. You will be provided with a default ++configuration file /etc/devfsd.conf which will provide ++compatibility symlinks for the old naming scheme. Don't change this ++config file unless you know what you're doing. Even if you think you ++do know what you're doing, don't change it until you've followed all ++the steps below and booted a devfs-enabled system and verified that it ++works. ++ ++Now edit your main system boot script so that devfsd is started at the ++very beginning (before any filesystem ++checks). /etc/rc.d/rc.sysinit is often the main boot script ++on systems with SysV-style boot scripts. On systems with BSD-style ++boot scripts it is often /etc/rc. Also check ++/sbin/rc. ++ ++NOTE that the line you put into the boot ++script should be exactly: ++ ++/sbin/devfsd /dev ++ ++DO NOT use some special daemon-launching ++programme, otherwise the boot script may not wait for devfsd to finish ++initialising. ++ ++System Libraries ++There may still be some problems because of broken software making ++assumptions about device names. In particular, some software does not ++handle devices which are symbolic links. If you are running a libc 5 ++based system, install libc 5.4.44 (if you have libc 5.4.46, go back to ++libc 5.4.44, which is actually correct). If you are running a glibc ++based system, make sure you have glibc 2.1.3 or later. ++ ++/etc/securetty ++PAM (Pluggable Authentication Modules) is supposed to be a flexible ++mechanism for providing better user authentication and access to ++services. Unfortunately, it's also fragile, complex and undocumented ++(check out RedHat 6.1, and probably other distributions as well). PAM ++has problems with symbolic links. Append the following lines to your ++/etc/securetty file: ++ ++vc/1 ++vc/2 ++vc/3 ++vc/4 ++vc/5 ++vc/6 ++vc/7 ++vc/8 ++ ++This will not weaken security. If you have a version of util-linux ++earlier than 2.10.h, please upgrade to 2.10.h or later. If you ++absolutely cannot upgrade, then also append the following lines to ++your /etc/securetty file: ++ ++1 ++2 ++3 ++4 ++5 ++6 ++7 ++8 ++ ++This may potentially weaken security by allowing root logins over the ++network (a password is still required, though). However, since there ++are problems with dealing with symlinks, I'm suspicious of the level ++of security offered in any case. ++ ++XFree86 ++While not essential, it's probably a good idea to upgrade to XFree86 ++4.0, as patches went in to make it more devfs-friendly. If you don't, ++you'll probably need to apply the following patch to ++/etc/security/console.perms so that ordinary users can run ++startx. Note that not all distributions have this file (e.g. Debian), ++so if it's not present, don't worry about it. ++ ++--- /etc/security/console.perms.orig Sat Apr 17 16:26:47 1999 +++++ /etc/security/console.perms Fri Feb 25 23:53:55 2000 ++@@ -14,7 +14,7 @@ ++ # man 5 console.perms ++ ++ # file classes -- these are regular expressions ++-=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] +++=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9] ++ ++ # device classes -- these are shell-style globs ++ =/dev/fd[0-1]* ++ ++If the patch does not apply, then change the line: ++ ++=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] ++ ++with: ++ ++=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9] ++ ++ ++Disable devpts ++I've had a report of devpts mounted on /dev/pts not working ++correctly. Since devfs will also manage /dev/pts, there is no ++need to mount devpts as well. You should either edit your ++/etc/fstab so devpts is not mounted, or disable devpts from ++your kernel configuration. ++ ++Unsupported drivers ++Not all drivers have devfs support. If you depend on one of these ++drivers, you will need to create a script or tarfile that you can use ++at boot time to create device nodes as appropriate. There is a ++section which describes this. Another ++section lists the drivers which have ++devfs support. ++ ++/dev/mouse ++ ++Many disributions configure /dev/mouse to be the mouse device ++for XFree86 and GPM. I actually think this is a bad idea, because it ++adds another level of indirection. When looking at a config file, if ++you see /dev/mouse you're left wondering which mouse ++is being referred to. Hence I recommend putting the actual mouse ++device (for example /dev/psaux) into your ++/etc/X11/XF86Config file (and similarly for the GPM ++configuration file). ++ ++Alternatively, use the same technique used for unsupported drivers ++described above. ++ ++The Kernel ++Finally, you need to make sure devfs is compiled into your kernel. Set ++CONFIG_EXPERIMENTAL=y, CONFIG_DEVFS_FS=y and CONFIG_DEVFS_MOUNT=y by ++using favourite configuration tool (i.e. make config or ++make xconfig) and then make clean and then recompile your kernel and ++modules. At boot, devfs will be mounted onto /dev. ++ ++If you encounter problems booting (for example if you forgot a ++configuration step), you can pass devfs=nomount at the kernel ++boot command line. This will prevent the kernel from mounting devfs at ++boot time onto /dev. ++ ++In general, a kernel built with CONFIG_DEVFS_FS=y but without mounting ++devfs onto /dev is completely safe, and requires no ++configuration changes. One exception to take note of is when ++LABEL= directives are used in /etc/fstab. In this ++case you will be unable to boot properly. This is because the ++mount(8) programme uses /proc/partitions as part of ++the volume label search process, and the device names it finds are not ++available, because setting CONFIG_DEVFS_FS=y changes the names in ++/proc/partitions, irrespective of whether devfs is mounted. ++ ++Now you've finished all the steps required. You're now ready to boot ++your shiny new kernel. Enjoy. ++ ++Changing the configuration ++ ++OK, you've now booted a devfs-enabled system, and everything works. ++Now you may feel like changing the configuration (common targets are ++/etc/fstab and /etc/devfsd.conf). Since you have a ++system that works, if you make any changes and it doesn't work, you ++now know that you only have to restore your configuration files to the ++default and it will work again. ++ ++ ++Permissions persistence across reboots ++ ++If you don't use mknod(2) to create a device file, nor use chmod(2) or ++chown(2) to change the ownerships/permissions, the inode ctime will ++remain at 0 (the epoch, 12 am, 1-JAN-1970, GMT). Anything with a ctime ++later than this has had it's ownership/permissions changed. Hence, a ++simple script or programme may be used to tar up all changed inodes, ++prior to shutdown. Although effective, many consider this approach a ++kludge. ++ ++A much better approach is to use devfsd to save and restore ++permissions. It may be configured to record changes in permissions and ++will save them in a database (in fact a directory tree), and restore ++these upon boot. This is an efficient method and results in immediate ++saving of current permissions (unlike the tar approach, which saves ++permissions at some unspecified future time). ++ ++The default configuration file supplied with devfsd has config entries ++which you may uncomment to enable persistence management. ++ ++If you decide to use the tar approach anyway, be aware that tar will ++first unlink(2) an inode before creating a new device node. The ++unlink(2) has the effect of breaking the connection between a devfs ++entry and the device driver. If you use the "devfs=only" boot option, ++you lose access to the device driver, requiring you to reload the ++module. I consider this a bug in tar (there is no real need to ++unlink(2) the inode first). ++ ++Alternatively, you can use devfsd to provide more sophisticated ++management of device permissions. You can use devfsd to store ++permissions for whole groups of devices with a single configuration ++entry, rather than the conventional single entry per device entry. ++ ++Permissions database stored in mounted-over /dev ++ ++If you wish to save and restore your device permissions into the ++disc-based /dev while still mounting devfs onto /dev ++you may do so. This requires a 2.4.x kernel (in fact, 2.3.99 or ++later), which has the VFS binding facility. You need to do the ++following to set this up: ++ ++ ++ ++make sure the kernel does not mount devfs at boot time ++ ++ ++make sure you have a correct /dev/console entry in your ++root file-system (where your disc-based /dev lives) ++ ++create the /dev-state directory ++ ++ ++add the following lines near the very beginning of your boot ++scripts: ++ ++mount --bind /dev /dev-state ++mount -t devfs none /dev ++devfsd /dev ++ ++ ++ ++ ++add the following lines to your /etc/devfsd.conf file: ++ ++REGISTER ^pt[sy] IGNORE ++CREATE ^pt[sy] IGNORE ++CHANGE ^pt[sy] IGNORE ++DELETE ^pt[sy] IGNORE ++REGISTER .* COPY /dev-state/$devname $devpath ++CREATE .* COPY $devpath /dev-state/$devname ++CHANGE .* COPY $devpath /dev-state/$devname ++DELETE .* CFUNCTION GLOBAL unlink /dev-state/$devname ++RESTORE /dev-state ++ ++Note that the sample devfsd.conf file contains these lines, ++as well as other sample configurations you may find useful. See the ++devfsd distribution ++ ++ ++reboot. ++ ++ ++ ++ ++Permissions database stored in normal directory ++ ++If you are using an older kernel which doesn't support VFS binding, ++then you won't be able to have the permissions database in a ++mounted-over /dev. However, you can still use a regular ++directory to store the database. The sample /etc/devfsd.conf ++file above may still be used. You will need to create the ++/dev-state directory prior to installing devfsd. If you have ++old permissions in /dev, then just copy (or move) the device ++nodes over to the new directory. ++ ++Which method is better? ++ ++The best method is to have the permissions database stored in the ++mounted-over /dev. This is because you will not need to copy ++device nodes over to /dev-state, and because it allows you to ++switch between devfs and non-devfs kernels, without requiring you to ++copy permissions between /dev-state (for devfs) and ++/dev (for non-devfs). ++ ++ ++Dealing with drivers without devfs support ++ ++Currently, not all device drivers in the kernel have been modified to ++use devfs. Device drivers which do not yet have devfs support will not ++automagically appear in devfs. The simplest way to create device nodes ++for these drivers is to unpack a tarfile containing the required ++device nodes. You can do this in your boot scripts. All your drivers ++will now work as before. ++ ++Hopefully for most people devfs will have enough support so that they ++can mount devfs directly over /dev without losing most functionality ++(i.e. losing access to various devices). As of 22-JAN-1998 (devfs ++patch version 10) I am now running this way. All the devices I have ++are available in devfs, so I don't lose anything. ++ ++WARNING: if your configuration requires the old-style device names ++(i.e. /dev/hda1 or /dev/sda1), you must install devfsd and configure ++it to maintain compatibility entries. It is almost certain that you ++will require this. Note that the kernel creates a compatibility entry ++for the root device, so you don't need initrd. ++ ++Note that you no longer need to mount devpts if you use Unix98 PTYs, ++as devfs can manage /dev/pts itself. This saves you some RAM, as you ++don't need to compile and install devpts. Note that some versions of ++glibc have a bug with Unix98 pty handling on devfs systems. Contact ++the glibc maintainers for a fix. Glibc 2.1.3 has the fix. ++ ++Note also that apart from editing /etc/fstab, other things will need ++to be changed if you *don't* install devfsd. Some software (like the X ++server) hard-wire device names in their source. It really is much ++easier to install devfsd so that compatibility entries are created. ++You can then slowly migrate your system to using the new device names ++(for example, by starting with /etc/fstab), and then limiting the ++compatibility entries that devfsd creates. ++ ++IF YOU CONFIGURE TO MOUNT DEVFS AT BOOT, MAKE SURE YOU INSTALL DEVFSD ++BEFORE YOU BOOT A DEVFS-ENABLED KERNEL! ++ ++Now that devfs has gone into the 2.3.46 kernel, I'm getting a lot of ++reports back. Many of these are because people are trying to run ++without devfsd, and hence some things break. Please just run devfsd if ++things break. I want to concentrate on real bugs rather than ++misconfiguration problems at the moment. If people are willing to fix ++bugs/false assumptions in other code (i.e. glibc, X server) and submit ++that to the respective maintainers, that would be great. ++ ++ ++All the way with Devfs ++ ++The devfs kernel patch creates a rationalised device tree. As stated ++above, if you want to keep using the old /dev naming scheme, ++you just need to configure devfsd appopriately (see the man ++page). People who prefer the old names can ignore this section. For ++those of us who like the rationalised names and an uncluttered ++/dev, read on. ++ ++If you don't run devfsd, or don't enable compatibility entry ++management, then you will have to configure your system to use the new ++names. For example, you will then need to edit your ++/etc/fstab to use the new disc naming scheme. If you want to ++be able to boot non-devfs kernels, you will need compatibility ++symlinks in the underlying disc-based /dev pointing back to ++the old-style names for when you boot a kernel without devfs. ++ ++You can selectively decide which devices you want compatibility ++entries for. For example, you may only want compatibility entries for ++BSD pseudo-terminal devices (otherwise you'll have to patch you C ++library or use Unix98 ptys instead). It's just a matter of putting in ++the correct regular expression into /dev/devfsd.conf. ++ ++There are other choices of naming schemes that you may prefer. For ++example, I don't use the kernel-supplied ++names, because they are too verbose. A common misconception is ++that the kernel-supplied names are meant to be used directly in ++configuration files. This is not the case. They are designed to ++reflect the layout of the devices attached and to provide easy ++classification. ++ ++If you like the kernel-supplied names, that's fine. If you don't then ++you should be using devfsd to construct a namespace more to your ++liking. Devfsd has built-in code to construct a ++namespace that is both logical and easy to ++manage. In essence, it creates a convenient abbreviation of the ++kernel-supplied namespace. ++ ++You are of course free to build your own namespace. Devfsd has all the ++infrastructure required to make this easy for you. All you need do is ++write a script. You can even write some C code and devfsd can load the ++shared object as a callable extension. ++ ++ ++Other Issues ++ ++The init programme ++Another thing to take note of is whether your init programme ++creates a Unix socket /dev/telinit. Some versions of init ++create /dev/telinit so that the telinit programme can ++communicate with the init process. If you have such a system you need ++to make sure that devfs is mounted over /dev *before* init ++starts. In other words, you can't leave the mounting of devfs to ++/etc/rc, since this is executed after init. Other ++versions of init require a named pipe /dev/initctl ++which must exist *before* init starts. Once again, you need to ++mount devfs and then create the named pipe *before* init ++starts. ++ ++The default behaviour now is not to mount devfs onto /dev at ++boot time for 2.3.x and later kernels. You can correct this with the ++"devfs=mount" boot option. This solves any problems with init, ++and also prevents the dreaded: ++ ++Cannot open initial console ++ ++message. For 2.2.x kernels where you need to apply the devfs patch, ++the default is to mount. ++ ++If you have automatic mounting of devfs onto /dev then you ++may need to create /dev/initctl in your boot scripts. The ++following lines should suffice: ++ ++mknod /dev/initctl p ++kill -SIGUSR1 1 # tell init that /dev/initctl now exists ++ ++Alternatively, if you don't want the kernel to mount devfs onto ++/dev then you could use the following procedure is a ++guideline for how to get around /dev/initctl problems: ++ ++# cd /sbin ++# mv init init.real ++# cat > init ++#! /bin/sh ++mount -n -t devfs none /dev ++mknod /dev/initctl p ++exec /sbin/init.real $* ++[control-D] ++# chmod a+x init ++ ++Note that newer versions of init create /dev/initctl ++automatically, so you don't have to worry about this. ++ ++Module autoloading ++You will need to configure devfsd to enable module ++autoloading. The following lines should be placed in your ++/etc/devfsd.conf file: ++ ++LOOKUP .* MODLOAD ++ ++ ++As of devfsd-v1.3.10, a generic /etc/modules.devfs ++configuration file is installed, which is used by the MODLOAD ++action. This should be sufficient for most configurations. If you ++require further configuration, edit your /etc/modules.conf ++file. The way module autoloading work with devfs is: ++ ++ ++a process attempts to lookup a device node (e.g. /dev/fred) ++ ++ ++if that device node does not exist, the full pathname is passed to ++devfsd as a string ++ ++ ++devfsd will pass the string to the modprobe programme (provided the ++configuration line shown above is present), and specifies that ++/etc/modules.devfs is the configuration file ++ ++ ++/etc/modules.devfs includes /etc/modules.conf to ++access local configurations ++ ++modprobe will search it's configuration files, looking for an alias ++that translates the pathname into a module name ++ ++ ++the translated pathname is then used to load the module. ++ ++ ++If you wanted a lookup of /dev/fred to load the ++mymod module, you would require the following configuration ++line in /etc/modules.conf: ++ ++alias /dev/fred mymod ++ ++The /etc/modules.devfs configuration file provides many such ++aliases for standard device names. If you look closely at this file, ++you will note that some modules require multiple alias configuration ++lines. This is required to support module autoloading for old and new ++device names. ++ ++Mounting root off a devfs device ++If you wish to mount root off a devfs device when you pass the ++"devfs=only" boot option, then you need to pass in the ++"root=" option to the kernel when booting. If you use ++LILO, then you must have this in lilo.conf: ++ ++append = "root=" ++ ++Surprised? Yep, so was I. It turns out if you have (as most people ++do): ++ ++root = ++ ++ ++then LILO will determine the device number of and will ++write that device number into a special place in the kernel image ++before starting the kernel, and the kernel will use that device number ++to mount the root filesystem. So, using the "append" variety ensures ++that LILO passes the root filesystem device as a string, which devfs ++can then use. ++ ++Note that this isn't an issue if you don't pass "devfs=only". ++ ++TTY issues ++The ttyname(3) function in some versions of the C library makes ++false assumptions about device entries which are symbolic links. The ++tty(1) programme is one that depends on this function. I've ++written a patch to libc 5.4.43 which fixes this. This has been ++included in libc 5.4.44 and a similar fix is in glibc 2.1.3. ++ ++ ++Kernel Naming Scheme ++ ++The kernel provides a default naming scheme. This scheme is designed ++to make it easy to search for specific devices or device types, and to ++view the available devices. Some device types (such as hard discs), ++have a directory of entries, making it easy to see what devices of ++that class are available. Often, the entries are symbolic links into a ++directory tree that reflects the topology of available devices. The ++topological tree is useful for finding how your devices are arranged. ++ ++Below is a list of the naming schemes for the most common drivers. A ++list of reserved device names is ++available for reference. Please send email to ++rgooch@atnf.csiro.au to obtain an allocation. Please be ++patient (the maintainer is busy). An alternative name may be allocated ++instead of the requested name, at the discretion of the maintainer. ++ ++Disc Devices ++ ++All discs, whether SCSI, IDE or whatever, are placed under the ++/dev/discs hierarchy: ++ ++ /dev/discs/disc0 first disc ++ /dev/discs/disc1 second disc ++ ++ ++Each of these entries is a symbolic link to the directory for that ++device. The device directory contains: ++ ++ disc for the whole disc ++ part* for individual partitions ++ ++ ++CD-ROM Devices ++ ++All CD-ROMs, whether SCSI, IDE or whatever, are placed under the ++/dev/cdroms hierarchy: ++ ++ /dev/cdroms/cdrom0 first CD-ROM ++ /dev/cdroms/cdrom1 second CD-ROM ++ ++ ++Each of these entries is a symbolic link to the real device entry for ++that device. ++ ++Tape Devices ++ ++All tapes, whether SCSI, IDE or whatever, are placed under the ++/dev/tapes hierarchy: ++ ++ /dev/tapes/tape0 first tape ++ /dev/tapes/tape1 second tape ++ ++ ++Each of these entries is a symbolic link to the directory for that ++device. The device directory contains: ++ ++ mt for mode 0 ++ mtl for mode 1 ++ mtm for mode 2 ++ mta for mode 3 ++ mtn for mode 0, no rewind ++ mtln for mode 1, no rewind ++ mtmn for mode 2, no rewind ++ mtan for mode 3, no rewind ++ ++ ++SCSI Devices ++ ++To uniquely identify any SCSI device requires the following ++information: ++ ++ controller (host adapter) ++ bus (SCSI channel) ++ target (SCSI ID) ++ unit (Logical Unit Number) ++ ++ ++All SCSI devices are placed under /dev/scsi (assuming devfs ++is mounted on /dev). Hence, a SCSI device with the following ++parameters: c=1,b=2,t=3,u=4 would appear as: ++ ++ /dev/scsi/host1/bus2/target3/lun4 device directory ++ ++ ++Inside this directory, a number of device entries may be created, ++depending on which SCSI device-type drivers were installed. ++ ++See the section on the disc naming scheme to see what entries the SCSI ++disc driver creates. ++ ++See the section on the tape naming scheme to see what entries the SCSI ++tape driver creates. ++ ++The SCSI CD-ROM driver creates: ++ ++ cd ++ ++ ++The SCSI generic driver creates: ++ ++ generic ++ ++ ++IDE Devices ++ ++To uniquely identify any IDE device requires the following ++information: ++ ++ controller ++ bus (aka. primary/secondary) ++ target (aka. master/slave) ++ unit ++ ++ ++All IDE devices are placed under /dev/ide, and uses a similar ++naming scheme to the SCSI subsystem. ++ ++XT Hard Discs ++ ++All XT discs are placed under /dev/xd. The first XT disc has ++the directory /dev/xd/disc0. ++ ++TTY devices ++ ++The tty devices now appear as: ++ ++ New name Old-name Device Type ++ -------- -------- ----------- ++ /dev/tts/{0,1,...} /dev/ttyS{0,1,...} Serial ports ++ /dev/cua/{0,1,...} /dev/cua{0,1,...} Call out devices ++ /dev/vc/0 /dev/tty Current virtual console ++ /dev/vc/{1,2,...} /dev/tty{1...63} Virtual consoles ++ /dev/vcc/{0,1,...} /dev/vcs{1...63} Virtual consoles ++ /dev/pty/m{0,1,...} /dev/ptyp?? PTY masters ++ /dev/pty/s{0,1,...} /dev/ttyp?? PTY slaves ++ ++ ++RAMDISCS ++ ++The RAMDISCS are placed in their own directory, and are named thus: ++ ++ /dev/rd/{0,1,2,...} ++ ++ ++Meta Devices ++ ++The meta devices are placed in their own directory, and are named ++thus: ++ ++ /dev/md/{0,1,2,...} ++ ++ ++Floppy discs ++ ++Floppy discs are placed in the /dev/floppy directory. ++ ++Loop devices ++ ++Loop devices are placed in the /dev/loop directory. ++ ++Sound devices ++ ++Sound devices are placed in the /dev/sound directory ++(audio, sequencer, ...). ++ ++ ++Devfsd Naming Scheme ++ ++Devfsd provides a naming scheme which is a convenient abbreviation of ++the kernel-supplied namespace. In some ++cases, the kernel-supplied naming scheme is quite convenient, so ++devfsd does not provide another naming scheme. The convenience names ++that devfsd creates are in fact the same names as the original devfs ++kernel patch created (before Linus mandated the Big Name ++Change). These are referred to as "new compatibility entries". ++ ++In order to configure devfsd to create these convenience names, the ++following lines should be placed in your /etc/devfsd.conf: ++ ++REGISTER .* MKNEWCOMPAT ++UNREGISTER .* RMNEWCOMPAT ++ ++This will cause devfsd to create (and destroy) symbolic links which ++point to the kernel-supplied names. ++ ++SCSI Hard Discs ++ ++All SCSI discs are placed under /dev/sd (assuming devfs is ++mounted on /dev). Hence, a SCSI disc with the following ++parameters: c=1,b=2,t=3,u=4 would appear as: ++ ++ /dev/sd/c1b2t3u4 for the whole disc ++ /dev/sd/c1b2t3u4p5 for the 5th partition ++ /dev/sd/c1b2t3u4p5s6 for the 6th slice in the 5th partition ++ ++ ++SCSI Tapes ++ ++All SCSI tapes are placed under /dev/st. A similar naming ++scheme is used as for SCSI discs. A SCSI tape with the ++parameters:c=1,b=2,t=3,u=4 would appear as: ++ ++ /dev/st/c1b2t3u4m0 for mode 0 ++ /dev/st/c1b2t3u4m1 for mode 1 ++ /dev/st/c1b2t3u4m2 for mode 2 ++ /dev/st/c1b2t3u4m3 for mode 3 ++ /dev/st/c1b2t3u4m0n for mode 0, no rewind ++ /dev/st/c1b2t3u4m1n for mode 1, no rewind ++ /dev/st/c1b2t3u4m2n for mode 2, no rewind ++ /dev/st/c1b2t3u4m3n for mode 3, no rewind ++ ++ ++SCSI CD-ROMs ++ ++All SCSI CD-ROMs are placed under /dev/sr. A similar naming ++scheme is used as for SCSI discs. A SCSI CD-ROM with the ++parameters:c=1,b=2,t=3,u=4 would appear as: ++ ++ /dev/sr/c1b2t3u4 ++ ++ ++SCSI Generic Devices ++ ++The generic (aka. raw) interface for all SCSI devices are placed under ++/dev/sg. A similar naming scheme is used as for SCSI discs. A ++SCSI generic device with the parameters:c=1,b=2,t=3,u=4 would appear ++as: ++ ++ /dev/sg/c1b2t3u4 ++ ++ ++IDE Hard Discs ++ ++All IDE discs are placed under /dev/ide/hd, using a similar ++convention to SCSI discs. The following mappings exist between the new ++and the old names: ++ ++ /dev/hda /dev/ide/hd/c0b0t0u0 ++ /dev/hdb /dev/ide/hd/c0b0t1u0 ++ /dev/hdc /dev/ide/hd/c0b1t0u0 ++ /dev/hdd /dev/ide/hd/c0b1t1u0 ++ ++ ++IDE Tapes ++ ++A similar naming scheme is used as for IDE discs. The entries will ++appear in the /dev/ide/mt directory. ++ ++IDE CD-ROM ++ ++A similar naming scheme is used as for IDE discs. The entries will ++appear in the /dev/ide/cd directory. ++ ++IDE Floppies ++ ++A similar naming scheme is used as for IDE discs. The entries will ++appear in the /dev/ide/fd directory. ++ ++XT Hard Discs ++ ++All XT discs are placed under /dev/xd. The first XT disc ++would appear as /dev/xd/c0t0. ++ ++ ++Old Compatibility Names ++ ++The old compatibility names are the legacy device names, such as ++/dev/hda, /dev/sda, /dev/rtc and so on. ++Devfsd can be configured to create compatibility symlinks so that you ++may continue to use the old names in your configuration files and so ++that old applications will continue to function correctly. ++ ++In order to configure devfsd to create these legacy names, the ++following lines should be placed in your /etc/devfsd.conf: ++ ++REGISTER .* MKOLDCOMPAT ++UNREGISTER .* RMOLDCOMPAT ++ ++This will cause devfsd to create (and destroy) symbolic links which ++point to the kernel-supplied names. ++ ++ ++----------------------------------------------------------------------------- ++ ++ ++Device drivers currently ported ++ ++- All miscellaneous character devices support devfs (this is done ++ transparently through misc_register()) ++ ++- SCSI discs and generic hard discs ++ ++- Character memory devices (null, zero, full and so on) ++ Thanks to C. Scott Ananian ++ ++- Loop devices (/dev/loop?) ++ ++- TTY devices (console, serial ports, terminals and pseudo-terminals) ++ Thanks to C. Scott Ananian ++ ++- SCSI tapes (/dev/scsi and /dev/tapes) ++ ++- SCSI CD-ROMs (/dev/scsi and /dev/cdroms) ++ ++- SCSI generic devices (/dev/scsi) ++ ++- RAMDISCS (/dev/ram?) ++ ++- Meta Devices (/dev/md*) ++ ++- Floppy discs (/dev/floppy) ++ ++- Parallel port printers (/dev/printers) ++ ++- Sound devices (/dev/sound) ++ Thanks to Eric Dumas and ++ C. Scott Ananian ++ ++- Joysticks (/dev/joysticks) ++ ++- Sparc keyboard (/dev/kbd) ++ ++- DSP56001 digital signal processor (/dev/dsp56k) ++ ++- Apple Desktop Bus (/dev/adb) ++ ++- Coda network file system (/dev/cfs*) ++ ++- Virtual console capture devices (/dev/vcc) ++ Thanks to Dennis Hou ++ ++- Frame buffer devices (/dev/fb) ++ ++- Video capture devices (/dev/v4l) ++ ++ ++----------------------------------------------------------------------------- ++ ++ ++Allocation of Device Numbers ++ ++Devfs allows you to write a driver which doesn't need to allocate a ++device number (major&minor numbers) for the internal operation of the ++kernel. However, there are a number of userspace programmes that use ++the device number as a unique handle for a device. An example is the ++find programme, which uses device numbers to determine whether ++an inode is on a different filesystem than another inode. The device ++number used is the one for the block device which a filesystem is ++using. To preserve compatibility with userspace programmes, block ++devices using devfs need to have unique device numbers allocated to ++them. Furthermore, POSIX specifies device numbers, so some kind of ++device number needs to be presented to userspace. ++ ++The simplest option (especially when porting drivers to devfs) is to ++keep using the old major and minor numbers. Devfs will take whatever ++values are given for major&minor and pass them onto userspace. ++ ++This device number is a 16 bit number, so this leaves plenty of space ++for large numbers of discs and partitions. This scheme can also be ++used for character devices, in particular the tty devices, which are ++currently limited to 256 pseudo-ttys (this limits the total number of ++simultaneous xterms and remote logins). Note that the device number ++is limited to the range 36864-61439 (majors 144-239), in order to ++avoid any possible conflicts with existing official allocations. ++ ++Please note that using dynamically allocated block device numbers may ++break the NFS daemons (both user and kernel mode), which expect dev_t ++for a given device to be constant over the lifetime of remote mounts. ++ ++A final note on this scheme: since it doesn't increase the size of ++device numbers, there are no compatibility issues with userspace. ++ ++----------------------------------------------------------------------------- ++ ++ ++Questions and Answers ++ ++ ++Making things work ++Alternatives to devfs ++What I don't like about devfs ++How to report bugs ++Strange kernel messages ++Compilation problems with devfsd ++ ++ ++ ++Making things work ++ ++Here are some common questions and answers. ++ ++ ++ ++Devfsd doesn't start ++ ++Make sure you have compiled and installed devfsd ++Make sure devfsd is being started from your boot ++scripts ++Make sure you have configured your kernel to enable devfs (see ++below) ++Make sure devfs is mounted (see below) ++ ++ ++Devfsd is not managing all my permissions ++ ++Make sure you are capturing the appropriate events. For example, ++device entries created by the kernel generate REGISTER events, ++but those created by devfsd generate CREATE events. ++ ++ ++Devfsd is not capturing all REGISTER events ++ ++See the previous entry: you may need to capture CREATE events. ++ ++ ++X will not start ++ ++Make sure you followed the steps ++outlined above. ++ ++ ++Why don't my network devices appear in devfs? ++ ++This is not a bug. Network devices have their own, completely separate ++namespace. They are accessed via socket(2) and ++setsockopt(2) calls, and thus require no device nodes. I have ++raised the possibilty of moving network devices into the device ++namespace, but have had no response. ++ ++ ++How can I test if I have devfs compiled into my kernel? ++ ++All filesystems built-in or currently loaded are listed in ++/proc/filesystems. If you see a devfs entry, then ++you know that devfs was compiled into your kernel. If you have ++correctly configured and rebuilt your kernel, then devfs will be ++built-in. If you think you've configured it in, but ++/proc/filesystems doesn't show it, you've made a mistake. ++Common mistakes include: ++ ++Using a 2.2.x kernel without applying the devfs patch (if you ++don't know how to patch your kernel, use 2.4.x instead, don't bother ++asking me how to patch) ++Forgetting to set CONFIG_EXPERIMENTAL=y ++Forgetting to set CONFIG_DEVFS_FS=y ++Forgetting to set CONFIG_DEVFS_MOUNT=y (if you want devfs ++to be automatically mounted at boot) ++Editing your .config manually, instead of using make ++config or make xconfig ++Forgetting to run make dep; make clean after changing the ++configuration and before compiling ++Forgetting to compile your kernel and modules ++Forgetting to install your kernel ++Forgetting to install your modules ++ ++Please check twice that you've done all these steps before sending in ++a bug report. ++ ++ ++ ++How can I test if devfs is mounted on /dev? ++ ++The device filesystem will always create an entry called ++".devfsd", which is used to communicate with the daemon. Even ++if the daemon is not running, this entry will exist. Testing for the ++existence of this entry is the approved method of determining if devfs ++is mounted or not. Note that the type of entry (i.e. regular file, ++character device, named pipe, etc.) may change without notice. Only ++the existence of the entry should be relied upon. ++ ++ ++When I start devfsd, I see the error: ++Error opening file: ".devfsd" No such file or directory? ++ ++This means that devfs is not mounted. Make sure you have devfs mounted. ++ ++ ++How do I mount devfs? ++ ++First make sure you have devfs compiled into your kernel (see ++above). Then you will either need to: ++ ++set CONFIG_DEVFS_MOUNT=y in your kernel config ++pass devfs=mount to your boot loader ++mount devfs manually in your boot scripts with: ++mount -t none devfs /dev ++ ++ ++ ++Mount by volume LABEL=