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