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