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