Imported Debian patch 2.3.1-84
[debian/makedev] / MAKEDEV
1 #! /bin/sh -
2 # $Id$
3
4 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
5 # Customisation:
6 #   The devices fall into various classes.  This section contains the mapping
7 # from a class name into a group name and permission.
8 #   You will almost certainly need to edit the group name to match your
9 # system, and you may change the permissions to suit your preference.  These
10 # lines _must_ be of the format "user group perm".
11
12  public="  root root   0666"
13 private="  root root   0600"
14  system="  root root   0660"
15    kmem="  root kmem   0640"
16     tty="  root tty    0666"
17    cons="  root tty    0600"
18 dialout="  root dialout 0660"
19     dip="  root dip    0660"
20   mouse="  root root   0660"
21 printer="  root lp     0660"
22  floppy="  root floppy 0660"
23    disk="  root disk   0660"
24    scsi="  root root   0600"
25   cdrom="  root cdrom  0660"
26    tape="  root tape   0660"
27   audio="  root audio  0660"
28   video="  root video  0660"
29   ibcs2="  root root   0666"
30 scanner="  root root   0666"
31    coda="  root root   0600"
32   ipsec="  root root   0200"
33 readable="  root root   0444"
34
35 MAXVT=63
36
37 # defaults for $major_*
38 major_ide0=3
39 major_ide1=22
40 major_sd=8
41 major_lp=6
42
43 # Remark: OSS/Linux becomes major_OSSLinux
44
45 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
46
47 # try to do the right things if udev is running
48 if [ "$WRITE_ON_UDEV" ]; then
49   :
50 elif [ -d /dev/.static/dev/ ] && [ "`pwd`" = /dev ] && [ -e /proc/mounts ] \
51     && grep -qE '^[^ ]+ /dev/\.static/dev' /proc/mounts; then
52   echo "udev active, devices will be created in /dev/.static/dev/"
53   cd /dev/.static/dev/
54 elif [ -d /.dev/ ] && [ "`pwd`" = /dev ] && [ -e /proc/mounts ] \
55     && grep -qE '^[^ ]+ /\.dev' /proc/mounts; then
56   echo "udev active, devices will be created in /.dev/"
57   cd /.dev/
58 elif [ -d .udevdb/ -o -d .udev/ ] && [ "`pwd`" = /dev ]; then
59   echo ".udevdb or .udev presence implies active udev.  Aborting MAKEDEV invocation."
60   # use exit 0, not 1, so postinst scripts don't fail on this
61   exit 0
62 fi
63
64 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
65
66 # don't stomp on devfs users
67 if  [ -c .devfsd ]
68 then
69     echo ".devfsd presence implies active DevFS.  Aborting MAKEDEV invocation."
70     # use exit 0, not 1, so postinst scripts don't fail on this
71     exit 0
72 fi
73
74 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
75
76 # don't stomp on non-Linux users
77 if [ "$(uname -s)" != "Linux" ]
78 then
79     echo "Results undefined on non-Linux systems, aborting MAKEDEV invocation."
80     # use exit 0, not 1, so postinst scripts don't fail on this
81     exit 0
82 fi
83
84 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
85
86 procfs=/proc
87
88 opt_v=
89 opt_d=
90 opt_n=
91
92 while [ $# -ge 1 ]
93 do
94         case $1 in
95                 --)     shift; break ;;
96                 -v)     shift; opt_v=1 ;;
97                 -d)     shift; opt_d=1 ;;
98                 -n)     shift; opt_n=1; opt_v=1 ;;
99                 -V)     shift; opt_V=1 ;;
100                 -*)     echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
101                 *)      break ;;
102         esac
103 done
104
105 if [ "$opt_V" ]
106 then
107         echo "This is Debian MAKEDEV.  For version info, try 'dpkg --list makedev'"
108         echo "See /usr/share/doc/makedev/ for more information on Debian MAKEDEV."
109         exit 0
110 fi
111
112 opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
113
114 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
115
116 devicename () { # translate device names to something safe
117         # A-Z is not full alphabet in all locales (e.g. in et_EE)
118         echo "$*" | LC_ALL=C sed -e 's/[^A-Za-z0-9_]/_/g' 
119 }
120
121 makedev () {    # usage: makedev name [bcu] major minor owner group mode
122         if [ "$opt_v" ]
123         then    if [ "$opt_d" ]
124                 then    echo "delete $1"
125                 else    echo "create $1 $2 $3 $4 $5:$6 $7" 
126                 fi
127         fi
128         # missing parameters are a bug - bail - should we do an exit 1 here?
129         case :$1:$2:$3:$4:$5:$6:$7: in
130                 *::*) echo "Warning: MAKEDEV $@ is missing parameter(s)." >&2;;
131         esac
132         if [ ! "$opt_n" ]
133         then    
134                 if [ "$opt_d" ]
135                 then
136                         rm -f $1
137                 else
138                         rm -f $1-
139                         if mknod $1- $2 $3 $4 &&
140                            chown $5:$6 $1- &&
141                            chmod $7 $1- &&
142                            mv $1- $1
143                         then
144                                 :       # it worked
145                         else
146                                         # Didn't work, clean up any mess...
147                                 echo "makedev $@: failed"
148                                 rm -f $1-
149                         fi
150                 fi
151         fi
152 }
153 symlink () {    # usage: symlink name target
154         if [ "$opt_v" ]
155         then    if [ "$opt_d" ]
156                 then    echo "delete $1"
157                 else    echo "create $1 -> $2"
158                 fi
159         fi
160         [ ! "$opt_n" ] && rm -f $1 &&
161         [ ! "$opt_d" ] && ln -s $2 $1
162 }
163
164 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
165
166 # Debian allows us to assume /bin/sh is a POSIX compliant shell, so go for it!
167
168 math () {
169         eval echo "\$(($*))"
170 }
171 index () {      # index string c
172         eval "I=\${1%$2*}"
173         eval echo "\${#I}"
174 }
175 suffix () {
176         eval echo "\${1#$2}"
177 }
178 strip () {
179         eval echo "\${1% $2 *} \${1#* $2 }"
180 }
181 first () {
182         echo "${1%%?}"
183 }
184 second () {
185         echo "${1##?}"
186 }
187 substr () {
188         echo $1 | dd bs=1 count=1 skip=$(( $2 - 1 )) 2> /dev/null
189 }
190
191 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
192
193 devices=
194 if [ ! -f $procfs/devices ]
195 then
196         echo "$0: warning: can't read $procfs/devices" >&2
197 else
198         exec 3<$procfs/devices
199         while read major device extra <&3
200         do
201                 device=`echo $device | sed 's#/.*##'`
202                 case "$major" in
203                         Character|Block|'')
204                                 ;;
205                         *)
206                                 safedevname=`devicename $device`
207                                 eval "major_$safedevname=$major"
208                                 devices="$devices $device"
209                                 ;;
210                 esac
211         done
212         exec 3<&-
213 fi
214
215 Major () {
216         device=$2
217         devname=`devicename $1`
218         if [ "$opt_d" ]
219         then
220                 echo -1 # don't care
221         else
222                 eval echo \${major_$devname:-\${device:?\"unknown major number for $1\"}}
223         fi
224 }
225
226 cvt () {
227         while [ $# -ne 0 ]
228         do
229                 case "$1" in
230                         mem|tty|ttyp|cua|cub|cui)       ;;
231                         hd)     (for d in a b c d e f g h i j k l m n o p ; do
232                                         echo -n hd$d " "
233                                  done) ; echo
234                                 ;;
235                         ide0)   echo hda hdb ;;
236                         ide1)   echo hdc hdd ;;
237                         ide2)   echo hde hdf ;;
238                         ide3)   echo hdg hdh ;;
239                         ide4)   echo hdi hdj ;;
240                         ide5)   echo hdk hdl ;;
241                         ide6)   echo hdm hdn ;;
242                         ide7)   echo hdo hdp ;;
243                         ide8)   echo hdq hdr ;;
244                         ide9)   echo hds hdt ;;
245                         sd)     (for d in a b c d e f g h i j k l m n o p ; do
246                                         echo -n sd$d " "
247                                  done) ; echo
248                                 ;;
249                         dasd)   (for d in a b c d e f g h i j k l m \
250                                         n o p q r s t u v w x y z ; do
251                                         echo -n dasd$d " "
252                                 done) ; echo
253                                 ;;
254                         raw)    echo raw ;;
255                         sg)     echo sg ;;
256                         sr)     echo scd ;;
257                         st)     echo st0 ;;
258                         xd)     echo xda xdb ;;
259                         ad)     echo ada adb ;;
260                         lp)     echo lp ;;
261                         mt)     echo ftape ;;
262                         qft)    echo ftape ;;
263                         loop)   echo loop ;;
264                         md)     echo md ;;
265                         ibcs2)  echo ibcs2 ;;
266                         tpqic02)        echo qic ;;
267                         sound)          echo audio ;;
268                         logiscan)       echo logiscan ;;
269                         ac4096)         echo ac4096 ;;
270                         hw)     echo helloworld ;;
271                         sbpcd | sbpcd[123])     echo $1 ;;
272                         joystick)       echo js ;;
273                         input)  echo input ;;
274                         apm_bios)       echo apm ;;
275                         dcf)            echo dcf ;;
276                         aztcd)          echo aztcd ;;
277                         cm206cd)        echo cm206cd ;;
278                         gscd)           echo gscd ;;
279                         pcmcia) ;; # taken care of by its own driver
280                         ttyC)   echo cyclades ;;
281                         isdn)   echo isdnmodem isdnbri dcbri ;;
282                         vcs)    ;;
283                         pty)    echo pty ;;
284                         misc)   echo misc ;;
285                         3dfx)   echo 3dfx ;;
286                         agpgart)        echo agpgart ;;
287                         microcode)      echo microcode ;;
288                         ipmi|ipmikcs)   echo ipmi ;;
289                         fb)     echo fb ;;
290                         nb|drbd)        echo nb0 nb1 nb2 nb3 nb4 nb5 nb6 nb7;;
291                         netlink)        echo netlink ;;
292                         tap)    echo netlink ;;
293                         hamradio)       echo hamradio ;;
294                         snd)    ;;
295                         ptm)    ;;
296                         pts)    ;;
297                         ttyB)   (for l in 0 1 2 3 4 5 6 7 ; do
298                                         echo -n ttyB$l " "
299                                  done) ; echo
300                                 ;;
301                         ttyS)   echo ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ;;
302                         ttyI)   echo ttyI0 ttyI1 ttyI2 ttyI3 ;;
303                         ircomm|irlpt)   irda ;;
304                         ppp)    echo ppp ;;
305                         usb)    echo usb ;;
306                         dpt_i2o)        echo dpti ;;
307                         bluetooth)      echo bluetooth ;;
308                         lvm)    ;; # taken care of by LVM userspace tools
309                         ramdisk)        echo ram ;;
310                         null)   echo std ;;
311                         zero)   echo std ;;
312 #                       *)      echo "$0: don't know what \"$1\" is" >&2 ;;
313                         *)      echo $1
314                 esac
315                 shift
316         done
317 }
318
319 for arg in `cvt $*`
320 do
321         # this is to make the case patterns work as expected in all locales
322         LC_ALL=C
323         case $arg in
324         generic)
325                 # pick the right generic-<arch> using dpkg's knowledge
326                 case `dpkg --print-installation-architecture` in
327                         alpha)
328                                 $0 $opts generic-alpha
329                                 ;;
330                         arm|armeb|armel)
331                                 $0 $opts generic-arm
332                                 ;;
333                         hppa)
334                                 $0 $opts generic-hppa
335                                 ;;
336                         i386)
337                                 $0 $opts generic-i386
338                                 ;;
339                         amd64)
340                                 $0 $opts generic-i386
341                                 ;;
342                         ia64)
343                                 $0 $opts generic-ia64
344                                 ;;
345                         m68k)
346                                 $0 $opts generic-m68k
347                                 ;;
348                         mips)
349                                 $0 $opts generic-mips
350                                 ;;
351                         mipsel)
352                                 $0 $opts generic-mipsel
353                                 ;;
354                         powerpc)
355                                 $0 $opts generic-powerpc
356                                 ;;
357                         ppc64)
358                                 $0 $opts generic-powerpc
359                                 ;;
360                         s390)
361                                 $0 $opts generic-s390
362                                 ;;
363                         sh*)    
364                                 $0 $opts generic-sh
365                                 ;;
366                         sparc)
367                                 $0 $opts generic-sparc
368                                 ;;
369                         *)
370                                 echo "$0: no support for generic on this arch" >&2
371                                 exit 1
372                                 ;;
373                 esac
374                 ;;
375         generic-alpha)
376                 $0 $opts std
377                 $0 $opts fd
378                 $0 $opts fd0 fd1
379                 $0 $opts hd sd
380                 $0 $opts xda xdb
381                 $0 $opts scd0 scd1
382                 $0 $opts st0 st1
383                 $0 $opts sg
384                 $0 $opts pty
385                 $0 $opts console
386                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
387                 $0 $opts busmice
388                 $0 $opts lp
389                 $0 $opts par
390                 $0 $opts audio
391                 $0 $opts fb
392                 $0 $opts dac960
393                 ;;
394         generic-arm)
395                 $0 $opts std
396                 $0 $opts fd
397                 $0 $opts fd0 fd1
398                 $0 $opts hd sd
399                 $0 $opts xda xdb
400                 $0 $opts scd0 scd1
401                 $0 $opts st0 st1
402                 $0 $opts sg
403                 $0 $opts pty
404                 $0 $opts console
405                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
406                 $0 $opts busmice
407                 makedev sunmouse  c 10 6 $mouse
408                 $0 $opts lp
409                 $0 $opts par
410                 $0 $opts audio
411                 $0 $opts fb
412                 ;;
413         generic-hppa)
414                 $0 $opts std
415                 $0 $opts fd
416                 $0 $opts fd0 fd1
417                 $0 $opts hd sd
418                 $0 $opts scd0 scd1
419                 $0 $opts st0 st1
420                 $0 $opts sg
421                 $0 $opts pty
422                 $0 $opts console
423                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
424                 $0 $opts ttyB0 ttyB1 ttyB2 ttyB3 ttyB4 ttyB5 ttyB6 ttyB7
425                 $0 $opts busmice
426                 $0 $opts lp
427                 $0 $opts par
428                 $0 $opts audio
429                 $0 $opts fb
430                 $0 $opts rtc
431                 ;;
432         generic-i386)
433                 $0 $opts std
434                 $0 $opts fd
435                 $0 $opts fd0 fd1
436                 $0 $opts hd sd
437                 $0 $opts xda xdb
438                 $0 $opts scd0 scd1
439                 $0 $opts st0 st1
440                 $0 $opts sg
441                 $0 $opts pty
442                 $0 $opts console
443                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
444                 $0 $opts busmice
445                 $0 $opts input
446                 $0 $opts lp
447                 $0 $opts par
448                 $0 $opts audio
449                 $0 $opts fb
450                 $0 $opts isdn-io eda edb sonycd mcd mcdx cdu535
451                 $0 $opts optcd sjcd cm206cd gscd 
452                 $0 $opts lmscd sbpcd aztcd bpcd dac960 dpti ida ataraid cciss
453                 $0 $opts i2o.hda i2o.hdb i2o.hdc i2o.hdd
454                 ;;
455         generic-ia64)
456                 $0 $opts std
457                 $0 $opts fd
458                 $0 $opts fd0 fd1
459                 $0 $opts hd sd
460                 $0 $opts scd0 scd1
461                 $0 $opts st0 st1
462                 $0 $opts sg
463                 $0 $opts pty
464                 $0 $opts console
465                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
466                 $0 $opts busmice
467                 $0 $opts input
468                 $0 $opts lp
469                 $0 $opts par
470                 $0 $opts audio
471                 $0 $opts fb
472                 $0 $opts efirtc
473                 ;;
474         generic-m68k)
475                 $0 $opts std
476                 $0 $opts fd
477                 $0 $opts fd0 fd1
478                 $0 $opts hd sd
479                 $0 $opts scd0 scd1
480                 $0 $opts sg
481                 $0 $opts ada adb adc add ade adf
482                 $0 $opts pty
483                 $0 $opts console
484                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
485                 $0 $opts m68k-mice
486                 $0 $opts lp
487                 $0 $opts par
488                 $0 $opts nvram
489                 $0 $opts audio
490                 $0 $opts fb
491                 ;;
492         generic-mips)
493                 $0 $opts std
494                 $0 $opts fd
495                 $0 $opts fd0 fd1
496                 $0 $opts hd sd
497                 $0 $opts scd0 scd1
498                 $0 $opts st0 st1
499                 $0 $opts sg
500                 $0 $opts pty
501                 $0 $opts console
502                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
503                 $0 $opts lp
504                 $0 $opts par
505                 $0 $opts audio
506                 $0 $opts fb
507                 $0 $opts busmice
508                 ;;
509         generic-mipsel)
510                 $0 $opts std
511                 $0 $opts fd
512                 $0 $opts fd0 fd1
513                 $0 $opts hd sd
514                 $0 $opts scd0 scd1
515                 $0 $opts st0 st1
516                 $0 $opts sg
517                 $0 $opts pty
518                 $0 $opts console
519                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
520                 $0 $opts lp
521                 $0 $opts par
522                 $0 $opts audio
523                 $0 $opts fb
524                 $0 $opts rtc
525                 ;;
526         generic-powerpc)
527                 $0 $opts std
528                 $0 $opts fd
529                 $0 $opts fd0 fd1
530                 $0 $opts hd sd
531                 $0 $opts scd0 scd1
532                 $0 $opts st0 st1
533                 $0 $opts sg
534                 $0 $opts pty
535                 $0 $opts console
536                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
537                 $0 $opts busmice
538                 $0 $opts m68k-mice
539                 $0 $opts input
540                 $0 $opts lp
541                 $0 $opts par
542                 $0 $opts nvram
543                 $0 $opts audio
544                 $0 $opts adb
545                 $0 $opts fb
546                 $0 $opts rtc
547                 $0 $opts isdn-io
548                 ;;
549         generic-s390)
550                 $0 $opts std
551                 $0 $opts fd
552                 $0 $opts dasda dasdb dasdc dasdd dasde dasdf dasdg dasdh \
553                         dasdi dasdj dasdk dasdl dasdm dasdn dasdo dasdp \
554                         dasdq dasdr dasds dasdt dasdu dasdv dasdw dasdx \
555                         dasdy dasdz
556                 $0 $opts pty
557                 $0 $opts consoleonly
558                 $0 $opts rtc
559                 ;;
560         generic-sh)
561                 $0 $opts std
562                 $0 $opts fd
563                 $0 $opts fd0 fd1
564                 $0 $opts hd sd
565                 $0 $opts scd0 scd1
566                 $0 $opts st0 st1
567                 $0 $opts sg
568                 $0 $opts pty
569                 $0 $opts console
570                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4  
571                 $0 $opts ttySC0 ttySC1 ttySC2 ttySC3 
572                 $0 $opts lp
573                 $0 $opts par
574                 $0 $opts audio
575                 $0 $opts fb
576                 $0 $opts rtc
577                 ;;
578         generic-sparc)
579                 $0 $opts std
580                 $0 $opts fd
581                 $0 $opts fd0 fd1
582                 $0 $opts hd sd
583                 $0 $opts scd0 scd1
584                 $0 $opts st0 st1
585                 $0 $opts sg
586                 $0 $opts pty
587                 $0 $opts console
588                 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
589                 $0 $opts busmice
590                 $0 $opts fb
591                 $0 $opts rtc
592                 makedev kbd  c 11 0 $cons
593                 makedev sunmouse  c 10 6 $mouse
594                 symlink mouse sunmouse
595                 makedev openprom  c 10 139 root root 0664
596                 ;;
597         local)
598                 $0.local $opts
599                 ;;
600         std)
601                 makedev mem  c 1 1 $kmem
602                 makedev kmem c 1 2 $kmem
603                 makedev null c 1 3 $public
604                 makedev port c 1 4 $kmem
605                 makedev zero c 1 5 $public
606                 symlink core $procfs/kcore
607                 makedev full c 1 7 $public
608                 makedev random c 1 8 $public
609                 makedev urandom c 1 9 $public
610                 makedev tty  c 5 0 $tty
611                 $0 $opts ram
612                 $0 $opts loop
613                 ;;
614         hamradio)
615                 $0 $opts scc
616                 $0 $opts bc
617                 ;;
618         scc)
619                 for unit in 0 1 2 3 4 5 6 7 
620                 do
621                         makedev scc$unit c 34 $unit $system
622                 done
623                 ;;
624         mtd)    
625                 for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
626                 do
627                         makedev mtd$unit c 90 `math $unit \* 2` $system
628                 done
629                 ;;
630         bc)     
631                 for unit in 0 1 2 3
632                 do
633                         makedev bc$unit c 51 $unit $system
634                 done
635                 ;;
636         random)
637                 makedev random c 1 8 $public
638                 ;;
639         urandom)
640                 makedev urandom c 1 9 $readable
641                 ;;
642         ram)
643                 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
644                         makedev ram$i  b 1 $i $disk
645                 done
646                 symlink ram ram1
647                 ;;
648         ram[0-9]|ram1[0-6])
649                 unit=`suffix $arg ram`
650                 makedev ram$unit b 1 $unit $disk
651                 ;;
652         initrd)
653                 makedev initrd b 1 250 $disk
654                 ;;
655         raw)
656                 makedev rawctl c 162 0 $disk
657                 mkdir -p raw
658                 for i in 1 2 3 4 5 6 7 8; do
659                         makedev raw/raw$i c 162 $i $disk
660                 done
661                 ;;
662         consoleonly)
663                 makedev tty0 c 4 0 $cons
664                 #       new kernels need a device, old ones a symlink... sigh
665                 kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
666                 kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
667                 if [ $kern_rev1 -gt 2 ]
668                 then
669                         makedev console c 5 1 $cons
670                 else
671                         if [ $kern_rev1 -eq 2 ] && [ $kern_rev2 -ge 1 ]
672                         then
673                                 makedev console c 5 1 $cons
674                         else
675                                 symlink console tty0
676                         fi
677                 fi
678                 ;;
679         console)
680                 $0 $opts consoleonly
681                 major=`Major vcs 7`       # not fatal
682                 [ "$major" ] && makedev vcs0 c $major 0 $cons
683                 symlink vcs vcs0
684                 [ "$major" ] && makedev vcsa0 c $major 128 $cons
685                 symlink vcsa vcsa0
686                 # individual vts
687                 line=1
688                 while [ $line -le $MAXVT ] && [ $line -le 63 ]
689                 do
690                         makedev tty$line c 4 $line $cons
691                         [ "$major" ] && makedev vcs$line c $major $line $cons
692                         [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $cons
693                         line=`math $line + 1`
694                 done
695                 ;;
696         adb)
697                 # pick the right arch device using dpkg's knowledge
698                 case `dpkg --print-installation-architecture` in
699                         powerpc)
700                                 # ADB bus devices (char)
701                                 makedev adb c 56 0 $mouse
702                                 makedev adbmouse c 10 10 $mouse
703                                 ;;
704                         m68k)
705                                 # ACSI disk 2, whole device (block)
706                                 makedev adb b 28 16 $disk
707                                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
708                                 do
709                                         minor=$(( 16 + $part ))
710                                         makedev adb$part b 28 $minor $disk
711                                 done
712                                 ;;
713                         *)
714                                 echo "no support for adb on this arch" >&2
715                                 exit 1
716                                 ;;
717                 esac
718                 ;;
719         raw1394)
720                 makedev raw1394 c 171 0 $disk
721                 ;;
722         video1394)
723                 rm -f video1394
724                 mkdir -p video1394
725                 for i in `seq 0 15`
726                 do
727                         makedev video1394/$i c 171 `math 16 + $i` $video
728                 done
729                 ;;
730         alsa)
731                 echo "You requested 'alsa' devices.  Please install the alsa-base package instead,"
732                 echo "which creates and maintains device information for ALSA."
733                 ;;
734         nvram)
735                 makedev nvram c 10 144 $mouse
736                 ;;
737         tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
738                 line=`suffix $arg tty`
739                 makedev tty$line c 4 $line $cons
740                 ;;
741         ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
742                 line=`suffix $arg ttyS`
743                 minor=`math 64 + $line`
744                 makedev ttyS$line c 4 $minor $dialout
745                 ;;
746         ttySC[0-3])
747                 line=`suffix $arg ttySC`
748                 minor=`math 8 + $line`
749                 makedev ttySC$line c 204 $minor $dialout
750                 ;;
751         ttyB[0-7])
752                 minor=`suffix $arg ttyB`
753                 makedev ttyB$minor c 11 $minor $dialout
754                 ;;
755         pty[a-ep-z])
756                 bank=`suffix $arg pty`
757                 base=`index pqrstuvwxyzabcde $bank`
758                 base=`math $base \* 16`
759                 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
760                 do
761                         j=`index 0123456789abcdef $i`
762                         makedev pty$bank$i c 2 `math $base + $j` $tty
763                         makedev tty$bank$i c 3 `math $base + $j` $tty
764                 done
765                 ;;
766         pty)
767                 ptysufs=""
768                 for i in p q r s t u v w x y z a b c d e
769                 do
770                         ptysufs="$ptysufs pty$i"
771                 done
772                 $0 $opts $ptysufs ptmx
773                 ;;
774         ptmx)
775                 # master pty multiplexer for 2.1 kernels
776                 makedev ptmx c 5 2 $tty
777                 ;;
778         cyclades|ttyC)
779                 major1=`Major ttyC 19` || continue
780                 #major2=`Major cub 20` || continue
781                 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
782                           16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
783                 do
784                         makedev ttyC$i c $major1 $i $dialout
785                         #makedev cub$i c $major2 $i $dialout
786                 done
787                 ;;
788         stallion|ttyE)
789                 major1=`Major ttyE 24` || continue
790                 #major2=`Major cue 25` || continue
791                 majorc=28
792                 minor=0
793                 until [ $minor -gt 256 ]
794                 do
795                         makedev ttyE$minor c $major1 $minor $dialout
796                         #makedev cue$minor c $major2 $minor $dialout
797                         minor=`math $minor + 1`
798                 done
799                 for i in 0 1 2 3
800                 do
801                         makedev staliomem$i c $majorc $i $private
802                 done
803                 ;;
804         chase|ttyH)
805                 major1=`Major ttyH 17` || continue
806                 #major2=`Major cuh 18` || continue
807                 minor=0
808                 until [ $minor -gt 16 ] # tell me if 16 is wrong
809                 do
810                         makedev ttyH$minor c $major1 $minor $dialout
811                         #makedev cuh$minor c $major2 $minor $dialout
812                         minor=`math $minor + 1`
813                 done
814                 ;;
815         rocketport|ttyR)
816                 major1=`Major ttyR 46` || continue
817                 #major2=`Major cur 47` || continue
818                 minor=0
819                 until [ $minor -gt 64 ] # tell me if 64 is wrong
820                 do
821                         makedev ttyR$minor c $major1 $minor $dialout
822                         #makedev cur$minor c $major2 $minor $dialout
823                         minor=`math $minor + 1`
824                 done
825                 ;;
826         ttyV)
827                 major1=`Major ttyV 105` || continue
828                 #major2=`Major cuv 106` || continue
829                 minor=0
830                 until [ $minor -gt 16 ] # tell me if 16 is wrong
831                 do
832                         makedev ttyV$minor c $major1 $minor $dialout
833                         #makedev cuv$minor c $major2 $minor $dialout
834                         minor=`math $minor + 1`
835                 done
836                 ;;
837         digi|ttyD)
838                 major1=`Major ttyD 22` || continue
839                 #major2=`Major cud 23` || continue
840                 minor=0
841                 until [ $minor -gt 16 ] # tell me if 16 is wrong
842                 do
843                         makedev ttyD$minor c $major1 $minor $dialout
844                         #makedev cud$minor c $major2 $minor $dialout
845                         minor=`math $minor + 1`
846                 done
847                 ;;
848         specialix|ttyX)
849                 major1=`Major ttyX 32` || continue
850                 #major2=`Major cux 33` || continue
851                 minor=0
852                 until [ $minor -gt 16 ] # tell me if 16 is wrong
853                 do
854                         makedev ttyX$minor c $major1 $minor $dialout
855                         #makedev cux$minor c $major2 $minor $dialout
856                         minor=`math $minor + 1`
857                 done
858                 ;;
859         specialixIO8|ttyW)
860                 major1=`Major ttyW 75` || continue
861                 #major2=`Major cuw 76` || continue
862                 minor=0
863                 until [ $minor -gt 16 ] # tell me if 16 is wrong
864                 do
865                         makedev ttyW$minor c $major1 $minor $dialout
866                         #makedev cuw$minor c $major2 $minor $dialout
867                         minor=`math $minor + 1`
868                 done
869                 ;;
870         PAM|ttyM)
871                 major1=`Major ttyM 79` || continue
872                 #major2=`Major cum 80` || continue
873                 minor=0
874                 until [ $minor -gt 16 ] # tell me if 16 is wrong
875                 do
876                         makedev ttyM$minor c $major1 $minor $dialout
877                         #makedev cum$minor c $major2 $minor $dialout
878                         minor=`math $minor + 1`
879                 done
880                 ;;
881         riscom|ttyL)
882                 major=`Major ttyL 48` || continue
883                 minor=0
884                 until [ $minor -gt 16 ] # tell me if 16 is wrong
885                 do
886                         makedev ttyL$minor c $major $minor $dialout
887                         minor=`math $minor + 1`
888                 done
889                 ;;
890         computone|ttyF)
891                 major=`Major ttyF 71` || continue
892                 #major2=`Major cuf 72` || continue
893                 minor=0
894                 until [ $minor -gt 255 ]
895                 do
896                         makedev ttyF$minor c $major $minor $dialout
897                         #makedev cuf$minor c $major2 $minor $dialout
898                         minor=`math $minor + 1`
899                 done
900                 major=73
901                 for i in 0 4 8 12
902                 do
903                         makedev ip2ipl$i  c $major $i $private
904                         makedev ip2stat$i c $major `math $i + 1` $private
905                 done
906                 ;;
907         ESP|ttyP)
908                 major=`Major ttyP 57` || continue
909                 #major2=`Major cup 58` || continue
910                 minor=0
911                 until [ $minor -gt 4 ] # tell me if 4 is wrong
912                 do
913                         makedev ttyP$minor c $major $minor $dialout
914                         #makedev cup$minor c $major2 $minor $dialout
915                         minor=`math $minor + 1`
916                 done
917                 ;;
918         COMX|comx)
919                 major=`Major comx 88` || continue
920                 minor=0
921                 until [ $minor -gt 4 ] # tell me if 4 is wrong
922                 do
923                         makedev comx$minor c $major $minor $private
924                         minor=`math $minor + 1`
925                 done
926                 ;;
927         isdnmodem|ttyI)
928                 major1=`Major ttyI 43` || continue
929                 #major2=`Major cui 44` || continue
930                 minor=0
931                 until [ $minor -gt 63 ]
932                 do
933                         makedev ttyI$minor c $major1 $minor $dialout
934                         #makedev cui$minor c $major2 $minor $dialout
935                         minor=`math $minor + 1`
936                 done
937                 ;;
938         isdnbri)
939                 major=45
940                 minor=0
941                 until [ $minor -gt 63 ]
942                 do
943                         makedev isdn$minor c $major $minor $dialout
944                         makedev isdnctrl$minor c $major `math $minor + 64` $dialout
945                         makedev ippp$minor c $major `math $minor + 128` $dialout
946                         minor=`math $minor + 1`
947                 done
948                 makedev isdninfo c $major 255 $private
949                 ;;
950         dcbri)
951                 major=52
952                 for i in 0 1 2 3
953                 do
954                         makedev dcbri$i c $major $i $dialout
955                 done
956                 ;;
957         capi)
958                 major=68
959                 makedev capi20 c $major 0 $dialout
960                 for i in 0 1 2 3 4 5 6 7 8 9
961                 do
962                         makedev capi20.0$i c $major `math $i + 1` $dialout
963                 done
964                 for i in 10 11 12 13 14 15 16 17 18 19
965                 do
966                         makedev capi20.$i c $major `math $i + 1` $dialout
967                 done
968                 ;;
969         ubd)
970                 major=98
971                 for devicenum in 0 1 2 3 4 5 6 7
972                 do
973                         device=ubd`substr abcdefgh $(($devicenum + 1))`
974                         baseminor=`math $devicenum \* 16`
975                         makedev $device b $major $baseminor $disk
976                         for partition in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
977                         do
978                                 minor=`math $baseminor + $partition`
979                                 makedev $device$partition b $major $minor $disk
980                         done
981                 done
982                 ;;
983         fb)
984                 for i in 0 1 2 3 4 5 6 7
985                 do
986                         makedev fb$i c 29 $i $video
987                 done
988                 ;;
989         fb[0-7])
990                 dev=`suffix $arg fb`
991                 makedev fb$dev c 29 $dev $video
992                 ;;
993         netlink|tap|tap[0-9]|tap1[0-5])
994                 makedev route     c 36 0 $coda
995                 makedev skip      c 36 1 $coda
996                 makedev fwmonitor c 36 3 $coda
997                 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
998                 do
999                         makedev tap$i c 36 `math $i + 16` $coda
1000                 done
1001                 ;;
1002         tun)
1003                 mkdir -p net
1004                 makedev net/tun c 10 200 $system
1005                 ;;
1006         lp)
1007                 major=`Major lp 6` || continue
1008                 makedev ${arg}0 c $major 0 $printer
1009                 makedev ${arg}1 c $major 1 $printer
1010                 makedev ${arg}2 c $major 2 $printer
1011                 ;;
1012         par)
1013                 major=`Major lp 6` || continue
1014                 makedev ${arg}0 c $major 0 $printer
1015                 makedev ${arg}1 c $major 1 $printer
1016                 makedev ${arg}2 c $major 2 $printer
1017                 ;;
1018         parport)
1019                 major=`Major parport 99` || continue
1020                 makedev ${arg}0 c $major 0 $printer
1021                 makedev ${arg}1 c $major 1 $printer
1022                 makedev ${arg}2 c $major 2 $printer
1023                 ;;
1024         slm)
1025                 major=`Major slm 28` || continue
1026                 for i in 0 1 2 3
1027                 do
1028                         makedev slm c $major $i $printer
1029                 done
1030                 ;;
1031         input)
1032                 major=`Major pcsp 13` || continue
1033                 mkdir -p input
1034                 for i in 0 1 2 3
1035                 do
1036                         makedev input/js$i c $major $i $mouse
1037                         makedev input/mouse$i c $major `math $i + 32` $mouse
1038                         makedev input/event$i c $major `math $i + 64` $mouse
1039                 done
1040                 makedev input/mice c $major 63 $mouse
1041                 ;;
1042         busmice)
1043                 major=`Major mouse 10` || continue
1044                 makedev logibm    c $major 0 $mouse
1045                 makedev psaux     c $major 1 $mouse
1046                 makedev inportbm  c $major 2 $mouse
1047                 makedev atibm     c $major 3 $mouse
1048                 makedev jbm       c $major 4 $mouse
1049                 ;;
1050         m68k-mice)
1051                 major=`Major mouse 10` || continue
1052                 makedev amigamouse c $major 4 $mouse
1053                 makedev atarimouse c $major 5 $mouse
1054                 makedev amigamouse1 c $major 7 $mouse
1055                 makedev adbmouse  c $major 10 $mouse
1056                 ;;
1057         3dfx)
1058                 major=`Major $arg 107` || continue
1059                 makedev $arg    c $major 0 $video
1060                 ;;
1061         agpgart)
1062                 major=`Major $arg 10` || continue
1063                 makedev $arg    c $major 175 $video
1064                 ;;
1065         hwrng)
1066                 major=`Major $arg 10` || continue
1067                 makedev $arg    c $major 183 $private
1068                 ;;
1069         mcelog)
1070                 major=`Major $arg 10` || continue
1071                 makedev $arg    c $major 227 $private
1072                 ;;
1073         cpu|microcode)
1074                 mkdir -p cpu
1075                 makedev cpu/microcode c 10 184 $private
1076                 for i in 0 1 2 3
1077                 do
1078                         mkdir -p cpu/$i
1079                         makedev cpu/$i/msr   c 202 $i $private
1080                         makedev cpu/$i/cpuid c 203 $i $private
1081                 done
1082                 ;;
1083         ipmi|ipmikcs)
1084                 major=`Major ipmikcs 10` || continue
1085                 makedev ipmikcs c $major 173 $private
1086                 ;;
1087         irda)
1088                 for i in 0 1
1089                 do
1090                         makedev ircomm$i c 161 $i $dialout
1091                         makedev irlpt$i  c 161 `math $i + 16` $printer
1092                 done
1093                 ;;
1094         irnet)
1095                 makedev irnet c 10 187 $system
1096                 ;;
1097         cbm)
1098                 makedev irnet c 10 177 $system
1099                 ;;
1100         misc)
1101                 major=`Major mouse 10` || continue
1102                 makedev logibm    c $major 0 $mouse
1103                 makedev psaux     c $major 1 $mouse
1104                 makedev inportbm  c $major 2 $mouse
1105                 makedev atibm     c $major 3 $mouse
1106                 makedev jbm       c $major 4 $mouse
1107                 makedev amigamouse c $major 4 $mouse
1108                 makedev atarimouse c $major 5 $mouse
1109                 makedev sunmouse  c $major 6 $mouse
1110                 makedev amigamouse1 c $major 7 $mouse
1111                 makedev smouse    c $major 8 $mouse
1112                 makedev pc110pad  c $major 9 $mouse
1113                 makedev adbmouse  c $major 10 $mouse
1114                 makedev beep      c $major 128 $mouse
1115                 makedev modreq    c $major 129 $mouse
1116                 makedev watchdog  c $major 130 $mouse
1117                 makedev temperature c $major 131 $mouse
1118                 makedev hwtrap    c $major 132 $mouse
1119                 makedev exttrp    c $major 133 $mouse
1120                 makedev apm_bios  c $major 134 $mouse
1121                 makedev rtc       c $major 135 $mouse
1122                 makedev openprom  c $major 139 root root 0664
1123                 makedev relay8    c $major 140 $mouse
1124                 makedev relay16   c $major 141 $mouse
1125                 makedev msr       c $major 142 $mouse
1126                 makedev pciconf   c $major 143 $mouse
1127                 makedev nvram     c $major 144 $mouse
1128                 makedev hfmodem   c $major 145 $mouse
1129                 makedev led       c $major 151 $mouse
1130                 makedev mergemem  c $major 153 $mouse
1131                 makedev pmu       c $major 154 $mouse
1132                 ;;
1133         fuse)
1134                 makedev fuse      c 10 229 $system
1135                 ;;
1136         pmu)
1137                 major=`Major mouse 10` || continue
1138                 makedev pmu       c $major 154 $mouse
1139                 ;;
1140         thinkpad)
1141                 major=`Major mouse 10` || continue
1142                 mkdir -p thinkpad
1143                 makedev thinkpad/thinkpad c $major 170 $mouse
1144                 ;;
1145         rtc)
1146                 major=`Major mouse 10` || continue
1147                 makedev rtc       c $major 135 $mouse
1148                 ;;
1149         efirtc)
1150                 major=`Major mouse 10` || continue
1151                 makedev efirtc    c $major 136 $mouse
1152                 ;;
1153         mwave)
1154                 makedev mwave     c 10 219 $mouse
1155                 ;;
1156         systrace)
1157                 makedev systrace  c 10 226 $private
1158                 ;;
1159         uinput)
1160                 mkdir -p input
1161                 makedev input/uinput  c 10 223 $mouse
1162                 ;;
1163         js)
1164                 major=`Major Joystick 13` || continue
1165                 for unit in 0 1 2 3
1166                 do
1167                         makedev js$unit c $major $unit $readable
1168                         makedev djs$unit c $major `math $unit + 128` $readable
1169                 done
1170                 ;;
1171         fd[0-7])
1172                 major=`Major fd 2` || continue
1173                 base=`suffix $arg fd`
1174                 if [ $base -ge 4 ]
1175                 then
1176                         base=`math $base + 124`
1177                 fi
1178                 makedev ${arg} b $major $base $floppy
1179                 makedev ${arg}d360  b $major `math $base +  4` $floppy
1180                 makedev ${arg}h1200 b $major `math $base +  8` $floppy
1181                 makedev ${arg}u360  b $major `math $base + 12` $floppy
1182                 makedev ${arg}u720  b $major `math $base + 16` $floppy
1183                 makedev ${arg}h360  b $major `math $base + 20` $floppy
1184                 makedev ${arg}h720  b $major `math $base + 24` $floppy
1185                 makedev ${arg}u1440 b $major `math $base + 28` $floppy
1186                 makedev ${arg}u2880 b $major `math $base + 32` $floppy
1187                 makedev ${arg}CompaQ b $major `math $base + 36` $floppy
1188
1189                 makedev ${arg}h1440 b $major `math $base + 40` $floppy
1190                 makedev ${arg}u1680 b $major `math $base + 44` $floppy
1191                 makedev ${arg}h410  b $major `math $base + 48` $floppy
1192                 makedev ${arg}u820  b $major `math $base + 52` $floppy
1193                 makedev ${arg}h1476 b $major `math $base + 56` $floppy
1194                 makedev ${arg}u1722 b $major `math $base + 60` $floppy
1195                 makedev ${arg}h420  b $major `math $base + 64` $floppy
1196                 makedev ${arg}u830  b $major `math $base + 68` $floppy
1197                 makedev ${arg}h1494 b $major `math $base + 72` $floppy
1198                 makedev ${arg}u1743 b $major `math $base + 76` $floppy
1199                 makedev ${arg}h880  b $major `math $base + 80` $floppy
1200                 makedev ${arg}u1040 b $major `math $base + 84` $floppy
1201                 makedev ${arg}u1120 b $major `math $base + 88` $floppy
1202                 makedev ${arg}h1600 b $major `math $base + 92` $floppy
1203                 makedev ${arg}u1760 b $major `math $base + 96` $floppy
1204                 makedev ${arg}u1920 b $major `math $base + 100` $floppy
1205                 makedev ${arg}u3200 b $major `math $base + 104` $floppy
1206                 makedev ${arg}u3520 b $major `math $base + 108` $floppy
1207                 makedev ${arg}u3840 b $major `math $base + 112` $floppy
1208                 makedev ${arg}u1840 b $major `math $base + 116` $floppy
1209                 makedev ${arg}u800  b $major `math $base + 120` $floppy
1210                 makedev ${arg}u1600 b $major `math $base + 124` $floppy
1211                 ;;
1212         ed[a-b])
1213                 major=`Major ed 36` || continue
1214                 unit=`suffix $arg ed`
1215                 base=`index ab $unit`
1216                 base=`math $base \* 64`
1217                 makedev ed$unit b $major $base $disk
1218                 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
1219                 do
1220                         makedev ed$unit$part b $major `math $base + $part` $disk
1221                 done
1222                 ;;
1223         hd[a-b])
1224                 major=`Major ide0` || major=`Major hd 3` || continue
1225                 unit=`suffix $arg hd`
1226                 base=`index ab $unit`
1227                 base=`math $base \* 64`
1228                 makedev hd$unit b $major $base $disk
1229                 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
1230                 do
1231                         makedev hd$unit$part b $major `math $base + $part` $disk
1232                 done
1233                 ;;
1234         hd[c-d])
1235                 major=`Major ide1 22` || continue
1236                 unit=`suffix $arg hd`
1237                 base=`index cd $unit`
1238                 base=`math $base \* 64`
1239                 makedev hd$unit b $major $base $disk
1240                 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
1241                 do
1242                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1243                 done
1244                 ;;
1245         hd[e-f])
1246                 major=`Major ide2 33` || continue
1247                 unit=`suffix $arg hd`
1248                 base=`index ef $unit`
1249                 base=`math $base \* 64`
1250                 makedev hd$unit b $major $base $disk
1251                 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
1252                 do
1253                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1254                 done
1255                 ;;
1256         hd[g-h])
1257                 major=`Major ide3 34` || continue
1258                 unit=`suffix $arg hd`
1259                 base=`index gh $unit`
1260                 base=`math $base \* 64`
1261                 makedev hd$unit b $major $base $disk
1262                 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
1263                 do
1264                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1265                 done
1266                 ;;
1267         hd[i-j])
1268                 major=`Major ide4 56` || continue
1269                 unit=`suffix $arg hd`
1270                 base=`index ij $unit`
1271                 base=`math $base \* 64`
1272                 makedev hd$unit b $major $base $disk
1273                 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
1274                 do
1275                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1276                 done
1277                 ;;
1278         hd[k-l])
1279                 major=`Major ide5 57` || continue
1280                 unit=`suffix $arg hd`
1281                 base=`index kl $unit`
1282                 base=`math $base \* 64`
1283                 makedev hd$unit b $major $base $disk
1284                 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
1285                 do
1286                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1287                 done
1288                 ;;
1289         hd[m-n])
1290                 major=`Major ide6 88` || continue
1291                 unit=`suffix $arg hd`
1292                 base=`index mn $unit`
1293                 base=`math $base \* 64`
1294                 makedev hd$unit b $major $base $disk
1295                 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
1296                 do
1297                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1298                 done
1299                 ;;
1300         hd[o-p])
1301                 major=`Major ide7 89` || continue
1302                 unit=`suffix $arg hd`
1303                 base=`index op $unit`
1304                 base=`math $base \* 64`
1305                 makedev hd$unit b $major $base $disk
1306                 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
1307                 do
1308                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1309                 done
1310                 ;;
1311         hd[q-r])
1312                 major=`Major ide8 90` || continue
1313                 unit=`suffix $arg hd`
1314                 base=`index qr $unit`
1315                 base=`math $base \* 64`
1316                 makedev hd$unit b $major $base $disk
1317                 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
1318                 do
1319                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1320                 done
1321                 ;;
1322         hd[s-t])
1323                 major=`Major ide9 91` || continue
1324                 unit=`suffix $arg hd`
1325                 base=`index st $unit`
1326                 base=`math $base \* 64`
1327                 makedev hd$unit b $major $base $disk
1328                 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
1329                 do
1330                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1331                 done
1332                 ;;
1333         ub|uba) 
1334                 major=180
1335                 makedev uba b $major 0 $disk
1336                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1337                 do
1338                         makedev uba$part b $major $part $disk
1339                 done
1340                 ;;
1341         ht0)
1342                 major=`Major ht0 37` || continue
1343                 # Only one IDE tape drive is currently supported; ht0.
1344                 makedev ht0 c $major 0 $tape
1345                 makedev nht0 c $major 128 $tape
1346                 ;;
1347         pt)
1348                 major=`Major pt 96` || continue
1349                 for i in 0 1 2 3
1350                 do
1351                         makedev pt$i c $major $i $tape
1352                         makedev npt$i c $major `math $i + 128` $tape
1353                 done
1354                 ;;
1355         xd[a-d])
1356                 major=`Major xd 13` || continue
1357                 unit=`suffix $arg xd`
1358                 base=`index abcd $unit`
1359                 base=`math $base \* 64`
1360                 makedev xd$unit b $major $base $disk
1361                 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
1362                 do
1363                         makedev xd$unit$part b $major $(( $base + $part )) $disk
1364                 done
1365                 ;;
1366         sd[a-z])
1367                 major=`Major sd 8` || continue
1368                 unit=`suffix $arg sd`
1369                 base=`index abcdefghijklmnopqrstuvwxyz $unit`
1370                 base=$(( $base * 16 ))
1371                 if [ $base -lt 256 ]; then
1372                         major=8
1373                 else
1374                         major=65
1375                         base=$(( $base - 256 ))
1376                 fi
1377                 makedev sd$unit b $major $base $disk
1378                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1379                 do
1380                         minor=$(( $base + $part ))
1381                         makedev sd$unit$part b $major $minor $disk
1382                 done
1383                 ;;
1384         sd[a-d][a-z])
1385                 unit=`suffix $arg sd`
1386                 unitmaj=`first $unit`
1387                 unitmin=`second $unit`
1388                 basemaj=`index Xabcd $unitmaj`
1389                 basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
1390                 basemaj=`math $basemaj \* 416`
1391                 basemin=`math $basemin \* 16`
1392                 base=`math $basemaj + $basemin`
1393                 basemaj=`math $base / 256`
1394                 base=`math $base % 256`
1395                 major=`math basemaj \+ 64`
1396                 if [ $major -gt 71 ]; then
1397                         echo "$0: don't know how to make device \"$arg\"" >&2
1398                         exit 0
1399                 fi
1400                 makedev sd$unit b $major $base $disk
1401                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1402                 do
1403                         minor=$(( $base + $part ))
1404                         makedev sd$unit$part b $major $minor $disk
1405                 done
1406                 ;;
1407         i2o.hd[a-z])
1408                 [ -d i2o ] || {
1409                         mkdir i2o
1410                         chown root:root i2o
1411                         chmod 755 i2o
1412                         [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
1413                 }
1414                 unit=`suffix $arg i2o.hd`
1415                 base=`index abcdefghijklmnopqrstuvwxyz $unit`
1416                 base=$(( $base * 16 ))
1417                 if [ $base -lt 256 ]; then
1418                         major=80
1419                 else
1420                         major=81
1421                         base=$(( $base - 256 ))
1422                 fi
1423                 makedev i2o/hd$unit b $major $base $disk
1424                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1425                 do
1426                         minor=$(( $base + $part ))
1427                         makedev i2o/hd$unit$part b $major $minor $disk
1428                 done
1429                 ;;
1430         i2o.hd[a-d][a-z])
1431                 [ -d i2o ] || {
1432                         mkdir i2o
1433                         chown root:root i2o
1434                         chmod 755 i2o
1435                         [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
1436                 }
1437                 unit=`suffix $arg i2o.hd`
1438                 unitmaj=`first $unit`
1439                 unitmin=`second $unit`
1440                 basemaj=`index Xabcd $unitmaj`
1441                 basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
1442                 basemaj=`math $basemaj \* 416`
1443                 basemin=`math $basemin \* 16`
1444                 base=`math $basemaj + $basemin`
1445                 basemaj=`math $base / 256`
1446                 base=`math $base % 256`
1447                 major=`math basemaj \+ 80`
1448                 if [ $major -gt 87 ]; then
1449                         echo "$0: don't know how to make device \"$arg\"" >&2
1450                         exit 0
1451                 fi
1452                 makedev i2o/hd$unit b $major $base $disk
1453                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1454                 do
1455                         minor=$(( $base + $part ))
1456                         makedev i2o/hd$unit$part b $major $minor $disk
1457                 done
1458                 ;;
1459         dasd[a-z])
1460                 major=`Major dasd 94` || continue
1461                 unit=`suffix $arg dasd`
1462                 base=`index abcdefghijklmnopqrstuvwxyz $unit`
1463                 base=$(( $base * 4 ))
1464                 if [ $base -lt 256 ]; then
1465                         major=94
1466                 else
1467                         major=65
1468                         base=$(( $base - 256 ))
1469                 fi
1470                 makedev dasd$unit b $major $base $disk
1471                 for part in 1 2 3
1472                 do
1473                         minor=$(( $base + $part ))
1474                         makedev dasd$unit$part b $major $minor $disk
1475                 done
1476                 ;;
1477         ad[a-p])
1478                 major=`Major ad 28` || continue
1479                 unit=`suffix $arg ad`
1480                 base=`index abcdefghijklmnop $unit`
1481                 base=`math $base \* 16`
1482                 makedev ad$unit b $major $base $disk
1483                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1484                 do
1485                         minor=$(( $base + $part ))
1486                         makedev ad$unit$part b $major $minor $disk
1487                 done
1488                 ;;
1489         dac960)
1490                 for ctr in 0 1 2 3 4 5 6 7
1491                 do
1492                         $0 $opts dac960.$ctr
1493                 done
1494                 makedev dac960_gam c 10 252 $disk
1495                 ;;
1496         dac960.[0-7])
1497                 [ -d rd ] || {
1498                         mkdir rd
1499                         chown root:root rd
1500                         chmod 755 rd
1501                 }
1502                 unit=`suffix $arg dac960.`
1503                     major=`math 48 + $unit`
1504                     minor=0
1505                     for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
1506                             17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
1507                     do
1508                         makedev rd/c${unit}d${ld} b $major $minor $disk
1509                         minor=`math $minor + 1`
1510                         for part in 1 2 3 4 5 6 7
1511                         do
1512                             makedev rd/c${unit}d${ld}p$part b $major $minor $disk
1513                             minor=`math $minor + 1`
1514                         done
1515                     done
1516                 ;;
1517         dpti)
1518                 major=151
1519                 for ld in 1 2 3 4 5 6 7
1520                 do
1521                    minor=`math $ld -1`
1522                    makedev dpti${ld} c $major $minor $disk
1523                 done
1524                 ;;
1525         ataraid)
1526                 for ctr in 0 1 2 # 3 4 5 6 7
1527                 do
1528                         $0 $opts ataraid.$ctr
1529                 done
1530                 ;;
1531         ataraid.[0-7])
1532                 [ -d ataraid ] || {
1533                         mkdir ataraid
1534                         chown root:root ataraid
1535                         chmod 755 ataraid
1536                 }
1537                 unit=`suffix $arg ataraid.`
1538                 major=114
1539                 minor=`math $unit \* 16`
1540                 makedev ataraid/d${unit} b $major $minor $disk
1541                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1542                 do
1543                    minor=`math $minor + 1`
1544                    makedev ataraid/d${unit}p$part b $major $minor $disk
1545                 done
1546                 ;;
1547         ida)
1548                 for ctr in 0 1 2 # 3 4 5 6 7
1549                 do
1550                         $0 $opts ida.$ctr
1551                 done
1552                 ;;
1553         ida.[0-7])
1554                 [ -d ida ] || {
1555                         mkdir ida
1556                         chown root:root ida
1557                         chmod 755 ida
1558                 }
1559                 unit=`suffix $arg ida.`
1560                 major=`math 72 + $unit`
1561                 minor=0
1562                 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1563                 do
1564                     makedev ida/c${unit}d${ld} b $major $minor $disk
1565                     minor=`math $minor + 1`
1566                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1567                     do
1568                         makedev ida/c${unit}d${ld}p$part b $major $minor $disk
1569                         minor=`math $minor + 1`
1570                     done
1571                 done
1572                 ;;
1573         cciss)
1574                 for ctr in 0 1 2 # 3 4 5 6 7
1575                 do
1576                         $0 $opts cciss.$ctr
1577                 done
1578                 ;;
1579         cciss.[0-7])
1580                 [ -d cciss ] || {
1581                         mkdir cciss
1582                         chown root:root cciss
1583                         chmod 755 cciss
1584                 }
1585                 unit=`suffix $arg cciss.`
1586                 major=`math 104 + $unit`
1587                 minor=0
1588                 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1589                 do
1590                     makedev cciss/c${unit}d${ld} b $major $minor $disk
1591                     minor=`math $minor + 1`
1592                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1593                     do
1594                         makedev cciss/c${unit}d${ld}p$part b $major $minor $disk
1595                         minor=`math $minor + 1`
1596                     done
1597                 done
1598                 ;;
1599         rom)
1600                 major=`Major rom 31`
1601                 for i in 0 1 2 3 4 5 6 7
1602                 do
1603                         makedev rom$i    b $major $i $disk
1604                         makedev rrom$i   b $major `math $i +8` $disk
1605                         makedev flash$i  b $major `math $i +16` $disk
1606                         makedev rflash$i b $major `math $i +24` $disk
1607                 done
1608                 ;;
1609         nb[0-7])
1610                 major=`Major nbd 43` || continue
1611                 minor=`suffix $arg nb`
1612                 makedev nb$minor b $major $minor $disk
1613                 ;;
1614         loop)
1615                 for part in 0 1 2 3 4 5 6 7
1616                 do
1617                         makedev loop$part b 7 $part $disk
1618                 done
1619                 ;;
1620         loop[0-9]|loop[1-9][0-9]|loop1[0-9][0-9]|loop2[0-4][0-9]|loop25[0-5])
1621                 minor=`suffix $arg loop`
1622                 makedev loop$minor b 7 $minor $disk
1623                 ;;
1624         md)
1625                 major=`Major md 9` || continue
1626                 for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
1627                         16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
1628                 do
1629                         makedev md$part b $major $part $disk
1630                 done
1631                 ;;
1632         st[0-7])
1633                 major=`Major st 9`
1634                 unit=`suffix $arg st`
1635                 makedev st${unit}   c $major $unit $tape
1636                 makedev nst${unit}  c $major `math 128 + $unit` $tape
1637
1638                 makedev st${unit}l  c $major `math 32 + $unit` $tape
1639                 makedev nst${unit}l c $major `math 160 + $unit` $tape
1640
1641                 makedev st${unit}m  c $major `math 64 + $unit` $tape
1642                 makedev nst${unit}m c $major `math 192 + $unit` $tape
1643
1644                 makedev st${unit}a  c $major `math 96 + $unit` $tape
1645                 makedev nst${unit}a c $major `math 224 + $unit` $tape
1646                 ;;
1647         qic)
1648                 major=`Major tpqic02 12`
1649                 makedev ntpqic11   c $major   2 $tape
1650                 makedev tpqic11    c $major   3 $tape
1651                 makedev ntpqic24   c $major   4 $tape
1652                 makedev tpqic24    c $major   5 $tape
1653                 makedev ntpqic120  c $major   6 $tape
1654                 makedev tpqic120   c $major   7 $tape
1655                 makedev ntpqic150  c $major   8 $tape
1656                 makedev tpqic150   c $major   9 $tape
1657                 makedev rmt8       c $major   6 $tape
1658                 makedev rmt16      c $major   8 $tape
1659                 makedev tape-d     c $major 136 $tape
1660                 makedev tape-reset c $major 255 $tape
1661                 $0 $opts qft
1662                 ;;
1663         ftape)
1664                 major=`Major qft 27` || continue
1665                 for unit in 0 1 2 3
1666                 do
1667                         makedev qft$unit     c $major $unit $tape
1668                         makedev nqft$unit    c $major `math $unit + 4` $tape
1669                         makedev zqft$unit    c $major `math $unit + 16` $tape
1670                         makedev nzqft$unit   c $major `math $unit + 20` $tape
1671                         makedev rawqft$unit  c $major `math $unit + 32` $tape
1672                         makedev nrawqft$unit c $major `math $unit + 36` $tape
1673                 done
1674                 symlink ftape qft0
1675                 symlink nftape nqft0
1676                 ;;
1677         sr|scd|scd-all)
1678                 major=`Major sr 11` || continue
1679                 for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1680                 do
1681                         makedev scd$unit b $major $unit $cdrom
1682                         symlink sr$unit scd$unit
1683                 done
1684                 ;;
1685         pktcdvd)
1686                 major=97
1687                 for unit in 0 1 2 3
1688                 do
1689                         makedev pktcdvd$unit b $major $unit $cdrom
1690                 done
1691                 ;;
1692         cfs0)
1693                 makedev cfs0 c 67 0 $coda
1694                 ;;
1695         scd[0-9]|scd[0-1][0-9])
1696                 major=`Major sr 11` || continue
1697                 unit=`suffix $arg scd`
1698                 makedev scd$unit b $major $unit $cdrom
1699                 symlink sr$unit scd$unit 
1700                 ;;
1701         ttyI[0-9]|ttyI[1-5][0-9]|ttyI[6][0-3])
1702                 major=43
1703                 unit=`suffix $arg ttyI`
1704                 makedev ttyI$unit c $major $unit $dialout
1705                 ;;
1706         ppp)
1707                 major=108
1708                 makedev ppp c $major 0 $dip
1709                 ;;
1710         ippp[0-9]|ippp[1-5][0-9]|ippp[6][0-3])
1711                 major=45
1712                 unit=`suffix $arg ippp`
1713                 minor=`math $unit + 128`
1714                 makedev ippp$unit c $major $minor $dialout
1715                 ;;
1716         isdn[0-9]|isdn[1-5][0-9]|isdn[6][0-3])
1717                 major=45
1718                 unit=`suffix $arg isdn`
1719                 minor=`math $unit + 0`
1720                 makedev isdn$unit c $major $minor $dialout
1721                 ;;
1722         isdnctrl[0-9]|isdnctrl[1-5][0-9]|isdnctrl[6][0-3])
1723                 major=45
1724                 unit=`suffix $arg isdnctrl`
1725                 minor=`math $unit + 64`
1726                 makedev isdnctrl$unit c $major $minor $dialout
1727                 ;;
1728         isdninfo)
1729                 makedev isdninfo c 45 255 $private
1730                 ;;
1731         isdn-tty)
1732                 major=43
1733                 for unit in 0 1 2 3 4 5 6 7
1734                 do
1735                         makedev ttyI$unit c $major $unit $dialout
1736                 done
1737                 ;;
1738         isdn-ippp)
1739                 major=45
1740                 for unit in 0 1 2 3 4 5 6 7
1741                 do
1742                         makedev ippp$unit c $major `math $unit + 128` $dialout
1743                 done
1744                 ;;
1745         isdn-io)
1746                 for unit in 0 1 2 3 4 5 6 7
1747                 do
1748                         makedev isdn$unit c 45 $unit $dialout
1749                         makedev isdnctrl$unit c 45 `math $unit + 64` $dialout
1750                         makedev ippp$unit c 45 `math $unit + 128` $dialout
1751                 done
1752                 makedev isdninfo c 45 255 $dialout
1753                 ;;
1754         sonycd)
1755                 major=`Major sonycd 15` || continue
1756                 makedev $arg b $major 0 $cdrom
1757                 ;;
1758         mcd)
1759                 major=`Major mcd 23` || continue
1760                 makedev $arg b $major 0 $cdrom
1761                 ;;
1762         mcdx|mcdx[0-4])
1763                 major=`Major $arg 20` || continue
1764                 for unit in 0 1 2 3 4
1765                 do
1766                         makedev mcdx$unit b $major $unit $cdrom
1767                 done
1768                 test -r mcdx || symlink mcdx mcdx0
1769                 ;;
1770         cdu535)
1771                 makedev $arg b 24 0 $cdrom
1772                 ;;
1773         lmscd)
1774                 makedev $arg b 24 0 $cdrom
1775                 ;;
1776         sbpcd|sbpcd[123])
1777                 major=`Major $arg 25` || continue
1778                 base=`suffix ${arg}0 sbpcd`
1779                 for minor in 0 1 2 3
1780                 do
1781                         # XXX
1782                         unit=$(substr 0123456789abcdef $(( $base * 4 + $minor + 1 )) )
1783                         makedev sbpcd$unit b $major $minor $cdrom
1784                 done
1785                 [ $arg = sbpcd ] && symlink $arg ${arg}0
1786                 ;;
1787         aztcd)
1788                 major=`Major $arg 29` || continue
1789                 makedev ${arg}0 b $major 0 $cdrom
1790                 ;;
1791         cm206cd)
1792                 major=`Major $arg 30` || continue
1793                 makedev ${arg}0 b $major 0 $cdrom
1794                 ;;
1795         gscd)
1796                 major=`Major $arg 16` || continue
1797                 makedev ${arg}0 b $major 0 $cdrom
1798                 ;;
1799         pcd)
1800                 for unit in 0 1 2 3 
1801                 do
1802                         makedev pcd$unit b 46 $unit $cdrom
1803                 done
1804                 ;;
1805         bpcd)
1806                 makedev $arg b 41 0 $cdrom
1807                 ;;
1808         optcd)
1809                 makedev $arg b 17 0 $cdrom
1810                 ;;
1811         sjcd)
1812                 makedev $arg b 18 0 $cdrom
1813                 ;;
1814         cfs|coda)
1815                 makedev cfs0 c 67 0 $private
1816                 ;;
1817         xfs|nnpfs|arla)
1818                 makedev xfs0 c 103 0 $private
1819                 makedev nnpfs0 c 103 0 $private
1820                 ;;
1821         logiscan)
1822                 major=`Major logiscan` || continue
1823                 makedev $arg c $major 0 $scanner
1824                 ;;
1825         toshiba)
1826                 major=`Major $arg 10` || continue
1827                 makedev $arg c $major 181 root root 0666
1828                 ;;
1829         m105scan)
1830                 major=`Major m105` || continue
1831                 makedev $arg c $major 0 $scanner
1832                 ;;
1833         ac4096)
1834                 major=`Major ac4096` || continue
1835                 makedev $arg c $major 0 $scanner
1836                 ;;
1837         audio)
1838                 major=`Major sound 14`
1839                 makedev mixer      c $major  0 $audio
1840                 makedev mixer1     c $major 16 $audio
1841                 makedev mixer2     c $major 32 $audio
1842                 makedev mixer3     c $major 48 $audio
1843                 makedev sequencer  c $major  1 $audio
1844                 makedev midi00     c $major  2 $audio
1845                 makedev midi01     c $major 18 $audio
1846                 makedev midi02     c $major 34 $audio
1847                 makedev midi03     c $major 50 $audio
1848                 makedev dsp        c $major  3 $audio
1849                 makedev dsp1       c $major 19 $audio
1850                 makedev dsp2       c $major 35 $audio
1851                 makedev dsp3       c $major 51 $audio
1852                 makedev audio      c $major  4 $audio
1853                 makedev audio1     c $major 20 $audio
1854                 makedev audio2     c $major 36 $audio
1855                 makedev audio3     c $major 52 $audio
1856                 makedev sndstat    c $major  6 $audio
1857                 makedev audioctl   c $major  7 $audio
1858                 major=31
1859                 makedev mpu401data c $major 0  $audio
1860                 makedev mpu401stat c $major 1  $audio
1861                 major=35
1862                 for i in 0 1 2 3
1863                 do
1864                         makedev midi$i  c $major $i $audio
1865                         makedev rmidi$i c $major `math $i + 64` $audio
1866                         makedev smpte$i c $major `math $i + 128` $audio
1867                 done
1868                 ;;
1869         pcaudio)
1870                 major=`Major pcsp 13` || continue
1871                 makedev pcmixer c $major 0 $audio
1872                 makedev pcsp    c $major 3 $audio
1873                 makedev pcaudio c $major 4 $audio
1874                 ;;
1875         video|video4linux|v4l|radio)
1876                 # video4linux api includes radio, teletext, etc.
1877                 major=`Major video 81` || continue
1878                 minor=0
1879                 until [ $minor -gt 63 ]
1880                 do
1881                         makedev video$minor c $major $minor $video
1882                         makedev radio$minor c $major `math $minor + 64` $video
1883                         minor=`math $minor + 1`
1884                 done
1885                 symlink radio radio0
1886                 minor=0
1887                 until [ $minor -gt 31 ]
1888                 do
1889                         makedev vtx$minor c $major `math $minor + 192` $video
1890                         makedev vbi$minor c $major `math $minor + 224` $video
1891                         minor=`math $minor + 1`
1892                 done
1893                 symlink video video0
1894                 symlink vbi vbi0
1895                 major=82
1896                 minor=0
1897                 until [ $minor -gt 1 ]
1898                 do
1899                         makedev winradio$minor c $major $minor $video
1900                         minor=`math $minor + 1`
1901                 done
1902                 major=83
1903                 makedev vtx     c $major 0 $video
1904                 makedev vttuner c $major 16 $video
1905                 ;;
1906         i2c)
1907                 # making it possible to create an arbitrary number of i2c
1908                 # devices might be good, but 8 should suffice for now
1909                 major=`Major i2c 89` || continue
1910                 minor=0
1911                 until [ $minor -gt 7 ] 
1912                 do
1913                         makedev i2c-$minor c $major $minor $private
1914                         minor=`math $minor + 1`
1915                 done
1916                 ;;
1917         tlk)
1918                 major=102
1919                 minor=0
1920                 until [ $minor -gt 3 ] # tell me if 3 is wrong...
1921                 do
1922                         makedev tlk$minor c $major $minor $video
1923                         minor=`math $minor + 1`
1924                 done
1925                 ;;
1926         srnd)
1927                 makedev srnd0 c 110 0 $video
1928                 makedev srnd1 c 110 1 $video
1929                 ;;
1930         fgrab)
1931                 makedev mmetfgrab c 40 0 $video
1932                 makedev wvisfgrab c 26 0 $video
1933                 for i in 0 1 # more?
1934                 do
1935                         makedev iscc$i    c 93 $i $video
1936                         makedev isccctl$i c 93 `math $i + 128` $video
1937                 done
1938                 for i in 0 1 # more?
1939                 do
1940                         makedev dcxx$i c 94 $i $video
1941                 done
1942                 ;;
1943         sg|sg-all)
1944                 major=`Major sg 21`
1945                 for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1946                 do
1947                         makedev sg$unit c $major $unit $scsi
1948                 done
1949                 ;;
1950         pg)
1951                 major=`Major pg 97`
1952                 for unit in 0 1 2 3
1953                 do
1954                         makedev pg$unit c $major $unit $scsi
1955                 done
1956                 ;;
1957         fd)
1958                 # not really devices, we use the /proc filesystem
1959                 symlink fd     $procfs/self/fd
1960                 symlink stdin  fd/0
1961                 symlink stdout fd/1
1962                 symlink stderr fd/2
1963                 ;;
1964         ibcs2)
1965                 major=`Major ibcs2 30` || continue
1966                 makedev socksys c $major 0 $ibcs2
1967                 symlink nfsd socksys
1968                 makedev spx     c $major 1 $ibcs2
1969                 symlink X0R null
1970                 ;;
1971         netlink)
1972                 major=36
1973                 makedev route c $major 0 $private
1974                 makedev skip  c $major 1 $private
1975                 ;;
1976         enskip)
1977                 major=64
1978                 makedev enskip c $major 0 $private
1979                 ;;
1980         ipfilt*)
1981                 major=95
1982                 makedev ipl     c $major 0 $private
1983                 makedev ipnat   c $major 1 $private
1984                 makedev ipstate c $major 2 $private
1985                 makedev ipauth  c $major 3 $private
1986                 ;;
1987         qng)
1988                 makedev qng c 77 0 $private
1989                 ;;
1990         apm)
1991                 major=`Major mouse 10` || continue
1992                 makedev apm_bios  c $major 134 $mouse
1993                 ;;
1994         dcf)
1995                 major=`Major dcf` || continue
1996                 makedev $arg c $major 0 $system
1997                 ;;
1998         helloworld)
1999                 major=`Major hw` || continue
2000                 makedev helloworld c $major 0 $public
2001                 ;;
2002         ipsec)
2003                 # For the Free S/WAN (http://www.xs4all.nl/~freeswan/)
2004                 # implementation of IPSEC
2005                 makedev ipsec c 36 10 $ipsec
2006                 ;;
2007         comedi)
2008                 major=98
2009                 for minor in 0 1 2 3
2010                 do
2011                         makedev comedi$minor c $major $minor $public
2012                 done
2013                 ;;
2014         tilp)
2015                 for i in `seq 0 7`
2016                 do
2017                         makedev tipar$i c 115 $i $printer
2018                         makedev tiser$i c 115 `math 8 + $i` $dialout
2019                 done
2020                 for i in `seq 0 31`
2021                 do
2022                         makedev tiusb$i c 115 `math 16 + $i` $dialout
2023                 done
2024                 ;;
2025         dvb)
2026                 # check if kernel-version is >= 2.6.8, if yes, create dvb-devices with
2027                 # major-number 212, in the other case 250
2028                 
2029                 kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
2030                 kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
2031                 kern_rev3=`uname -r | sed -e 's@^[^.]*\.[^.]*\.\([^.][0-9]*\).*@\1@'`
2032       
2033                 dvb_major=250
2034
2035                 if [ $kern_rev1 -gt 2 ] || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -gt 6 ]) \
2036                         || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -eq 6 ] && [ $kern_rev3 -ge 8 ])
2037                 then 
2038                         dvb_major=212 
2039                 fi
2040
2041                 mkdir -p dvb
2042                 for i in 0 1 2 3
2043                 do
2044                         mkdir -p dvb/adapter$i
2045                         makedev dvb/adapter$i/video0    c $dvb_major `math 64 \* $i + 0` $video
2046                         makedev dvb/adapter$i/audio0    c $dvb_major `math 64 \* $i + 1` $video
2047                         makedev dvb/adapter$i/frontend0 c $dvb_major `math 64 \* $i + 3` $video
2048                         makedev dvb/adapter$i/demux0    c $dvb_major `math 64 \* $i + 4` $video
2049                         makedev dvb/adapter$i/dvr0      c $dvb_major `math 64 \* $i + 5` $video
2050                         makedev dvb/adapter$i/ca0       c $dvb_major `math 64 \* $i + 6` $video
2051                         makedev dvb/adapter$i/net0      c $dvb_major `math 64 \* $i + 7` $video
2052                         makedev dvb/adapter$i/osd0      c $dvb_major `math 64 \* $i + 8` $video
2053                 done
2054                 ;;
2055         usb)
2056                 mkdir -p usb
2057                 major=180
2058                 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2059                 do
2060                         makedev usb/lp$i c $major $i $printer
2061                         makedev usb/mouse$i c $major `math $i + 16` $mouse
2062                         makedev usb/ez$i c $major `math $i + 32` $system
2063                         makedev usb/scanner$i c $major `math $i + 48` $scanner
2064                         makedev usb/hiddev$i c $major `math $i + 96` $system
2065                         makedev ttyACM$i c 166 $i $dialout
2066                         makedev ttyUSB$i c 188 $i $dialout
2067                 done
2068                 makedev usb/rio500 c $major 64 $audio
2069                 makedev usb/usblcd c $major 65 $audio
2070                 makedev usb/cpad0 c $major 66 $audio
2071                 ;;
2072         bluetooth)
2073                 major=216
2074                 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
2075                         16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
2076                 do
2077                         makedev rfcomm$i c $major $i $dialout
2078                 done
2079                 makedev vhci c 10 250 $dialout
2080                 for i in 0 1 2 3; do
2081                         makedev ttyUB$i c 216 $i $dialout
2082                         makedev ccub$i c 217 $i $dialout
2083                 done
2084                 ;;
2085         paride)
2086                 major=45
2087                 for unit in a b c d
2088                 do
2089                     base=`index abcd $unit`
2090                     base=`math $base \* 16`
2091                     makedev pd$unit b $major $base $disk
2092                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2093                     do
2094                         makedev pd$unit$part b $major $(( $base + $part )) $disk
2095                     done
2096                 done
2097                 for i in 0 1 2 3
2098                 do
2099                     makedev pcd$i b 46 $i $cdrom
2100                     makedev pf$i  b 47 $i $floppy
2101                 done
2102                 ;;
2103         update)
2104                 devices=
2105                 if [ ! -f $procfs/devices ]
2106                 then
2107                         echo "$0: warning: can't read $procfs/devices" >&2
2108                 else
2109                         exec 3<$procfs/devices
2110                         while read major device extra <&3
2111                         do
2112                                 device=`echo $device | sed 's#/.*##'`
2113                                 case "$major" in
2114                                         Character|Block|'')
2115                                                 ;;
2116                                         *)
2117                                                 eval "major_$device=$major"
2118                                                 devices="$devices $device"
2119                                                 ;;
2120                                 esac
2121                         done
2122                         exec 3<&-
2123                 fi
2124
2125                 if [ ! "$devices" ]
2126                 then
2127                         echo "$0: don't appear to have any devices" >&2
2128                         continue
2129                 fi
2130                 if [ "$opt_d" ]
2131                 then
2132                         echo "$0: can't delete an update" >&2
2133                         continue
2134                 fi
2135                 create=
2136                 delete=
2137                 devs="$devices"
2138                 if [ -f DEVICES ]
2139                 then
2140                         exec 3<DEVICES
2141                         while read device major <&3
2142                         do
2143                                 eval now=\$major_$device
2144                                 if [ "$now" = "" ]
2145                                 then
2146                                         delete="$delete `cvt $device`"
2147                                         continue
2148                                 elif [ "$now" != $major ]
2149                                 then
2150                                         create="$create "`cvt $device`
2151                                 fi
2152                                 devs=`strip " $devs " $device`
2153                         done
2154                         exec 3<&-
2155                 fi
2156                 create="$create "`cvt $devs`
2157                 [ "$delete" != "" ] && $0 $opts -d $delete
2158                 [ "$create" != " " ] && $0 $opts $create
2159                 [ "$opt_n" ] && continue
2160                 for device in $devices
2161                 do
2162                         if [ "`cvt $device`" ]
2163                         then
2164                             eval echo $device \$major_$device
2165                         fi
2166                 done > DEVICES
2167                 ;;
2168         *)
2169                 echo "$0: don't know how to make device \"$arg\"" >&2
2170                 exit 1
2171                 ;;
2172         esac
2173 done
2174
2175 exit 0