makedev (2.3.1-89) MAKEDEV

Summary

 MAKEDEV | 1935 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 1753 insertions(+), 182 deletions(-)

    
download this patch

Patch contents

--- makedev-2.3.1.orig/MAKEDEV
+++ makedev-2.3.1/MAKEDEV
@@ -1,6 +1,5 @@
 #! /bin/sh -
-
-RCSID='$Id: MAKEDEV 2.3 1997/09/29 19:03:13 johnsonm Exp $'
+# $Id$
 
 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
 # Customisation:
@@ -10,25 +9,78 @@
 # system, and you may change the permissions to suit your preference.  These
 # lines _must_ be of the format "user group perm".
 
- public="  root sys    666"
- system="  root sys    660"
-   kmem="  root kmem   660"
-    tty="  root tty    666"
-   cons="  root tty    622"	# 622 for console?
-    vcs="  root sys    600"
-dialout="  root uucp   660"
-  mouse="  root sys    666"
-printer="  root daemon 660"
- floppy="  root floppy 660"
-   disk="  root disk   660"
-   scsi="  root sys    600"
-  cdrom="  root disk   660"
-   tape="  root disk   660"
-  audio="  root sys    666"
-  ibcs2="  root sys    666"
-scanner="  root sys    666"
+ public="  root root   0666"
+private="  root root   0600"
+ system="  root root   0660"
+   kmem="  root kmem   0640"
+    tty="  root tty    0666"
+   cons="  root tty    0600"
+dialout="  root dialout 0660"
+    dip="  root dip    0660"
+  mouse="  root root   0660"
+printer="  root lp     0660"
+ floppy="  root floppy 0660"
+   disk="  root disk   0660"
+   scsi="  root root   0600"
+  cdrom="  root cdrom  0660"
+   tape="  root tape   0660"
+  audio="  root audio  0660"
+  video="  root video  0660"
+  ibcs2="  root root   0666"
+scanner="  root root   0666"
+   coda="  root root   0600"
+  ipsec="  root root   0200"
+readable="  root root   0444"
+   lirc="  root video   0640"
+
+MAXVT=63
+
+# defaults for $major_*
+major_ide0=3
+major_ide1=22
+major_sd=8
+major_lp=6
+
+# Remark: OSS/Linux becomes major_OSSLinux
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+# try to do the right things if udev is running
+if [ "$WRITE_ON_UDEV" ]; then
+  :
+elif [ -d /dev/.static/dev/ ] && [ "`pwd`" = /dev ] && [ -e /proc/mounts ] \
+    && grep -qE '^[^ ]+ /dev/\.static/dev' /proc/mounts; then
+  echo "udev active, devices will be created in /dev/.static/dev/"
+  cd /dev/.static/dev/
+elif [ -d /.dev/ ] && [ "`pwd`" = /dev ] && [ -e /proc/mounts ] \
+    && grep -qE '^[^ ]+ /\.dev' /proc/mounts; then
+  echo "udev active, devices will be created in /.dev/"
+  cd /.dev/
+elif [ -d .udevdb/ -o -d .udev/ ] && [ "`pwd`" = /dev ]; then
+  echo ".udevdb or .udev presence implies active udev.  Aborting MAKEDEV invocation."
+  # use exit 0, not 1, so postinst scripts don't fail on this
+  exit 0
+fi
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+# don't stomp on devfs users
+if  [ -c .devfsd ]
+then
+    echo ".devfsd presence implies active DevFS.  Aborting MAKEDEV invocation."
+    # use exit 0, not 1, so postinst scripts don't fail on this
+    exit 0
+fi
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
 
-MAXVT=8
+# don't stomp on non-Linux users
+if [ "$(uname -s)" != "Linux" ]
+then
+    echo "Results undefined on non-Linux systems, aborting MAKEDEV invocation."
+    # use exit 0, not 1, so postinst scripts don't fail on this
+    exit 0
+fi
 
 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
 
@@ -53,7 +105,8 @@
 
 if [ "$opt_V" ]
 then
-	echo "$RCSID"
+	echo "This is Debian MAKEDEV.  For version info, try 'dpkg --list makedev'"
+	echo "See /usr/share/doc/makedev/ for more information on Debian MAKEDEV."
 	exit 0
 fi
 
@@ -61,6 +114,11 @@
 
 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
 
+devicename () {	# translate device names to something safe
+	# A-Z is not full alphabet in all locales (e.g. in et_EE)
+	echo "$*" | LC_ALL=C sed -e 's/[^A-Za-z0-9_]/_/g' 
+}
+
 makedev () {	# usage: makedev name [bcu] major minor owner group mode
 	if [ "$opt_v" ]
 	then	if [ "$opt_d" ]
@@ -68,16 +126,60 @@
 		else	echo "create $1	$2 $3 $4 $5:$6 $7" 
 		fi
 	fi
+	# missing parameters are a bug - bail - should we do an exit 1 here?
+	case :$1:$2:$3:$4:$5:$6:$7: in
+		*::*) echo "Warning: MAKEDEV $@ is missing parameter(s)." >&2;;
+	esac
 	if [ ! "$opt_n" ]
+	then	
+		if [ "$opt_d" ]
+		then
+			rm -f $1
+		else
+			rm -f $1-
+			if mknod $1- $2 $3 $4 &&
+			   chown $5:$6 $1- &&
+			   chmod $7 $1- &&
+			   mv $1- $1
+			then
+				:	# it worked
+			else
+					# Didn't work, clean up any mess...
+				echo "makedev $@: failed"
+				rm -f $1-
+			fi
+		fi
+	fi
+}
+makefifo () { # usage: makefifo name owner group mode
+	if [ "$opt_v" ]
 	then	if [ "$opt_d" ]
+		then	echo "delete $1"
+		else	echo "create $1 $2:$3 $4" 
+		fi
+	fi
+	# missing parameters are a bug - bail - should we do an exit 1 here?
+	case :$1:$2:$3:$4: in
+		*::*) echo "Warning: MAKEFIFO $@ is missing parameter(s)." >&2;;
+	esac
+	if [ ! "$opt_n" ]
+	then	
+		if [ "$opt_d" ]
 		then
 			rm -f $1
 		else
 			rm -f $1-
-			mknod $1- $2 $3 $4 &&
-			chown $5:$6 $1- &&
-			chmod $7 $1- &&
-			mv $1- $1
+			if mknod $1- p &&
+			   chown $2:$3 $1- &&
+			   chmod $4 $1- &&
+			   mv $1- $1
+			then
+				:	# it worked
+			else
+					# Didn't work, clean up any mess...
+				echo "makefifo $@: failed"
+				rm -f $1-
+			fi
 		fi
 	fi
 }
@@ -94,41 +196,30 @@
 
 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
 
-# For bash and ksh, we can use faster builtin routines to do manipulation,
-# otherwise (ash) fall back to slower method using `expr'.
-# The extra level of indirection using `eval' is necessary a) for ksh, and
-# b) to get past ash.
+# Debian allows us to assume /bin/sh is a POSIX compliant shell, so go for it!
 
-if [ "$RANDOM" != "$RANDOM" ]
-then
-	math () {
-		eval echo "\$(($*))"
-	}
-	index () {	# index string c
-		eval "I=\${1%$2*}"
-		eval echo "\${#I}"
-	}
-	suffix () {
-	    eval echo "\${1#$2}"
-	}
-	strip () {
-		eval echo "\${1% $2 *} \${1#* $2 }"
-	}
-else
-	math () {
-		expr "$@"
-	}
-	index () {	# index string c
-		expr $1 : ".*$2" - 1
-	}
-	suffix () {
-		expr "$1" : "$2\(.*\)"
-	}
-	strip () {
-		echo "[$1][$2]" >&2
-		echo "`expr \"$1\" : \"\(.*\) $2 \"` `expr \"$1\" : \".* $2 \(.*\)\"`"
-	}
-fi
+math () {
+	eval echo "\$(($*))"
+}
+index () {	# index string c
+	eval "I=\${1%$2*}"
+	eval echo "\${#I}"
+}
+suffix () {
+	eval echo "\${1#$2}"
+}
+strip () {
+	eval echo "\${1% $2 *} \${1#* $2 }"
+}
+first () {
+	echo "${1%%?}"
+}
+second () {
+	echo "${1##?}"
+}
+substr () {
+	echo $1 | dd bs=1 count=1 skip=$(( $2 - 1 )) 2> /dev/null
+}
 
 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
 
@@ -138,13 +229,15 @@
 	echo "$0: warning: can't read $procfs/devices" >&2
 else
 	exec 3<$procfs/devices
-	while read major device <&3
+	while read major device extra <&3
 	do
