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