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