+		device=`echo $device | sed 's#/.*##'`
 		case "$major" in
 			Character|Block|'')
 				;;
 			*)
-				eval "major_$device=$major"
+				safedevname=`devicename $device`
+				eval "major_$safedevname=$major"
 				devices="$devices $device"
 				;;
 		esac
@@ -154,11 +247,12 @@
 
 Major () {
 	device=$2
+	devname=`devicename $1`
 	if [ "$opt_d" ]
 	then
 		echo -1	# don't care
 	else
-		eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
+		eval echo \${major_$devname:-\${device:?\"unknown major number for $1\"}}
 	fi
 }
 
@@ -166,8 +260,8 @@
 	while [ $# -ne 0 ]
 	do
 		case "$1" in
-			mem|tty|ttyp|cua|cub)	;;
-			hd)	(for d in a b c d e f g h ; do
+			mem|tty|ttyp|cua|cub|cui)	;;
+			hd)	(for d in a b c d e f g h i j k l m n o p ; do
 					echo -n hd$d " "
 				 done) ; echo
 				;;
@@ -175,13 +269,30 @@
 			ide1)	echo hdc hdd ;;
 			ide2)	echo hde hdf ;;
 			ide3)	echo hdg hdh ;;
-			sd)	echo sda sdb ;;
-			sr)	echo scd0 ;;
+			ide4)	echo hdi hdj ;;
+			ide5)	echo hdk hdl ;;
+			ide6)	echo hdm hdn ;;
+			ide7)	echo hdo hdp ;;
+			ide8)	echo hdq hdr ;;
+			ide9)	echo hds hdt ;;
+			sd)	(for d in a b c d e f g h i j k l m n o p ; do
+					echo -n sd$d " "
+				 done) ; echo
+				;;
+			dasd)   (for d in a b c d e f g h i j k l m \
+					n o p q r s t u v w x y z ; do
+					echo -n dasd$d " "
+				done) ; echo
+				;;
+			raw)	echo raw ;;
+			sg)	echo sg ;;
+			sr)	echo scd ;;
 			st)	echo st0 ;;
 			xd)	echo xda xdb ;;
-			fd)	echo fd0 fd1 ;;
+			ad)	echo ada adb ;;
 			lp)	echo lp ;;
 			mt)	echo ftape ;;
+			qft)	echo ftape ;;
 			loop)	echo loop ;;
 			md)	echo md ;;
 			ibcs2)	echo ibcs2 ;;
@@ -191,35 +302,330 @@
 			ac4096)		echo ac4096 ;;
 			hw)	echo helloworld ;;
 			sbpcd | sbpcd[123])	echo $1 ;;
-			Joystick)	echo js ;;
+			joystick)	echo js ;;
+			input)	echo input ;;
 			apm_bios)	echo apm ;;
 			dcf)		echo dcf ;;
 			aztcd)		echo aztcd ;;
+			cm206cd)	echo cm206cd ;;
+			gscd)		echo gscd ;;
 			pcmcia)	;; # taken care of by its own driver
 			ttyC)	echo cyclades ;;
+			isdn)	echo isdnmodem isdnbri dcbri ;;
 			vcs)	;;
-			*)	echo "$0: don't know what \"$1\" is" >&2 ;;
+			pty)	echo pty ;;
+			misc)	echo misc ;;
+			3dfx)	echo 3dfx ;;
+			agpgart)	echo agpgart ;;
+			microcode)	echo microcode ;;
+			ipmi|ipmikcs)	echo ipmi ;;
+			fb)	echo fb ;;
+			nb|drbd)	echo nb0 nb1 nb2 nb3 nb4 nb5 nb6 nb7;;
+			netlink)	echo netlink ;;
+			tap)	echo netlink ;;
+			hamradio)	echo hamradio ;;
+			snd)	;;
+			ptm)	;;
+			pts)	;;
+			ttyB)	(for l in 0 1 2 3 4 5 6 7 ; do
+					echo -n ttyB$l " "
+				 done) ; echo
+				;;
+			ttyS)	echo ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ;;
+			ttyI)	echo ttyI0 ttyI1 ttyI2 ttyI3 ;;
+			ircomm|irlpt)	irda ;;
+			ppp)    echo ppp ;;
+			usb)    echo usb ;;
+			dpt_i2o)	echo dpti ;;
+			bluetooth)	echo bluetooth ;;
+			lvm)    ;; # taken care of by LVM userspace tools
+			ramdisk)	echo ram ;;
+			null)	echo std ;;
+			zero)	echo std ;;
+#			*)	echo "$0: don't know what \"$1\" is" >&2 ;;
+			*)	echo $1
 		esac
 		shift
 	done
 }
 
-for arg
+for arg in `cvt $*`
 do
+	# this is to make the case patterns work as expected in all locales
+	LC_ALL=C
 	case $arg in
 	generic)
+		# pick the right generic-<arch> using dpkg's knowledge
+		case `dpkg --print-architecture` in
+			alpha)
+				$0 $opts generic-alpha
+				;;
+			arm|armeb|armel)
+				$0 $opts generic-arm
+				;;
+			hppa)
+				$0 $opts generic-hppa
+				;;
+			i386|lpia)
+				$0 $opts generic-i386
+				;;
+			amd64)
+				$0 $opts generic-i386
+				;;
+			ia64)
+				$0 $opts generic-ia64
+				;;
+			m68k)
+				$0 $opts generic-m68k
+				;;
+			mips)
+				$0 $opts generic-mips
+				;;
+			mipsel)
+				$0 $opts generic-mipsel
+				;;
+			powerpc)
+				$0 $opts generic-powerpc
+				;;
+			ppc64)
+				$0 $opts generic-powerpc
+				;;
+			s390)
+				$0 $opts generic-s390
+				;;
+			sh*)	
+				$0 $opts generic-sh
+				;;
+			sparc)
+				$0 $opts generic-sparc
+				;;
+			*)
+				echo "$0: no support for generic on this arch" >&2
+				exit 1
+				;;
+		esac
+		;;
+	generic-alpha)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts xda xdb
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts dac960
+		;;
+	generic-arm)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts xda xdb
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		makedev sunmouse  c 10 6 $mouse
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		;;
+	generic-hppa)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts ttyB0 ttyB1 ttyB2 ttyB3 ttyB4 ttyB5 ttyB6 ttyB7
+		$0 $opts busmice
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts rtc
+		;;
+	generic-i386)
 		$0 $opts std
 		$0 $opts fd
 		$0 $opts fd0 fd1
-		$0 $opts hda hdb
+		$0 $opts hd sd
 		$0 $opts xda xdb
-		$0 $opts sda sdb
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts input
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts isdn-io eda edb sonycd mcd mcdx cdu535
+		$0 $opts optcd sjcd cm206cd gscd 
+		$0 $opts lmscd sbpcd aztcd bpcd dac960 dpti ida ataraid cciss
+		$0 $opts i2o.hda i2o.hdb i2o.hdc i2o.hdd
+		;;
+	generic-ia64)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
 		$0 $opts pty
 		$0 $opts console
-		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
 		$0 $opts busmice
+		$0 $opts input
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts efirtc
+		;;
+	generic-m68k)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts sg
+		$0 $opts ada adb adc add ade adf
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
+		$0 $opts m68k-mice
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts nvram
+		$0 $opts audio
+		$0 $opts fb
+		;;
+	generic-mips)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
 		$0 $opts lp
 		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts busmice
+		;;
+	generic-mipsel)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts rtc
+		;;
+	generic-powerpc)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts m68k-mice
+		$0 $opts input
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts nvram
+		$0 $opts audio
+		$0 $opts adb
+		$0 $opts fb
+		$0 $opts rtc
+		$0 $opts isdn-io
+		;;
+	generic-s390)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts dasda dasdb dasdc dasdd dasde dasdf dasdg dasdh \
+			dasdi dasdj dasdk dasdl dasdm dasdn dasdo dasdp \
+			dasdq dasdr dasds dasdt dasdu dasdv dasdw dasdx \
+			dasdy dasdz
+		$0 $opts pty
+		$0 $opts consoleonly
+		$0 $opts rtc
+		;;
+	generic-sh)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4  
+		$0 $opts ttySC0 ttySC1 ttySC2 ttySC3 
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts rtc
+		;;
+	generic-sparc)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts fb
+		$0 $opts rtc
+		makedev kbd  c 11 0 $cons
+		makedev sunmouse  c 10 6 $mouse
+		symlink mouse sunmouse
+		makedev openprom  c 10 139 root root 0664
 		;;
 	local)
 		$0.local $opts
@@ -232,41 +638,152 @@
 		makedev zero c 1 5 $public
 		symlink core $procfs/kcore
 		makedev full c 1 7 $public
-		$0 ram
+		makedev random c 1 8 $public
+		makedev urandom c 1 9 $public
 		makedev tty  c 5 0 $tty
+		$0 $opts ram
+		$0 $opts loop
+		;;
+	hamradio)
+		$0 $opts scc
+		$0 $opts bc
+		;;
+	scc)
+		for unit in 0 1 2 3 4 5 6 7 
+		do
+			makedev scc$unit c 34 $unit $system
+		done
+		;;
+	mtd)	
+		for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev mtd$unit c 90 `math $unit \* 2` $system
+		done
+		;;
+	bc)	
+		for unit in 0 1 2 3
+		do
+			makedev bc$unit c 51 $unit $system
+		done
+		;;
+	random)
+		makedev random c 1 8 $public
+		;;
+	urandom)
+		makedev urandom c 1 9 $readable
 		;;
 	ram)
-		for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
 			makedev ram$i  b 1 $i $disk
 		done
-		ln -sf ram1 ram
+		symlink ram ram1
 		;;
-	console)
-		major=`Major vcs`	# not fatal
-		# console
+	ram[0-9]|ram1[0-6])
+		unit=`suffix $arg ram`
+		makedev ram$unit b 1 $unit $disk
+		;;
+	initrd)
+		makedev initrd b 1 250 $disk
+		;;
+	raw)
+		makedev rawctl c 162 0 $disk
+		mkdir -p raw
+		for i in 1 2 3 4 5 6 7 8; do
+			makedev raw/raw$i c 162 $i $disk
+		done
+		;;
+	consoleonly)
 		makedev tty0 c 4 0 $cons
-		symlink console tty0
-		[ "$major" ] && makedev vcs0 c $major 0 $vcs
-		[ "$major" ] && makedev vcsa c $major 128 $vcs
+		#	new kernels need a device, old ones a symlink... sigh
+		kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
+		kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
+		if [ $kern_rev1 -gt 2 ]
+		then
+			makedev console c 5 1 $cons
+		else
+			if [ $kern_rev1 -eq 2 ] && [ $kern_rev2 -ge 1 ]
+			then
+				makedev console c 5 1 $cons
+			else
+				symlink console tty0
+			fi
+		fi
+		;;
+	console)
+		$0 $opts consoleonly
+		major=`Major vcs 7`       # not fatal
+		[ "$major" ] && makedev vcs0 c $major 0 $cons
+		symlink vcs vcs0
+		[ "$major" ] && makedev vcsa0 c $major 128 $cons
+		symlink vcsa vcsa0
 		# individual vts
 		line=1
-		while [ $line -le $MAXVT -a $line -le 63 ]
+		while [ $line -le $MAXVT ] && [ $line -le 63 ]
 		do
-			makedev tty$line c 4 $line $tty
-			[ "$major" ] && makedev vcs$line c $major $line $vcs
-			[ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs
+			makedev tty$line c 4 $line $cons
+			[ "$major" ] && makedev vcs$line c $major $line $cons
+			[ "$major" ] && makedev vcsa$line c $major `math $line + 128` $cons
 			line=`math $line + 1`
 		done
 		;;
+	adb)
+		# pick the right arch device using dpkg's knowledge
+		case `dpkg --print-architecture` in
+			powerpc)
+				# ADB bus devices (char)
+				makedev adb c 56 0 $mouse
+				makedev adbmouse c 10 10 $mouse
+				;;
+			m68k)
+				# ACSI disk 2, whole device (block)
+				makedev adb b 28 16 $disk
+				for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+				do
+					minor=$(( 16 + $part ))
+					makedev adb$part b 28 $minor $disk
+				done
+				;;
+			*)
+				echo "no support for adb on this arch" >&2
+				exit 1
+				;;
+		esac
+		;;
+	raw1394)
+		makedev raw1394 c 171 0 $disk
+		;;
+	video1394)
+		rm -f video1394
+		mkdir -p video1394
+		for i in `seq 0 15`
+		do
+			makedev video1394/$i c 171 `math 16 + $i` $video
+		done
+		;;
+	alsa)
+		echo "You requested 'alsa' devices.  Please install the alsa-base package instead,"
+		echo "which creates and maintains device information for ALSA."
+		;;
+	nvram)
+		makedev nvram c 10 144 $mouse
+		;;
 	tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
 		line=`suffix $arg tty`
-		makedev tty$line c 4 $line $tty
+		makedev tty$line c 4 $line $cons
 		;;
 	ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
 		line=`suffix $arg ttyS`
 		minor=`math 64 + $line`
-		makedev ttyS$line c 4 $minor $tty
-		makedev cua$line c 5 $minor $dialout
+		makedev ttyS$line c 4 $minor $dialout
+		;;
+	ttySC[0-3])
+		line=`suffix $arg ttySC`
+		minor=`math 8 + $line`
+		makedev ttySC$line c 204 $minor $dialout
+ 		;;
+	ttyB[0-7])
+		minor=`suffix $arg ttyB`
+		makedev ttyB$minor c 11 $minor $dialout
 		;;
 	pty[a-ep-z])
 		bank=`suffix $arg pty`
@@ -285,42 +802,404 @@
 		do
 			ptysufs="$ptysufs pty$i"
 		done
-		$0 $opts $ptysufs
+		$0 $opts $ptysufs ptmx
 		;;
-	cyclades)
-		major1=`Major ttyC` || continue
-		major2=`Major cub` || continue
+	ptmx)
+		# master pty multiplexer for 2.1 kernels
+		makedev ptmx c 5 2 $tty
+		;;
+	cyclades|ttyC)
+		major1=`Major ttyC 19` || continue
+		#major2=`Major cub 20` || continue
 		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
-                         16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
+			  16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
+		do
+			makedev ttyC$i c $major1 $i $dialout
+			#makedev cub$i c $major2 $i $dialout
+		done
+		;;
+	stallion|ttyE)
+		major1=`Major ttyE 24` || continue
+		#major2=`Major cue 25` || continue
+		majorc=28
+		minor=0
+		until [ $minor -gt 256 ]
+		do
+			makedev ttyE$minor c $major1 $minor $dialout
+			#makedev cue$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		for i in 0 1 2 3
+		do
+			makedev staliomem$i c $majorc $i $private
+		done
+		;;
+	chase|ttyH)
+		major1=`Major ttyH 17` || continue
+		#major2=`Major cuh 18` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyH$minor c $major1 $minor $dialout
+			#makedev cuh$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	rocketport|ttyR)
+		major1=`Major ttyR 46` || continue
+		#major2=`Major cur 47` || continue
+		minor=0
+		until [ $minor -gt 64 ] # tell me if 64 is wrong
+		do
+			makedev ttyR$minor c $major1 $minor $dialout
+			#makedev cur$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	ttyV)
+		major1=`Major ttyV 105` || continue
+		#major2=`Major cuv 106` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyV$minor c $major1 $minor $dialout
+			#makedev cuv$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	digi|ttyD)
+		major1=`Major ttyD 22` || continue
+		#major2=`Major cud 23` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyD$minor c $major1 $minor $dialout
+			#makedev cud$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	specialix|ttyX)
+		major1=`Major ttyX 32` || continue
+		#major2=`Major cux 33` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyX$minor c $major1 $minor $dialout
+			#makedev cux$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	specialixIO8|ttyW)
+		major1=`Major ttyW 75` || continue
+		#major2=`Major cuw 76` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyW$minor c $major1 $minor $dialout
+			#makedev cuw$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	PAM|ttyM)
+		major1=`Major ttyM 79` || continue
+		#major2=`Major cum 80` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyM$minor c $major1 $minor $dialout
+			#makedev cum$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	riscom|ttyL)
+		major=`Major ttyL 48` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyL$minor c $major $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	computone|ttyF)
+		major=`Major ttyF 71` || continue
+		#major2=`Major cuf 72` || continue
+		minor=0
+		until [ $minor -gt 255 ]
+		do
+			makedev ttyF$minor c $major $minor $dialout
+			#makedev cuf$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		major=73
+		for i in 0 4 8 12
+		do
+			makedev ip2ipl$i  c $major $i $private
+			makedev ip2stat$i c $major `math $i + 1` $private
+		done
+		;;
+	ESP|ttyP)
+		major=`Major ttyP 57` || continue
+		#major2=`Major cup 58` || continue
+		minor=0
+		until [ $minor -gt 4 ] # tell me if 4 is wrong
+		do
+			makedev ttyP$minor c $major $minor $dialout
+			#makedev cup$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	COMX|comx)
+		major=`Major comx 88` || continue
+		minor=0
+		until [ $minor -gt 4 ] # tell me if 4 is wrong
+		do
+			makedev comx$minor c $major $minor $private
+			minor=`math $minor + 1`
+		done
+		;;
+	isdnmodem|ttyI)
+		major1=`Major ttyI 43` || continue
+		#major2=`Major cui 44` || continue
+		minor=0
+		until [ $minor -gt 63 ]
+		do
+			makedev ttyI$minor c $major1 $minor $dialout
+			#makedev cui$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	isdnbri)
+		major=45
+		minor=0
+		until [ $minor -gt 63 ]
+		do
+			makedev isdn$minor c $major $minor $dialout
+			makedev isdnctrl$minor c $major `math $minor + 64` $dialout
+			makedev ippp$minor c $major `math $minor + 128` $dialout
+			minor=`math $minor + 1`
+		done
+		makedev isdninfo c $major 255 $private
+		;;
+	dcbri)
+		major=52
+		for i in 0 1 2 3
+		do
+			makedev dcbri$i c $major $i $dialout
+		done
+		;;
+	capi)
+		major=68
+		makedev capi20 c $major 0 $dialout
+		for i in 0 1 2 3 4 5 6 7 8 9
+		do
+			makedev capi20.0$i c $major `math $i + 1` $dialout
+		done
+		for i in 10 11 12 13 14 15 16 17 18 19
+		do
+			makedev capi20.$i c $major `math $i + 1` $dialout
+		done
+		;;
+	ubd)
+		major=98
+		for devicenum in 0 1 2 3 4 5 6 7
+		do
+			device=ubd`substr abcdefgh $(($devicenum + 1))`
+			baseminor=`math $devicenum \* 16`
+			makedev $device b $major $baseminor $disk
+			for partition in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+			do
+				minor=`math $baseminor + $partition`
+				makedev $device$partition b $major $minor $disk
+			done
+		done
+		;;
+	fb)
+		for i in 0 1 2 3 4 5 6 7
 		do
-			makedev ttyC$i c $major1 $i $tty
-			makedev cub$i c $major2 $i $dialout
+			makedev fb$i c 29 $i $video
 		done
 		;;
+	fb[0-7])
+		dev=`suffix $arg fb`
+		makedev fb$dev c 29 $dev $video
+		;;
+	netlink|tap|tap[0-9]|tap1[0-5])
+		makedev route     c 36 0 $coda
+		makedev skip      c 36 1 $coda
+		makedev fwmonitor c 36 3 $coda
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev tap$i c 36 `math $i + 16` $coda
+		done
+		;;
+	tun)
+		mkdir -p net
+		makedev net/tun c 10 200 $system
+		;;
 	lp)
-		major=`Major lp` || continue
+		major=`Major lp 6` || continue
 		makedev ${arg}0 c $major 0 $printer
 		makedev ${arg}1 c $major 1 $printer
 		makedev ${arg}2 c $major 2 $printer
 		;;
 	par)
-		major=`Major lp` || continue
+		major=`Major lp 6` || continue
 		makedev ${arg}0 c $major 0 $printer
 		makedev ${arg}1 c $major 1 $printer
 		makedev ${arg}2 c $major 2 $printer
 		;;
+	parport)
+		major=`Major parport 99` || continue
+		makedev ${arg}0 c $major 0 $printer
+		makedev ${arg}1 c $major 1 $printer
+		makedev ${arg}2 c $major 2 $printer
+		;;
+	slm)
+		major=`Major slm 28` || continue
+		for i in 0 1 2 3
+		do
+			makedev slm c $major $i $printer
+		done
+		;;
+	input)
+		major=`Major pcsp 13` || continue
+		mkdir -p input
+		for i in 0 1 2 3
+		do
+			makedev input/js$i c $major $i $mouse
+			makedev input/mouse$i c $major `math $i + 32` $mouse
+			makedev input/event$i c $major `math $i + 64` $mouse
+		done
+		makedev input/mice c $major 63 $mouse
+		;;
 	busmice)
 		major=`Major mouse 10` || continue
-		makedev logimouse c $major 0 $mouse
-		makedev psmouse   c $major 1 $mouse
-		makedev msmouse   c $major 2 $mouse
-		makedev atimouse  c $major 3 $mouse
-		makedev jmouse    c $major 4 $mouse
+		makedev logibm	  c $major 0 $mouse
+		makedev psaux     c $major 1 $mouse
+		makedev inportbm  c $major 2 $mouse
+		makedev atibm     c $major 3 $mouse
+		makedev jbm       c $major 4 $mouse
+		;;
+	m68k-mice)
+		major=`Major mouse 10` || continue
+		makedev amigamouse c $major 4 $mouse
+		makedev atarimouse c $major 5 $mouse
+		makedev amigamouse1 c $major 7 $mouse
+		makedev adbmouse  c $major 10 $mouse
+		;;
+	3dfx)
+		major=`Major $arg 107` || continue
+		makedev $arg	c $major 0 $video
+		;;
+	agpgart)
+		major=`Major $arg 10` || continue
+		makedev $arg	c $major 175 $video
+		;;
+	hwrng)
+		major=`Major $arg 10` || continue
+		makedev $arg	c $major 183 $private
+		;;
+	mcelog)
+		major=`Major $arg 10` || continue
+		makedev $arg	c $major 227 $private
+		;;
+	cpu|microcode)
+		mkdir -p cpu
+		makedev cpu/microcode c 10 184 $private
+		for i in 0 1 2 3
+		do
+			mkdir -p cpu/$i
+			makedev cpu/$i/msr   c 202 $i $private
+			makedev cpu/$i/cpuid c 203 $i $private
+		done
+		;;
+	ipmi|ipmikcs)
+		major=`Major ipmikcs 10` || continue
+		makedev ipmikcs	c $major 173 $private
+		;;
+	irda)
+		for i in 0 1
+		do
+			makedev ircomm$i c 161 $i $dialout
+			makedev irlpt$i  c 161 `math $i + 16` $printer
+		done
+		;;
+	irnet)
+		makedev irnet c 10 187 $system
+		;;
+	cbm)
+		makedev cbm c 10 177 $floppy
+		;;
+	misc)
+		major=`Major mouse 10` || continue
+		makedev logibm	  c $major 0 $mouse
+		makedev psaux     c $major 1 $mouse
+		makedev inportbm  c $major 2 $mouse
+		makedev atibm     c $major 3 $mouse
+		makedev jbm       c $major 4 $mouse
+		makedev amigamouse c $major 4 $mouse
+		makedev atarimouse c $major 5 $mouse
+		makedev sunmouse  c $major 6 $mouse
+		makedev amigamouse1 c $major 7 $mouse
+		makedev smouse    c $major 8 $mouse
+		makedev pc110pad  c $major 9 $mouse
+		makedev adbmouse  c $major 10 $mouse
+		makedev beep      c $major 128 $mouse
+		makedev modreq    c $major 129 $mouse
+		makedev watchdog  c $major 130 $mouse
+		makedev temperature c $major 131 $mouse
+		makedev hwtrap    c $major 132 $mouse
+		makedev exttrp    c $major 133 $mouse
+		makedev apm_bios  c $major 134 $mouse
+		makedev rtc       c $major 135 $mouse
+		makedev openprom  c $major 139 root root 0664
+		makedev relay8    c $major 140 $mouse
+		makedev relay16   c $major 141 $mouse
+		makedev msr       c $major 142 $mouse
+		makedev pciconf   c $major 143 $mouse
+		makedev nvram     c $major 144 $mouse
+		makedev hfmodem   c $major 145 $mouse
+		makedev led       c $major 151 $mouse
+		makedev mergemem  c $major 153 $mouse
+		makedev pmu       c $major 154 $mouse
+		;;
+	fuse)
+		makedev fuse      c 10 229 $system
+		;;
+	pmu)
+		major=`Major mouse 10` || continue
+		makedev pmu       c $major 154 $mouse
+		;;
+	thinkpad)
+		major=`Major mouse 10` || continue
+		mkdir -p thinkpad
+		makedev thinkpad/thinkpad c $major 170 $mouse
+		;;
+        rtc)
+		major=`Major mouse 10` || continue
+		makedev rtc       c $major 135 $mouse
+		;;
+	efirtc)
+		major=`Major mouse 10` || continue
+		makedev efirtc    c $major 136 $mouse
+ 		;;
+	mwave)
+		makedev mwave     c 10 219 $mouse
+		;;
+	systrace)
+		makedev systrace  c 10 226 $private
+		;;
+	uinput)
+		mkdir -p input
+		makedev input/uinput  c 10 223 $mouse
 		;;
 	js)
-		major=`Major Joystick` || continue
-		makedev js0 c $major 0 $mouse
-		makedev js1 c $major 1 $mouse
+		major=`Major Joystick 13` || continue
+		for unit in 0 1 2 3
+		do
+			makedev js$unit c $major $unit $readable
+			makedev djs$unit c $major `math $unit + 128` $readable
+		done
 		;;
 	fd[0-7])
 		major=`Major fd 2` || continue
@@ -332,39 +1211,47 @@
 		makedev ${arg} b $major $base $floppy
 		makedev ${arg}d360  b $major `math $base +  4` $floppy
 		makedev ${arg}h1200 b $major `math $base +  8` $floppy
-		makedev ${arg}D360  b $major `math $base + 12` $floppy
-		makedev ${arg}D720  b $major `math $base + 16` $floppy
+		makedev ${arg}u360  b $major `math $base + 12` $floppy
+		makedev ${arg}u720  b $major `math $base + 16` $floppy
 		makedev ${arg}h360  b $major `math $base + 20` $floppy
 		makedev ${arg}h720  b $major `math $base + 24` $floppy
-		makedev ${arg}H1440 b $major `math $base + 28` $floppy
-		makedev ${arg}E2880 b $major `math $base + 32` $floppy
+		makedev ${arg}u1440 b $major `math $base + 28` $floppy
+		makedev ${arg}u2880 b $major `math $base + 32` $floppy
 		makedev ${arg}CompaQ b $major `math $base + 36` $floppy
 
-		symlink ${arg}H360 ${arg}D360
-		symlink ${arg}H720 ${arg}D720
-
 		makedev ${arg}h1440 b $major `math $base + 40` $floppy
-		makedev ${arg}H1680 b $major `math $base + 44` $floppy
+		makedev ${arg}u1680 b $major `math $base + 44` $floppy
 		makedev ${arg}h410  b $major `math $base + 48` $floppy
-		makedev ${arg}H820  b $major `math $base + 52` $floppy
+		makedev ${arg}u820  b $major `math $base + 52` $floppy
 		makedev ${arg}h1476 b $major `math $base + 56` $floppy
-		makedev ${arg}H1722 b $major `math $base + 60` $floppy
+		makedev ${arg}u1722 b $major `math $base + 60` $floppy
 		makedev ${arg}h420  b $major `math $base + 64` $floppy
-		makedev ${arg}H830  b $major `math $base + 68` $floppy
+		makedev ${arg}u830  b $major `math $base + 68` $floppy
 		makedev ${arg}h1494 b $major `math $base + 72` $floppy
-		makedev ${arg}H1743 b $major `math $base + 76` $floppy
+		makedev ${arg}u1743 b $major `math $base + 76` $floppy
 		makedev ${arg}h880  b $major `math $base + 80` $floppy
-		makedev ${arg}D1040 b $major `math $base + 84` $floppy
-		makedev ${arg}D1120 b $major `math $base + 88` $floppy
+		makedev ${arg}u1040 b $major `math $base + 84` $floppy
+		makedev ${arg}u1120 b $major `math $base + 88` $floppy
 		makedev ${arg}h1600 b $major `math $base + 92` $floppy
-		makedev ${arg}H1760 b $major `math $base + 96` $floppy
-		makedev ${arg}H1920 b $major `math $base + 100` $floppy
-		makedev ${arg}E3200 b $major `math $base + 104` $floppy
-		makedev ${arg}E3520 b $major `math $base + 108` $floppy
-		makedev ${arg}E3840 b $major `math $base + 112` $floppy
-		makedev ${arg}H1840 b $major `math $base + 116` $floppy
-		makedev ${arg}D800  b $major `math $base + 120` $floppy
-		makedev ${arg}H1600 b $major `math $base + 124` $floppy
+		makedev ${arg}u1760 b $major `math $base + 96` $floppy
+		makedev ${arg}u1920 b $major `math $base + 100` $floppy
+		makedev ${arg}u3200 b $major `math $base + 104` $floppy
+		makedev ${arg}u3520 b $major `math $base + 108` $floppy
+		makedev ${arg}u3840 b $major `math $base + 112` $floppy
+		makedev ${arg}u1840 b $major `math $base + 116` $floppy
+		makedev ${arg}u800  b $major `math $base + 120` $floppy
+		makedev ${arg}u1600 b $major `math $base + 124` $floppy
+		;;
+	ed[a-b])
+		major=`Major ed 36` || continue
+		unit=`suffix $arg ed`
+		base=`index ab $unit`
+		base=`math $base \* 64`
+		makedev ed$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
+		do
+			makedev ed$unit$part b $major `math $base + $part` $disk
+		done
 		;;
 	hd[a-b])
 		major=`Major ide0` || major=`Major hd 3` || continue
@@ -372,7 +1259,7 @@
 		base=`index ab $unit`
 		base=`math $base \* 64`
 		makedev hd$unit b $major $base $disk
-		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 		do
 			makedev hd$unit$part b $major `math $base + $part` $disk
 		done
@@ -383,9 +1270,9 @@
 		base=`index cd $unit`
 		base=`math $base \* 64`
 		makedev hd$unit b $major $base $disk
-		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 		do
-			makedev hd$unit$part b $major `expr $base + $part` $disk
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
 		done
 		;;
 	hd[e-f])
@@ -394,9 +1281,9 @@
 		base=`index ef $unit`
 		base=`math $base \* 64`
 		makedev hd$unit b $major $base $disk
-		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 		do
-			makedev hd$unit$part b $major `expr $base + $part` $disk
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
 		done
 		;;
 	hd[g-h])
@@ -405,18 +1292,99 @@
 		base=`index gh $unit`
 		base=`math $base \* 64`
 		makedev hd$unit b $major $base $disk
-		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[i-j])
+		major=`Major ide4 56` || continue
+		unit=`suffix $arg hd`
+		base=`index ij $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[k-l])
+		major=`Major ide5 57` || continue
+		unit=`suffix $arg hd`
+		base=`index kl $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 		do
-			makedev hd$unit$part b $major `expr $base + $part` $disk
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
 		done
 		;;
-	ht)
+	hd[m-n])
+		major=`Major ide6 88` || continue
+		unit=`suffix $arg hd`
+		base=`index mn $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[o-p])
+		major=`Major ide7 89` || continue
+		unit=`suffix $arg hd`
+		base=`index op $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[q-r])
+		major=`Major ide8 90` || continue
+		unit=`suffix $arg hd`
+		base=`index qr $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[s-t])
+		major=`Major ide9 91` || continue
+		unit=`suffix $arg hd`
+		base=`index st $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	ub|uba)	
+		major=180
+		makedev uba b $major 0 $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev uba$part b $major $part $disk
+		done
+		;;
+	ht0)
 		major=`Major ht0 37` || continue
 		# Only one IDE tape drive is currently supported; ht0.
 		makedev ht0 c $major 0 $tape
-		makedev ht0 c $major 0 $tape
 		makedev nht0 c $major 128 $tape
 		;;
+	pt)
+		major=`Major pt 96` || continue
+		for i in 0 1 2 3
+		do
+			makedev pt$i c $major $i $tape
+			makedev npt$i c $major `math $i + 128` $tape
+		done
+		;;
 	xd[a-d])
 		major=`Major xd 13` || continue
 		unit=`suffix $arg xd`
@@ -425,31 +1393,271 @@
 		makedev xd$unit b $major $base $disk
 		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
 		do
-			makedev xd$unit$part b $major `expr $base + $part` $disk
+			makedev xd$unit$part b $major $(( $base + $part )) $disk
 		done
 		;;
-	sd[a-h])
+	sd[a-z])
 		major=`Major sd 8` || continue
 		unit=`suffix $arg sd`
-		base=`index abcdefgh $unit`
-		base=`math $base \* 16`
+		base=`index abcdefghijklmnopqrstuvwxyz $unit`
+		base=$(( $base * 16 ))
+		if [ $base -lt 256 ]; then
+			major=8
+		else
+			major=65
+			base=$(( $base - 256 ))
+		fi
+		makedev sd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev sd$unit$part b $major $minor $disk
+		done
+		;;
+	sd[a-d][a-z])
+		unit=`suffix $arg sd`
+		unitmaj=`first $unit`
+		unitmin=`second $unit`
+		basemaj=`index Xabcd $unitmaj`
+		basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
+		basemaj=`math $basemaj \* 416`
+		basemin=`math $basemin \* 16`
+		base=`math $basemaj + $basemin`
+		basemaj=`math $base / 256`
+		base=`math $base % 256`
+		major=`math basemaj \+ 64`
+		if [ $major -gt 71 ]; then
+			echo "$0: don't know how to make device \"$arg\"" >&2
+			exit 0
+		fi
 		makedev sd$unit b $major $base $disk
-		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
 		do
-			minor=`expr $base + $part`
+			minor=$(( $base + $part ))
 			makedev sd$unit$part b $major $minor $disk
 		done
+                ;;
+	i2o.hd[a-z])
+		[ -d i2o ] || {
+			mkdir i2o
+			chown root:root i2o
+			chmod 755 i2o
+      			[ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
+		}
+		unit=`suffix $arg i2o.hd`
+		base=`index abcdefghijklmnopqrstuvwxyz $unit`
+		base=$(( $base * 16 ))
+		if [ $base -lt 256 ]; then
+			major=80
+		else
+			major=81
+			base=$(( $base - 256 ))
+		fi
+		makedev i2o/hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev i2o/hd$unit$part b $major $minor $disk
+		done
+		;;
+	i2o.hd[a-d][a-z])
+		[ -d i2o ] || {
+			mkdir i2o
+			chown root:root i2o
+			chmod 755 i2o
+      			[ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
+		}
+		unit=`suffix $arg i2o.hd`
+		unitmaj=`first $unit`
+		unitmin=`second $unit`
+		basemaj=`index Xabcd $unitmaj`
+		basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
+		basemaj=`math $basemaj \* 416`
+		basemin=`math $basemin \* 16`
+		base=`math $basemaj + $basemin`
+		basemaj=`math $base / 256`
+		base=`math $base % 256`
+		major=`math basemaj \+ 80`
+		if [ $major -gt 87 ]; then
+			echo "$0: don't know how to make device \"$arg\"" >&2
+			exit 0
+		fi
+		makedev i2o/hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev i2o/hd$unit$part b $major $minor $disk
+		done
+		;;
+	dasd[a-z])
+		major=`Major dasd 94` || continue
+		unit=`suffix $arg dasd`
+		base=`index abcdefghijklmnopqrstuvwxyz $unit`
+		base=$(( $base * 4 ))
+		if [ $base -lt 256 ]; then
+			major=94
+		else
+			major=65
+			base=$(( $base - 256 ))
+		fi
+		makedev dasd$unit b $major $base $disk
+		for part in 1 2 3
+		do
+			minor=$(( $base + $part ))
+			makedev dasd$unit$part b $major $minor $disk
+		done
+		;;
+	ad[a-p])
+		major=`Major ad 28` || continue
+		unit=`suffix $arg ad`
+		base=`index abcdefghijklmnop $unit`
+		base=`math $base \* 16`
+		makedev ad$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev ad$unit$part b $major $minor $disk
+		done
+		;;
+	dac960)
+		for ctr in 0 1 2 3 4 5 6 7
+		do
+			$0 $opts dac960.$ctr
+		done
+		makedev dac960_gam c 10 252 $disk
+		;;
+	dac960.[0-7])
+		[ -d rd ] || {
+			mkdir rd
+			chown root:root rd
+			chmod 755 rd
+		}
+		unit=`suffix $arg dac960.`
+		    major=`math 48 + $unit`
+		    minor=0
+		    for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+			    17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+		    do
+			makedev rd/c${unit}d${ld} b $major $minor $disk
+			minor=`math $minor + 1`
+			for part in 1 2 3 4 5 6 7
+			do
+			    makedev rd/c${unit}d${ld}p$part b $major $minor $disk
+			    minor=`math $minor + 1`
+			done
+		    done
+		;;
+	dpti)
+		major=151
+		for ld in 1 2 3 4 5 6 7
+		do
+		   minor=`math $ld -1`
+		   makedev dpti${ld} c $major $minor $disk
+                done
+                ;;
+	ataraid)
+		for ctr in 0 1 2 # 3 4 5 6 7
+		do
+			$0 $opts ataraid.$ctr
+		done
+		;;
+	ataraid.[0-7])
+		[ -d ataraid ] || {
+			mkdir ataraid
+			chown root:root ataraid
+			chmod 755 ataraid
+		}
+                unit=`suffix $arg ataraid.`
+                major=114
+                minor=`math $unit \* 16`
+                makedev ataraid/d${unit} b $major $minor $disk
+                for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+                do
+                   minor=`math $minor + 1`
+                   makedev ataraid/d${unit}p$part b $major $minor $disk
+                done
+ 		;;
+	ida)
+		for ctr in 0 1 2 # 3 4 5 6 7
+		do
+			$0 $opts ida.$ctr
+		done
+		;;
+	ida.[0-7])
+		[ -d ida ] || {
+			mkdir ida
+			chown root:root ida
+			chmod 755 ida
+		}
+		unit=`suffix $arg ida.`
+		major=`math 72 + $unit`
+		minor=0
+		for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+		    makedev ida/c${unit}d${ld} b $major $minor $disk
+		    minor=`math $minor + 1`
+		    for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		    do
+			makedev ida/c${unit}d${ld}p$part b $major $minor $disk
+			minor=`math $minor + 1`
+		    done
+		done
+		;;
+	cciss)
+		for ctr in 0 1 2 # 3 4 5 6 7
+		do
+			$0 $opts cciss.$ctr
+		done
+		;;
+	cciss.[0-7])
+		[ -d cciss ] || {
+			mkdir cciss
+			chown root:root cciss
+			chmod 755 cciss
+		}
+		unit=`suffix $arg cciss.`
+		major=`math 104 + $unit`
+		minor=0
+		for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+		    makedev cciss/c${unit}d${ld} b $major $minor $disk
+		    minor=`math $minor + 1`
+		    for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		    do
+			makedev cciss/c${unit}d${ld}p$part b $major $minor $disk
+			minor=`math $minor + 1`
+		    done
+		done
+		;;
+	rom)
+		major=`Major rom 31`
+		for i in 0 1 2 3 4 5 6 7
+		do
+			makedev rom$i    b $major $i $disk
+			makedev rrom$i   b $major `math $i +8` $disk
+			makedev flash$i  b $major `math $i +16` $disk
+			makedev rflash$i b $major `math $i +24` $disk
+		done
+		;;
+	nb[0-7])
+		major=`Major nbd 43` || continue
+		minor=`suffix $arg nb`
+		makedev nb$minor b $major $minor $disk
 		;;
 	loop)
-		major=`Major loop` || continue
 		for part in 0 1 2 3 4 5 6 7
 		do
-			makedev loop$part b $major $part $disk
+			makedev loop$part b 7 $part $disk
 		done
 		;;
+	loop[0-9]|loop[1-9][0-9]|loop1[0-9][0-9]|loop2[0-4][0-9]|loop25[0-5])
+		minor=`suffix $arg loop`
+		makedev loop$minor b 7 $minor $disk
+		;;
 	md)
-		major=`Major md` || continue
-		for part in 0 1 2 3
+		major=`Major md 9` || continue
+		for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
+			16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
 		do
 			makedev md$part b $major $part $disk
 		done
@@ -457,42 +1665,141 @@
 	st[0-7])
 		major=`Major st 9`
 		unit=`suffix $arg st`
-		makedev st$unit c $major $unit $tape
-		makedev nst$unit c $major `math 128 + $unit` $tape
+		makedev st${unit}   c $major $unit $tape
+		makedev nst${unit}  c $major `math 128 + $unit` $tape
+
+		makedev st${unit}l  c $major `math 32 + $unit` $tape
+		makedev nst${unit}l c $major `math 160 + $unit` $tape
+
+		makedev st${unit}m  c $major `math 64 + $unit` $tape
+		makedev nst${unit}m c $major `math 192 + $unit` $tape
+
+		makedev st${unit}a  c $major `math 96 + $unit` $tape
+		makedev nst${unit}a c $major `math 224 + $unit` $tape
 		;;
 	qic)
 		major=`Major tpqic02 12`
+		makedev ntpqic11   c $major   2 $tape
+		makedev tpqic11    c $major   3 $tape
+		makedev ntpqic24   c $major   4 $tape
+		makedev tpqic24    c $major   5 $tape
+		makedev ntpqic120  c $major   6 $tape
+		makedev tpqic120   c $major   7 $tape
+		makedev ntpqic150  c $major   8 $tape
+		makedev tpqic150   c $major   9 $tape
 		makedev rmt8       c $major   6 $tape
 		makedev rmt16      c $major   8 $tape
 		makedev tape-d     c $major 136 $tape
 		makedev tape-reset c $major 255 $tape
+		$0 $opts qft
 		;;
 	ftape)
-		major=`Major mt 27` || continue
+		major=`Major qft 27` || continue
 		for unit in 0 1 2 3
 		do
-			makedev rft$unit c $major $unit $tape
-			makedev nrft$unit c $major `math $unit + 4` $tape
+			makedev qft$unit     c $major $unit $tape
+			makedev nqft$unit    c $major `math $unit + 4` $tape
+			makedev zqft$unit    c $major `math $unit + 16` $tape
+			makedev nzqft$unit   c $major `math $unit + 20` $tape
+			makedev rawqft$unit  c $major `math $unit + 32` $tape
+			makedev nrawqft$unit c $major `math $unit + 36` $tape
 		done
-		symlink ftape rft0
-		symlink nftape nrft0
+		symlink ftape qft0
+		symlink nftape nqft0
 		;;
-	scd[0-7])
+	sr|scd|scd-all)
+		major=`Major sr 11` || continue
+		for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+		do
+			makedev scd$unit b $major $unit $cdrom
+			symlink sr$unit scd$unit
+		done
+		;;
+	pktcdvd)
+		echo "pktcdvd major number is now dynamic, taking no action"
+	#	major=97
+	#	for unit in 0 1 2 3
+	#	do
+	#		makedev pktcdvd$unit b $major $unit $cdrom
+	#	done
+		;;
+	cfs0)
+		makedev cfs0 c 67 0 $coda
+		;;
+	scd[0-9]|scd[0-1][0-9])
 		major=`Major sr 11` || continue
 		unit=`suffix $arg scd`
 		makedev scd$unit b $major $unit $cdrom
+		symlink sr$unit scd$unit 
+		;;
+	ttyI[0-9]|ttyI[1-5][0-9]|ttyI[6][0-3])
+		major=43
+		unit=`suffix $arg ttyI`
+		makedev ttyI$unit c $major $unit $dialout
+		;;
+	ppp)
+		major=108
+		makedev ppp c $major 0 $dip
+		;;
+	ippp[0-9]|ippp[1-5][0-9]|ippp[6][0-3])
+		major=45
+		unit=`suffix $arg ippp`
+		minor=`math $unit + 128`
+		makedev ippp$unit c $major $minor $dialout
+		;;
+	isdn[0-9]|isdn[1-5][0-9]|isdn[6][0-3])
+		major=45
+		unit=`suffix $arg isdn`
+		minor=`math $unit + 0`
+		makedev isdn$unit c $major $minor $dialout
+		;;
+	isdnctrl[0-9]|isdnctrl[1-5][0-9]|isdnctrl[6][0-3])
+		major=45
+		unit=`suffix $arg isdnctrl`
+		minor=`math $unit + 64`
+		makedev isdnctrl$unit c $major $minor $dialout
+		;;
+	isdninfo)
+		makedev isdninfo c 45 255 $private
+		;;
+	isdn-tty)
+		major=43
+		for unit in 0 1 2 3 4 5 6 7
+		do
+			makedev ttyI$unit c $major $unit $dialout
+		done
+		;;
+	isdn-ippp)
+		major=45
+		for unit in 0 1 2 3 4 5 6 7
+		do
+			makedev ippp$unit c $major `math $unit + 128` $dialout
+		done
+		;;
+	isdn-io)
+		for unit in 0 1 2 3 4 5 6 7
+		do
+			makedev isdn$unit c 45 $unit $dialout
+			makedev isdnctrl$unit c 45 `math $unit + 64` $dialout
+			makedev ippp$unit c 45 `math $unit + 128` $dialout
+		done
+		makedev isdninfo c 45 255 $dialout
 		;;
 	sonycd)
-		major=`Major cdu31a` || continue
+		major=`Major sonycd 15` || continue
 		makedev $arg b $major 0 $cdrom
 		;;
 	mcd)
 		major=`Major mcd 23` || continue
 		makedev $arg b $major 0 $cdrom
 		;;
-	mcdx)
-		major=`Major mcdx 20` || continue
-		makedev $arg b $major 0 $cdrom
+	mcdx|mcdx[0-4])
+		major=`Major $arg 20` || continue
+		for unit in 0 1 2 3 4
+		do
+			makedev mcdx$unit b $major $unit $cdrom
+		done
+		test -r mcdx || symlink mcdx mcdx0
 		;;
 	cdu535)
 		makedev $arg b 24 0 $cdrom
@@ -501,28 +1808,58 @@
 		makedev $arg b 24 0 $cdrom
 		;;
 	sbpcd|sbpcd[123])
-		major=`Major $arg` || continue
+		major=`Major $arg 25` || continue
 		base=`suffix ${arg}0 sbpcd`
-		# base=`expr ${arg}0 : "sbpcd\(.\)"`
 		for minor in 0 1 2 3
 		do
 			# XXX
-			unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1`
+			unit=$(substr 0123456789abcdef $(( $base * 4 + $minor + 1 )) )
 			makedev sbpcd$unit b $major $minor $cdrom
 		done
 		[ $arg = sbpcd ] && symlink $arg ${arg}0
 		;;
 	aztcd)
-		major=`Major $arg` || continue
+		major=`Major $arg 29` || continue
+		makedev ${arg}0 b $major 0 $cdrom
+		;;
+	cm206cd)
+		major=`Major $arg 30` || continue
 		makedev ${arg}0 b $major 0 $cdrom
 		;;
+	gscd)
+		major=`Major $arg 16` || continue
+		makedev ${arg}0 b $major 0 $cdrom
+		;;
+	pcd)
+		for unit in 0 1 2 3 
+		do
+			makedev pcd$unit b 46 $unit $cdrom
+		done
+		;;
 	bpcd)
 		makedev $arg b 41 0 $cdrom
 		;;
+	optcd)
+		makedev $arg b 17 0 $cdrom
+		;;
+	sjcd)
+		makedev $arg b 18 0 $cdrom
+		;;
+	cfs|coda)
+		makedev cfs0 c 67 0 $private
+		;;
+	xfs|nnpfs|arla)
+		makedev xfs0 c 103 0 $private
+		makedev nnpfs0 c 103 0 $private
+		;;
 	logiscan)
 		major=`Major logiscan` || continue
 		makedev $arg c $major 0 $scanner
 		;;
+	toshiba)
+		major=`Major $arg 10` || continue
+		makedev $arg c $major 181 root root 0666
+		;;
 	m105scan)
 		major=`Major m105` || continue
 		makedev $arg c $major 0 $scanner
@@ -534,34 +1871,121 @@
 	audio)
 		major=`Major sound 14`
 		makedev mixer      c $major  0 $audio
+		makedev mixer1     c $major 16 $audio
+		makedev mixer2     c $major 32 $audio
+		makedev mixer3     c $major 48 $audio
 		makedev sequencer  c $major  1 $audio
 		makedev midi00     c $major  2 $audio
-		makedev dsp        c $major  3 $audio
-		makedev audio      c $major  4 $audio
-		makedev sndstat    c $major  6 $audio
-#		makedev sequencer2 c $major  8 $audio
-		makedev mixer1     c $major 16 $audio
-#		makedev patmgr0    c $major 17 $audio
 		makedev midi01     c $major 18 $audio
-		makedev dsp1       c $major 19 $audio
-		makedev audio1     c $major 20 $audio
-#		makedev patmgr1    c $major 33 $audio
 		makedev midi02     c $major 34 $audio
 		makedev midi03     c $major 50 $audio
+		makedev dsp        c $major  3 $audio
+		makedev dsp1       c $major 19 $audio
+		makedev dsp2       c $major 35 $audio
+		makedev dsp3       c $major 51 $audio
+		makedev audio      c $major  4 $audio
+		makedev audio1     c $major 20 $audio
+		makedev audio2     c $major 36 $audio
+		makedev audio3     c $major 52 $audio
+		makedev sndstat    c $major  6 $audio
+		makedev audioctl   c $major  7 $audio
+		major=31
+		makedev mpu401data c $major 0  $audio
+		makedev mpu401stat c $major 1  $audio
+		major=35
+		for i in 0 1 2 3
+		do
+			makedev midi$i  c $major $i $audio
+			makedev rmidi$i c $major `math $i + 64` $audio
+			makedev smpte$i c $major `math $i + 128` $audio
+		done
 		;;
 	pcaudio)
-		major=`Major pcsp` || continue
+		major=`Major pcsp 13` || continue
 		makedev pcmixer c $major 0 $audio
 		makedev pcsp    c $major 3 $audio
 		makedev pcaudio c $major 4 $audio
 		;;
-	sg)
+	video|video4linux|v4l|radio)
+		# video4linux api includes radio, teletext, etc.
+		major=`Major video 81` || continue
+		minor=0
+		until [ $minor -gt 63 ]
+		do
+			makedev video$minor c $major $minor $video
+			makedev radio$minor c $major `math $minor + 64` $video
+			minor=`math $minor + 1`
+		done
+		symlink radio radio0
+		minor=0
+		until [ $minor -gt 31 ]
+		do
+			makedev vtx$minor c $major `math $minor + 192` $video
+			makedev vbi$minor c $major `math $minor + 224` $video
+			minor=`math $minor + 1`
+		done
+		symlink video video0
+		symlink vbi vbi0
+		major=82
+		minor=0
+		until [ $minor -gt 1 ]
+		do
+			makedev winradio$minor c $major $minor $video
+			minor=`math $minor + 1`
+		done
+		major=83
+		makedev vtx     c $major 0 $video
+		makedev vttuner c $major 16 $video
+		;;
+	i2c)
+		# making it possible to create an arbitrary number of i2c
+		# devices might be good, but 8 should suffice for now
+		major=`Major i2c 89` || continue
+		minor=0
+		until [ $minor -gt 7 ] 
+		do
+			makedev i2c-$minor c $major $minor $private
+			minor=`math $minor + 1`
+		done
+		;;
+	tlk)
+		major=102
+		minor=0
+		until [ $minor -gt 3 ] # tell me if 3 is wrong...
+		do
+			makedev tlk$minor c $major $minor $video
+			minor=`math $minor + 1`
+		done
+		;;
+	srnd)
+		makedev srnd0 c 110 0 $video
+		makedev srnd1 c 110 1 $video
+		;;
+	fgrab)
+		makedev mmetfgrab c 40 0 $video
+		makedev wvisfgrab c 26 0 $video
+		for i in 0 1 # more?
+		do
+			makedev iscc$i    c 93 $i $video
+			makedev isccctl$i c 93 `math $i + 128` $video
+		done
+		for i in 0 1 # more?
+		do
+			makedev dcxx$i c 94 $i $video
+		done
+		;;
+	sg|sg-all)
 		major=`Major sg 21`
-		for unit in a b c d e f g h
+		for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+		do
+			makedev sg$unit c $major $unit $scsi
+		done
+		;;
+	pg)
+		major=`Major pg 97`
+		for unit in 0 1 2 3
 		do
-			minor=`index abcdefgh $unit`
-			# minor=`expr abcdefgh : ".*$unit" - 1`
-			makedev $arg$unit c $major $minor $scsi
+			makedev pg$unit c $major $unit $scsi
 		done
 		;;
 	fd)
@@ -572,15 +1996,34 @@
 		symlink stderr fd/2
 		;;
 	ibcs2)
-		major=`Major ibcs2` || continue
+		major=`Major ibcs2 30` || continue
 		makedev socksys c $major 0 $ibcs2
 		symlink nfsd socksys
 		makedev spx     c $major 1 $ibcs2
 		symlink X0R null
 		;;
+	netlink)
+		major=36
+		makedev route c $major 0 $private
+		makedev skip  c $major 1 $private
+		;;
+	enskip)
+		major=64
+		makedev enskip c $major 0 $private
+		;;
+	ipfilt*)
+		major=95
+		makedev ipl     c $major 0 $private
+		makedev ipnat   c $major 1 $private
+		makedev ipstate c $major 2 $private
+		makedev ipauth  c $major 3 $private
+		;;
+	qng)
+		makedev qng c 77 0 $private
+		;;
 	apm)
-		major=`Major apm_bios` || continue
-		makedev $arg c $major 0 $system
+		major=`Major mouse 10` || continue
+		makedev apm_bios  c $major 134 $mouse
 		;;
 	dcf)
 		major=`Major dcf` || continue
@@ -590,7 +2033,135 @@
 		major=`Major hw` || continue
 		makedev helloworld c $major 0 $public
 		;;
+	ipsec)
+		# For the Free S/WAN (http://www.xs4all.nl/~freeswan/)
+		# implementation of IPSEC
+		makedev ipsec c 36 10 $ipsec
+		;;
+	comedi)
+		major=98
+		for minor in 0 1 2 3
+		do
+			makedev comedi$minor c $major $minor $public
+		done
+		;;
+	tilp)
+		for i in `seq 0 7`
+		do
+			makedev tipar$i c 115 $i $printer
+			makedev tiser$i c 115 `math 8 + $i` $dialout
+		done
+		for i in `seq 0 31`
+		do
+			makedev tiusb$i c 115 `math 16 + $i` $dialout
+		done
+		;;
+	dvb)
+		# check if kernel-version is >= 2.6.8, if yes, create dvb-devices with
+		# major-number 212, in the other case 250
+		
+		kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
+		kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
+		kern_rev3=`uname -r | sed -e 's@^[^.]*\.[^.]*\.\([^.][0-9]*\).*@\1@'`
+      
+		dvb_major=250
+
+		if [ $kern_rev1 -gt 2 ] || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -gt 6 ]) \
+			|| ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -eq 6 ] && [ $kern_rev3 -ge 8 ])
+		then 
+			dvb_major=212 
+		fi
+
+		mkdir -p dvb
+		for i in 0 1 2 3
+		do
+			mkdir -p dvb/adapter$i
+			makedev dvb/adapter$i/video0	c $dvb_major `math 64 \* $i + 0` $video
+			makedev dvb/adapter$i/audio0    c $dvb_major `math 64 \* $i + 1` $video
+			makedev dvb/adapter$i/frontend0 c $dvb_major `math 64 \* $i + 3` $video
+			makedev dvb/adapter$i/demux0    c $dvb_major `math 64 \* $i + 4` $video
+			makedev dvb/adapter$i/dvr0      c $dvb_major `math 64 \* $i + 5` $video
+			makedev dvb/adapter$i/ca0       c $dvb_major `math 64 \* $i + 6` $video
+			makedev dvb/adapter$i/net0      c $dvb_major `math 64 \* $i + 7` $video
+			makedev dvb/adapter$i/osd0      c $dvb_major `math 64 \* $i + 8` $video
+		done
+		;;
+	usb)
+		mkdir -p usb
+		major=180
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev usb/lp$i c $major $i $printer
+			makedev usb/mouse$i c $major `math $i + 16` $mouse
+			makedev usb/ez$i c $major `math $i + 32` $system
+			makedev usb/scanner$i c $major `math $i + 48` $scanner
+			makedev usb/hiddev$i c $major `math $i + 96` $system
+			makedev ttyACM$i c 166 $i $dialout
+			makedev ttyUSB$i c 188 $i $dialout
+		done
+		makedev usb/rio500 c $major 64 $audio
+		makedev usb/usblcd c $major 65 $audio
+		makedev usb/cpad0 c $major 66 $audio
+		;;
+	bluetooth)
+		major=216
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
+			16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+		do
+			makedev rfcomm$i c $major $i $dialout
+		done
+		makedev vhci c 10 250 $dialout
+		for i in 0 1 2 3; do
+			makedev ttyUB$i c 216 $i $dialout
+			makedev ccub$i c 217 $i $dialout
+		done
+		;;
+	paride)
+                major=45
+                for unit in a b c d
+		do
+                    base=`index abcd $unit`
+                    base=`math $base \* 16`
+                    makedev pd$unit b $major $base $disk
+                    for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+                    do
+			makedev pd$unit$part b $major $(( $base + $part )) $disk
+                    done
+		done
+		for i in 0 1 2 3
+		do
+		    makedev pcd$i b 46 $i $cdrom
+		    makedev pf$i  b 47 $i $floppy
+		done
+                ;;
+        lirc)
+                makedev lirc c 61 0 $lirc
+                for i in d m; do
+                   makefifo lirc${i} $lirc
+                done
+                ;;
 	update)
+		devices=
+		if [ ! -f $procfs/devices ]
+		then
+			echo "$0: warning: can't read $procfs/devices" >&2
+		else
+			exec 3<$procfs/devices
+			while read major device extra <&3
+			do
+				device=`echo $device | sed 's#/.*##'`
+				case "$major" in
+					Character|Block|'')
+						;;
+					*)
+						eval "major_$device=$major"
+						devices="$devices $device"
+						;;
+				esac
+			done
+			exec 3<&-
+		fi
+
 		if [ ! "$devices" ]
 		then
 			echo "$0: don't appear to have any devices" >&2
@@ -619,7 +2190,6 @@
 					create="$create "`cvt $device`
 				fi
 				devs=`strip " $devs " $device`
-				# devs=`expr "$devs" : "\(.*\) $device"``expr "$devs" : ".* $device\(.*\)"`
 			done
 			exec 3<&-
 		fi
@@ -637,6 +2207,7 @@
 		;;
 	*)
 		echo "$0: don't know how to make device \"$arg\"" >&2
+		exit 1
 		;;
 	esac
 done