Imported Debian patch 2.3.1-78
[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                 major=`Major mouse 10` || continue
1120                 makedev pmu       c $major 154 $mouse
1121                 ;;
1122         thinkpad)
1123                 major=`Major mouse 10` || continue
1124                 mkdir -p thinkpad
1125                 makedev thinkpad/thinkpad c $major 170 $mouse
1126                 ;;
1127         rtc)
1128                 major=`Major mouse 10` || continue
1129                 makedev rtc       c $major 135 $mouse
1130                 ;;
1131         efirtc)
1132                 major=`Major mouse 10` || continue
1133                 makedev efirtc    c $major 136 $mouse
1134                 ;;
1135         mwave)
1136                 makedev mwave     c 10 219 $mouse
1137                 ;;
1138         systrace)
1139                 makedev systrace  c 10 226 $private
1140                 ;;
1141         uinput)
1142                 makedev input/uinput  c 10 223 $mouse
1143                 ;;
1144         js)
1145                 major=`Major Joystick 13` || continue
1146                 for unit in 0 1 2 3
1147                 do
1148                         makedev js$unit c $major $unit $readable
1149                         makedev djs$unit c $major `math $unit + 128` $readable
1150                 done
1151                 ;;
1152         fd[0-7])
1153                 major=`Major fd 2` || continue
1154                 base=`suffix $arg fd`
1155                 if [ $base -ge 4 ]
1156                 then
1157                         base=`math $base + 124`
1158                 fi
1159                 makedev ${arg} b $major $base $floppy
1160                 makedev ${arg}d360  b $major `math $base +  4` $floppy
1161                 makedev ${arg}h1200 b $major `math $base +  8` $floppy
1162                 makedev ${arg}u360  b $major `math $base + 12` $floppy
1163                 makedev ${arg}u720  b $major `math $base + 16` $floppy
1164                 makedev ${arg}h360  b $major `math $base + 20` $floppy
1165                 makedev ${arg}h720  b $major `math $base + 24` $floppy
1166                 makedev ${arg}u1440 b $major `math $base + 28` $floppy
1167                 makedev ${arg}u2880 b $major `math $base + 32` $floppy
1168                 makedev ${arg}CompaQ b $major `math $base + 36` $floppy
1169
1170                 makedev ${arg}h1440 b $major `math $base + 40` $floppy
1171                 makedev ${arg}u1680 b $major `math $base + 44` $floppy
1172                 makedev ${arg}h410  b $major `math $base + 48` $floppy
1173                 makedev ${arg}u820  b $major `math $base + 52` $floppy
1174                 makedev ${arg}h1476 b $major `math $base + 56` $floppy
1175                 makedev ${arg}u1722 b $major `math $base + 60` $floppy
1176                 makedev ${arg}h420  b $major `math $base + 64` $floppy
1177                 makedev ${arg}u830  b $major `math $base + 68` $floppy
1178                 makedev ${arg}h1494 b $major `math $base + 72` $floppy
1179                 makedev ${arg}u1743 b $major `math $base + 76` $floppy
1180                 makedev ${arg}h880  b $major `math $base + 80` $floppy
1181                 makedev ${arg}u1040 b $major `math $base + 84` $floppy
1182                 makedev ${arg}u1120 b $major `math $base + 88` $floppy
1183                 makedev ${arg}h1600 b $major `math $base + 92` $floppy
1184                 makedev ${arg}u1760 b $major `math $base + 96` $floppy
1185                 makedev ${arg}u1920 b $major `math $base + 100` $floppy
1186                 makedev ${arg}u3200 b $major `math $base + 104` $floppy
1187                 makedev ${arg}u3520 b $major `math $base + 108` $floppy
1188                 makedev ${arg}u3840 b $major `math $base + 112` $floppy
1189                 makedev ${arg}u1840 b $major `math $base + 116` $floppy
1190                 makedev ${arg}u800  b $major `math $base + 120` $floppy
1191                 makedev ${arg}u1600 b $major `math $base + 124` $floppy
1192                 ;;
1193         ed[a-b])
1194                 major=`Major ed 36` || continue
1195                 unit=`suffix $arg ed`
1196                 base=`index ab $unit`
1197                 base=`math $base \* 64`
1198                 makedev ed$unit b $major $base $disk
1199                 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
1200                 do
1201                         makedev ed$unit$part b $major `math $base + $part` $disk
1202                 done
1203                 ;;
1204         hd[a-b])
1205                 major=`Major ide0` || major=`Major hd 3` || continue
1206                 unit=`suffix $arg hd`
1207                 base=`index ab $unit`
1208                 base=`math $base \* 64`
1209                 makedev hd$unit b $major $base $disk
1210                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1211                 do
1212                         makedev hd$unit$part b $major `math $base + $part` $disk
1213                 done
1214                 ;;
1215         hd[c-d])
1216                 major=`Major ide1 22` || continue
1217                 unit=`suffix $arg hd`
1218                 base=`index cd $unit`
1219                 base=`math $base \* 64`
1220                 makedev hd$unit b $major $base $disk
1221                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1222                 do
1223                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1224                 done
1225                 ;;
1226         hd[e-f])
1227                 major=`Major ide2 33` || continue
1228                 unit=`suffix $arg hd`
1229                 base=`index ef $unit`
1230                 base=`math $base \* 64`
1231                 makedev hd$unit b $major $base $disk
1232                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1233                 do
1234                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1235                 done
1236                 ;;
1237         hd[g-h])
1238                 major=`Major ide3 34` || continue
1239                 unit=`suffix $arg hd`
1240                 base=`index gh $unit`
1241                 base=`math $base \* 64`
1242                 makedev hd$unit b $major $base $disk
1243                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1244                 do
1245                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1246                 done
1247                 ;;
1248         hd[i-j])
1249                 major=`Major ide4 56` || continue
1250                 unit=`suffix $arg hd`
1251                 base=`index ij $unit`
1252                 base=`math $base \* 64`
1253                 makedev hd$unit b $major $base $disk
1254                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1255                 do
1256                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1257                 done
1258                 ;;
1259         hd[k-l])
1260                 major=`Major ide5 57` || continue
1261                 unit=`suffix $arg hd`
1262                 base=`index kl $unit`
1263                 base=`math $base \* 64`
1264                 makedev hd$unit b $major $base $disk
1265                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1266                 do
1267                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1268                 done
1269                 ;;
1270         hd[m-n])
1271                 major=`Major ide6 88` || continue
1272                 unit=`suffix $arg hd`
1273                 base=`index mn $unit`
1274                 base=`math $base \* 64`
1275                 makedev hd$unit b $major $base $disk
1276                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1277                 do
1278                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1279                 done
1280                 ;;
1281         hd[o-p])
1282                 major=`Major ide7 89` || continue
1283                 unit=`suffix $arg hd`
1284                 base=`index op $unit`
1285                 base=`math $base \* 64`
1286                 makedev hd$unit b $major $base $disk
1287                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1288                 do
1289                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1290                 done
1291                 ;;
1292         hd[q-r])
1293                 major=`Major ide8 90` || continue
1294                 unit=`suffix $arg hd`
1295                 base=`index qr $unit`
1296                 base=`math $base \* 64`
1297                 makedev hd$unit b $major $base $disk
1298                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1299                 do
1300                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1301                 done
1302                 ;;
1303         hd[s-t])
1304                 major=`Major ide9 91` || continue
1305                 unit=`suffix $arg hd`
1306                 base=`index st $unit`
1307                 base=`math $base \* 64`
1308                 makedev hd$unit b $major $base $disk
1309                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1310                 do
1311                         makedev hd$unit$part b $major $(( $base + $part )) $disk
1312                 done
1313                 ;;
1314         ub|uba) 
1315                 major=180
1316                 makedev uba b $major 0 $disk
1317                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1318                 do
1319                         makedev uba$part b $major $part $disk
1320                 done
1321                 ;;
1322         ht0)
1323                 major=`Major ht0 37` || continue
1324                 # Only one IDE tape drive is currently supported; ht0.
1325                 makedev ht0 c $major 0 $tape
1326                 makedev nht0 c $major 128 $tape
1327                 ;;
1328         pt)
1329                 major=`Major pt 96` || continue
1330                 for i in 0 1 2 3
1331                 do
1332                         makedev pt$i c $major $i $tape
1333                         makedev npt$i c $major `math $i + 128` $tape
1334                 done
1335                 ;;
1336         xd[a-d])
1337                 major=`Major xd 13` || continue
1338                 unit=`suffix $arg xd`
1339                 base=`index abcd $unit`
1340                 base=`math $base \* 64`
1341                 makedev xd$unit b $major $base $disk
1342                 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
1343                 do
1344                         makedev xd$unit$part b $major $(( $base + $part )) $disk
1345                 done
1346                 ;;
1347         sd[a-z])
1348                 major=`Major sd 8` || continue
1349                 unit=`suffix $arg sd`
1350                 base=`index abcdefghijklmnopqrstuvwxyz $unit`
1351                 base=$(( $base * 16 ))
1352                 if [ $base -lt 256 ]; then
1353                         major=8
1354                 else
1355                         major=65
1356                         base=$(( $base - 256 ))
1357                 fi
1358                 makedev sd$unit b $major $base $disk
1359                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1360                 do
1361                         minor=$(( $base + $part ))
1362                         makedev sd$unit$part b $major $minor $disk
1363                 done
1364                 ;;
1365         sd[a-d][a-z])
1366                 unit=`suffix $arg sd`
1367                 unitmaj=`first $unit`
1368                 unitmin=`second $unit`
1369                 basemaj=`index Xabcd $unitmaj`
1370                 basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
1371                 basemaj=`math $basemaj \* 416`
1372                 basemin=`math $basemin \* 16`
1373                 base=`math $basemaj + $basemin`
1374                 basemaj=`math $base / 256`
1375                 base=`math $base % 256`
1376                 major=`math basemaj \+ 64`
1377                 if [ $major -gt 71 ]; then
1378                         echo "$0: don't know how to make device \"$arg\"" >&2
1379                         exit 0
1380                 fi
1381                 makedev sd$unit b $major $base $disk
1382                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1383                 do
1384                         minor=$(( $base + $part ))
1385                         makedev sd$unit$part b $major $minor $disk
1386                 done
1387                 ;;
1388         i2o.hd[a-z])
1389                 [ -d i2o ] || {
1390                         mkdir i2o
1391                         chown root:root i2o
1392                         chmod 755 i2o
1393                         [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
1394                 }
1395                 unit=`suffix $arg i2o.hd`
1396                 base=`index abcdefghijklmnopqrstuvwxyz $unit`
1397                 base=$(( $base * 16 ))
1398                 if [ $base -lt 256 ]; then
1399                         major=80
1400                 else
1401                         major=81
1402                         base=$(( $base - 256 ))
1403                 fi
1404                 makedev i2o/hd$unit b $major $base $disk
1405                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1406                 do
1407                         minor=$(( $base + $part ))
1408                         makedev i2o/hd$unit$part b $major $minor $disk
1409                 done
1410                 ;;
1411         i2o.hd[a-d][a-z])
1412                 [ -d i2o ] || {
1413                         mkdir i2o
1414                         chown root:root i2o
1415                         chmod 755 i2o
1416                         [ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
1417                 }
1418                 unit=`suffix $arg i2o.hd`
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 \+ 80`
1429                 if [ $major -gt 87 ]; then
1430                         echo "$0: don't know how to make device \"$arg\"" >&2
1431                         exit 0
1432                 fi
1433                 makedev i2o/hd$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 i2o/hd$unit$part b $major $minor $disk
1438                 done
1439                 ;;
1440         dasd[a-z])
1441                 major=`Major dasd 94` || continue
1442                 unit=`suffix $arg dasd`
1443                 base=`index abcdefghijklmnopqrstuvwxyz $unit`
1444                 base=$(( $base * 4 ))
1445                 if [ $base -lt 256 ]; then
1446                         major=94
1447                 else
1448                         major=65
1449                         base=$(( $base - 256 ))
1450                 fi
1451                 makedev dasd$unit b $major $base $disk
1452                 for part in 1 2 3
1453                 do
1454                         minor=$(( $base + $part ))
1455                         makedev dasd$unit$part b $major $minor $disk
1456                 done
1457                 ;;
1458         ad[a-p])
1459                 major=`Major ad 28` || continue
1460                 unit=`suffix $arg ad`
1461                 base=`index abcdefghijklmnop $unit`
1462                 base=`math $base \* 16`
1463                 makedev ad$unit b $major $base $disk
1464                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1465                 do
1466                         minor=$(( $base + $part ))
1467                         makedev ad$unit$part b $major $minor $disk
1468                 done
1469                 ;;
1470         dac960)
1471                 for ctr in 0 1 2 3 4 5 6 7
1472                 do
1473                         $0 $opts dac960.$ctr
1474                 done
1475                 makedev dac960_gam c 10 252 $disk
1476                 ;;
1477         dac960.[0-7])
1478                 [ -d rd ] || {
1479                         mkdir rd
1480                         chown root:root rd
1481                         chmod 755 rd
1482                 }
1483                 unit=`suffix $arg dac960.`
1484                     major=`math 48 + $unit`
1485                     minor=0
1486                     for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
1487                             17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
1488                     do
1489                         makedev rd/c${unit}d${ld} b $major $minor $disk
1490                         minor=`math $minor + 1`
1491                         for part in 1 2 3 4 5 6 7
1492                         do
1493                             makedev rd/c${unit}d${ld}p$part b $major $minor $disk
1494                             minor=`math $minor + 1`
1495                         done
1496                     done
1497                 ;;
1498         dpti)
1499                 major=151
1500                 for ld in 1 2 3 4 5 6 7
1501                 do
1502                    minor=`math $ld -1`
1503                    makedev dpti${ld} c $major $minor $disk
1504                 done
1505                 ;;
1506         ataraid)
1507                 for ctr in 0 1 2 # 3 4 5 6 7
1508                 do
1509                         $0 $opts ataraid.$ctr
1510                 done
1511                 ;;
1512         ataraid.[0-7])
1513                 [ -d ataraid ] || {
1514                         mkdir ataraid
1515                         chown root:root ataraid
1516                         chmod 755 ataraid
1517                 }
1518                 unit=`suffix $arg ataraid.`
1519                 major=114
1520                 minor=`math $unit \* 16`
1521                 makedev ataraid/d${unit} b $major $minor $disk
1522                 for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1523                 do
1524                    minor=`math $minor + 1`
1525                    makedev ataraid/d${unit}p$part b $major $minor $disk
1526                 done
1527                 ;;
1528         ida)
1529                 for ctr in 0 1 2 # 3 4 5 6 7
1530                 do
1531                         $0 $opts ida.$ctr
1532                 done
1533                 ;;
1534         ida.[0-7])
1535                 [ -d ida ] || {
1536                         mkdir ida
1537                         chown root:root ida
1538                         chmod 755 ida
1539                 }
1540                 unit=`suffix $arg ida.`
1541                 major=`math 72 + $unit`
1542                 minor=0
1543                 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1544                 do
1545                     makedev ida/c${unit}d${ld} b $major $minor $disk
1546                     minor=`math $minor + 1`
1547                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1548                     do
1549                         makedev ida/c${unit}d${ld}p$part b $major $minor $disk
1550                         minor=`math $minor + 1`
1551                     done
1552                 done
1553                 ;;
1554         cciss)
1555                 for ctr in 0 1 2 # 3 4 5 6 7
1556                 do
1557                         $0 $opts cciss.$ctr
1558                 done
1559                 ;;
1560         cciss.[0-7])
1561                 [ -d cciss ] || {
1562                         mkdir cciss
1563                         chown root:root cciss
1564                         chmod 755 cciss
1565                 }
1566                 unit=`suffix $arg cciss.`
1567                 major=`math 104 + $unit`
1568                 minor=0
1569                 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1570                 do
1571                     makedev cciss/c${unit}d${ld} b $major $minor $disk
1572                     minor=`math $minor + 1`
1573                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1574                     do
1575                         makedev cciss/c${unit}d${ld}p$part b $major $minor $disk
1576                         minor=`math $minor + 1`
1577                     done
1578                 done
1579                 ;;
1580         rom)
1581                 major=`Major rom 31`
1582                 for i in 0 1 2 3 4 5 6 7
1583                 do
1584                         makedev rom$i    b $major $i $disk
1585                         makedev rrom$i   b $major `math $i +8` $disk
1586                         makedev flash$i  b $major `math $i +16` $disk
1587                         makedev rflash$i b $major `math $i +24` $disk
1588                 done
1589                 ;;
1590         nb[0-7])
1591                 major=`Major nbd 43` || continue
1592                 minor=`suffix $arg nb`
1593                 makedev nb$minor b $major $minor $disk
1594                 ;;
1595         loop)
1596                 for part in 0 1 2 3 4 5 6 7
1597                 do
1598                         makedev loop$part b 7 $part $disk
1599                 done
1600                 ;;
1601         loop[0-9]|loop[1-9][0-9]|loop1[0-9][0-9]|loop2[0-4][0-9]|loop25[0-5])
1602                 minor=`suffix $arg loop`
1603                 makedev loop$minor b 7 $minor $disk
1604                 ;;
1605         md)
1606                 major=`Major md 9` || continue
1607                 for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1608                 do
1609                         makedev md$part b $major $part $disk
1610                 done
1611                 ;;
1612         st[0-7])
1613                 major=`Major st 9`
1614                 unit=`suffix $arg st`
1615                 makedev st${unit}   c $major $unit $tape
1616                 makedev nst${unit}  c $major `math 128 + $unit` $tape
1617
1618                 makedev st${unit}l  c $major `math 32 + $unit` $tape
1619                 makedev nst${unit}l c $major `math 160 + $unit` $tape
1620
1621                 makedev st${unit}m  c $major `math 64 + $unit` $tape
1622                 makedev nst${unit}m c $major `math 192 + $unit` $tape
1623
1624                 makedev st${unit}a  c $major `math 96 + $unit` $tape
1625                 makedev nst${unit}a c $major `math 224 + $unit` $tape
1626                 ;;
1627         qic)
1628                 major=`Major tpqic02 12`
1629                 makedev ntpqic11   c $major   2 $tape
1630                 makedev tpqic11    c $major   3 $tape
1631                 makedev ntpqic24   c $major   4 $tape
1632                 makedev tpqic24    c $major   5 $tape
1633                 makedev ntpqic120  c $major   6 $tape
1634                 makedev tpqic120   c $major   7 $tape
1635                 makedev ntpqic150  c $major   8 $tape
1636                 makedev tpqic150   c $major   9 $tape
1637                 makedev rmt8       c $major   6 $tape
1638                 makedev rmt16      c $major   8 $tape
1639                 makedev tape-d     c $major 136 $tape
1640                 makedev tape-reset c $major 255 $tape
1641                 $0 $opts qft
1642                 ;;
1643         ftape)
1644                 major=`Major qft 27` || continue
1645                 for unit in 0 1 2 3
1646                 do
1647                         makedev qft$unit     c $major $unit $tape
1648                         makedev nqft$unit    c $major `math $unit + 4` $tape
1649                         makedev zqft$unit    c $major `math $unit + 16` $tape
1650                         makedev nzqft$unit   c $major `math $unit + 20` $tape
1651                         makedev rawqft$unit  c $major `math $unit + 32` $tape
1652                         makedev nrawqft$unit c $major `math $unit + 36` $tape
1653                 done
1654                 symlink ftape qft0
1655                 symlink nftape nqft0
1656                 ;;
1657         sr|scd|scd-all)
1658                 major=`Major sr 11` || continue
1659                 for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1660                 do
1661                         makedev scd$unit b $major $unit $cdrom
1662                         symlink sr$unit scd$unit
1663                 done
1664                 ;;
1665         pktcdvd)
1666                 major=97
1667                 for unit in 0 1 2 3
1668                 do
1669                         makedev pktcdvd$unit b $major $unit $cdrom
1670                 done
1671                 ;;
1672         cfs0)
1673                 makedev cfs0 c 67 0 $coda
1674                 ;;
1675         scd[0-9]|scd[0-1][0-9])
1676                 major=`Major sr 11` || continue
1677                 unit=`suffix $arg scd`
1678                 makedev scd$unit b $major $unit $cdrom
1679                 symlink sr$unit scd$unit 
1680                 ;;
1681         ttyI[0-9]|ttyI[1-5][0-9]|ttyI[6][0-3])
1682                 major=43
1683                 unit=`suffix $arg ttyI`
1684                 makedev ttyI$unit c $major $unit $dialout
1685                 ;;
1686         ppp)
1687                 major=108
1688                 makedev ppp c $major 0 $dip
1689                 ;;
1690         ippp[0-9]|ippp[1-5][0-9]|ippp[6][0-3])
1691                 major=45
1692                 unit=`suffix $arg ippp`
1693                 minor=`math $unit + 128`
1694                 makedev ippp$unit c $major $minor $dialout
1695                 ;;
1696         isdn[0-9]|isdn[1-5][0-9]|isdn[6][0-3])
1697                 major=45
1698                 unit=`suffix $arg isdn`
1699                 minor=`math $unit + 0`
1700                 makedev isdn$unit c $major $minor $dialout
1701                 ;;
1702         isdnctrl[0-9]|isdnctrl[1-5][0-9]|isdnctrl[6][0-3])
1703                 major=45
1704                 unit=`suffix $arg isdnctrl`
1705                 minor=`math $unit + 64`
1706                 makedev isdnctrl$unit c $major $minor $dialout
1707                 ;;
1708         isdninfo)
1709                 makedev isdninfo c 45 255 $private
1710                 ;;
1711         isdn-tty)
1712                 major=43
1713                 for unit in 0 1 2 3 4 5 6 7
1714                 do
1715                         makedev ttyI$unit c $major $unit $dialout
1716                 done
1717                 ;;
1718         isdn-ippp)
1719                 major=45
1720                 for unit in 0 1 2 3 4 5 6 7
1721                 do
1722                         makedev ippp$unit c $major `math $unit + 128` $dialout
1723                 done
1724                 ;;
1725         isdn-io)
1726                 for unit in 0 1 2 3 4 5 6 7
1727                 do
1728                         makedev isdn$unit c 45 $unit $dialout
1729                         makedev isdnctrl$unit c 45 `math $unit + 64` $dialout
1730                         makedev ippp$unit c 45 `math $unit + 128` $dialout
1731                 done
1732                 makedev isdninfo c 45 255 $dialout
1733                 ;;
1734         sonycd)
1735                 major=`Major sonycd 15` || continue
1736                 makedev $arg b $major 0 $cdrom
1737                 ;;
1738         mcd)
1739                 major=`Major mcd 23` || continue
1740                 makedev $arg b $major 0 $cdrom
1741                 ;;
1742         mcdx|mcdx[0-4])
1743                 major=`Major $arg 20` || continue
1744                 for unit in 0 1 2 3 4
1745                 do
1746                         makedev mcdx$unit b $major $unit $cdrom
1747                 done
1748                 test -r mcdx || symlink mcdx mcdx0
1749                 ;;
1750         cdu535)
1751                 makedev $arg b 24 0 $cdrom
1752                 ;;
1753         lmscd)
1754                 makedev $arg b 24 0 $cdrom
1755                 ;;
1756         sbpcd|sbpcd[123])
1757                 major=`Major $arg 25` || continue
1758                 base=`suffix ${arg}0 sbpcd`
1759                 for minor in 0 1 2 3
1760                 do
1761                         # XXX
1762                         unit=$(substr 0123456789abcdef $(( $base * 4 + $minor + 1 )) )
1763                         makedev sbpcd$unit b $major $minor $cdrom
1764                 done
1765                 [ $arg = sbpcd ] && symlink $arg ${arg}0
1766                 ;;
1767         aztcd)
1768                 major=`Major $arg 29` || continue
1769                 makedev ${arg}0 b $major 0 $cdrom
1770                 ;;
1771         cm206cd)
1772                 major=`Major $arg 30` || continue
1773                 makedev ${arg}0 b $major 0 $cdrom
1774                 ;;
1775         gscd)
1776                 major=`Major $arg 16` || continue
1777                 makedev ${arg}0 b $major 0 $cdrom
1778                 ;;
1779         pcd)
1780                 for unit in 0 1 2 3 
1781                 do
1782                         makedev pcd$unit b 46 $unit $cdrom
1783                 done
1784                 ;;
1785         bpcd)
1786                 makedev $arg b 41 0 $cdrom
1787                 ;;
1788         optcd)
1789                 makedev $arg b 17 0 $cdrom
1790                 ;;
1791         sjcd)
1792                 makedev $arg b 18 0 $cdrom
1793                 ;;
1794         cfs|coda)
1795                 makedev cfs0 c 67 0 $private
1796                 ;;
1797         xfs|nnpfs|arla)
1798                 makedev xfs0 c 103 0 $private
1799                 makedev nnpfs0 c 103 0 $private
1800                 ;;
1801         logiscan)
1802                 major=`Major logiscan` || continue
1803                 makedev $arg c $major 0 $scanner
1804                 ;;
1805         toshiba)
1806                 major=`Major $arg 10` || continue
1807                 makedev $arg c $major 181 root root 0666
1808                 ;;
1809         m105scan)
1810                 major=`Major m105` || continue
1811                 makedev $arg c $major 0 $scanner
1812                 ;;
1813         ac4096)
1814                 major=`Major ac4096` || continue
1815                 makedev $arg c $major 0 $scanner
1816                 ;;
1817         audio)
1818                 major=`Major sound 14`
1819                 makedev mixer      c $major  0 $audio
1820                 makedev mixer1     c $major 16 $audio
1821                 makedev mixer2     c $major 32 $audio
1822                 makedev mixer3     c $major 48 $audio
1823                 makedev sequencer  c $major  1 $audio
1824                 makedev midi00     c $major  2 $audio
1825                 makedev midi01     c $major 18 $audio
1826                 makedev midi02     c $major 34 $audio
1827                 makedev midi03     c $major 50 $audio
1828                 makedev dsp        c $major  3 $audio
1829                 makedev dsp1       c $major 19 $audio
1830                 makedev dsp2       c $major 35 $audio
1831                 makedev dsp3       c $major 51 $audio
1832                 makedev audio      c $major  4 $audio
1833                 makedev audio1     c $major 20 $audio
1834                 makedev audio2     c $major 36 $audio
1835                 makedev audio3     c $major 52 $audio
1836                 makedev sndstat    c $major  6 $audio
1837                 makedev audioctl   c $major  7 $audio
1838                 major=31
1839                 makedev mpu401data c $major 0  $audio
1840                 makedev mpu401stat c $major 1  $audio
1841                 major=35
1842                 for i in 0 1 2 3
1843                 do
1844                         makedev midi$i  c $major $i $audio
1845                         makedev rmidi$i c $major `math $i + 64` $audio
1846                         makedev smpte$i c $major `math $i + 128` $audio
1847                 done
1848                 ;;
1849         pcaudio)
1850                 major=`Major pcsp 13` || continue
1851                 makedev pcmixer c $major 0 $audio
1852                 makedev pcsp    c $major 3 $audio
1853                 makedev pcaudio c $major 4 $audio
1854                 ;;
1855         video|video4linux|v4l|radio)
1856                 # video4linux api includes radio, teletext, etc.
1857                 major=`Major video 81` || continue
1858                 minor=0
1859                 until [ $minor -gt 63 ]
1860                 do
1861                         makedev video$minor c $major $minor $video
1862                         makedev radio$minor c $major `math $minor + 64` $video
1863                         minor=`math $minor + 1`
1864                 done
1865                 symlink radio radio0
1866                 minor=0
1867                 until [ $minor -gt 31 ]
1868                 do
1869                         makedev vtx$minor c $major `math $minor + 192` $video
1870                         makedev vbi$minor c $major `math $minor + 224` $video
1871                         minor=`math $minor + 1`
1872                 done
1873                 symlink video video0
1874                 symlink vbi vbi0
1875                 major=82
1876                 minor=0
1877                 until [ $minor -gt 1 ]
1878                 do
1879                         makedev winradio$minor c $major $minor $video
1880                         minor=`math $minor + 1`
1881                 done
1882                 major=83
1883                 makedev vtx     c $major 0 $video
1884                 makedev vttuner c $major 16 $video
1885                 ;;
1886         i2c)
1887                 # making it possible to create an arbitrary number of i2c
1888                 # devices might be good, but 8 should suffice for now
1889                 major=`Major i2c 89` || continue
1890                 minor=0
1891                 until [ $minor -gt 7 ] 
1892                 do
1893                         makedev i2c-$minor c $major $minor $private
1894                         minor=`math $minor + 1`
1895                 done
1896                 ;;
1897         tlk)
1898                 major=102
1899                 minor=0
1900                 until [ $minor -gt 3 ] # tell me if 3 is wrong...
1901                 do
1902                         makedev tlk$minor c $major $minor $video
1903                         minor=`math $minor + 1`
1904                 done
1905                 ;;
1906         srnd)
1907                 makedev srnd0 c 110 0 $video
1908                 makedev srnd1 c 110 1 $video
1909                 ;;
1910         fgrab)
1911                 makedev mmetfgrab c 40 0 $video
1912                 makedev wvisfgrab c 26 0 $video
1913                 for i in 0 1 # more?
1914                 do
1915                         makedev iscc$i    c 93 $i $video
1916                         makedev isccctl$i c 93 `math $i + 128` $video
1917                 done
1918                 for i in 0 1 # more?
1919                 do
1920                         makedev dcxx$i c 94 $i $video
1921                 done
1922                 ;;
1923         sg|sg-all)
1924                 major=`Major sg 21`
1925                 for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1926                 do
1927                         makedev sg$unit c $major $unit $scsi
1928                 done
1929                 ;;
1930         pg)
1931                 major=`Major pg 97`
1932                 for unit in 0 1 2 3
1933                 do
1934                         makedev pg$unit c $major $unit $scsi
1935                 done
1936                 ;;
1937         fd)
1938                 # not really devices, we use the /proc filesystem
1939                 symlink fd     $procfs/self/fd
1940                 symlink stdin  fd/0
1941                 symlink stdout fd/1
1942                 symlink stderr fd/2
1943                 ;;
1944         ibcs2)
1945                 major=`Major ibcs2 30` || continue
1946                 makedev socksys c $major 0 $ibcs2
1947                 symlink nfsd socksys
1948                 makedev spx     c $major 1 $ibcs2
1949                 symlink X0R null
1950                 ;;
1951         netlink)
1952                 major=36
1953                 makedev route c $major 0 $private
1954                 makedev skip  c $major 1 $private
1955                 ;;
1956         enskip)
1957                 major=64
1958                 makedev enskip c $major 0 $private
1959                 ;;
1960         ipfilt*)
1961                 major=95
1962                 makedev ipl     c $major 0 $private
1963                 makedev ipnat   c $major 1 $private
1964                 makedev ipstate c $major 2 $private
1965                 makedev ipauth  c $major 3 $private
1966                 ;;
1967         qng)
1968                 makedev qng c 77 0 $private
1969                 ;;
1970         apm)
1971                 major=`Major mouse 10` || continue
1972                 makedev apm_bios  c $major 134 $mouse
1973                 ;;
1974         dcf)
1975                 major=`Major dcf` || continue
1976                 makedev $arg c $major 0 $system
1977                 ;;
1978         helloworld)
1979                 major=`Major hw` || continue
1980                 makedev helloworld c $major 0 $public
1981                 ;;
1982         ipsec)
1983                 # For the Free S/WAN (http://www.xs4all.nl/~freeswan/)
1984                 # implementation of IPSEC
1985                 makedev ipsec c 36 10 $ipsec
1986                 ;;
1987         comedi)
1988                 major=98
1989                 for minor in 0 1 2 3
1990                 do
1991                         makedev comedi$minor c $major $minor $public
1992                 done
1993                 ;;
1994         tilp)
1995                 for i in `seq 0 7`
1996                 do
1997                         makedev tipar$i c 115 $i $printer
1998                         makedev tiser$i c 115 `math 8 + $i` $dialout
1999                 done
2000                 for i in `seq 0 31`
2001                 do
2002                         makedev tiusb$i c 115 `math 16 + $i` $dialout
2003                 done
2004                 ;;
2005         dvb)
2006                 # check if kernel-version is >= 2.6.8, if yes, create dvb-devices with
2007                 # major-number 212, in the other case 250
2008                 
2009                 kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
2010                 kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
2011                 kern_rev3=`uname -r | sed -e 's@^[^.]*\.[^.]*\.\([^.][0-9]*\).*@\1@'`
2012       
2013                 dvb_major=250
2014
2015                 if [ $kern_rev1 -gt 2 ] || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -gt 6 ]) \
2016                         || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -eq 6 ] && [ $kern_rev3 -ge 8 ])
2017                 then 
2018                         dvb_major=212 
2019                 fi
2020
2021                 mkdir -p dvb
2022                 for i in 0 1 2 3
2023                 do
2024                         mkdir -p dvb/adapter$i
2025                         makedev dvb/adapter$i/video0    c $dvb_major `math 64 \* $i + 0` $video
2026                         makedev dvb/adapter$i/audio0    c $dvb_major `math 64 \* $i + 1` $video
2027                         makedev dvb/adapter$i/frontend0 c $dvb_major `math 64 \* $i + 3` $video
2028                         makedev dvb/adapter$i/demux0    c $dvb_major `math 64 \* $i + 4` $video
2029                         makedev dvb/adapter$i/dvr0      c $dvb_major `math 64 \* $i + 5` $video
2030                         makedev dvb/adapter$i/ca0       c $dvb_major `math 64 \* $i + 6` $video
2031                         makedev dvb/adapter$i/net0      c $dvb_major `math 64 \* $i + 7` $video
2032                         makedev dvb/adapter$i/osd0      c $dvb_major `math 64 \* $i + 8` $video
2033                 done
2034                 ;;
2035         usb)
2036                 mkdir -p usb
2037                 major=180
2038                 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2039                 do
2040                         makedev usb/lp$i c $major $i $printer
2041                         makedev usb/mouse$i c $major `math $i + 16` $mouse
2042                         makedev usb/ez$i c $major `math $i + 32` $system
2043                         makedev usb/scanner$i c $major `math $i + 48` $scanner
2044                         makedev usb/hiddev$i c $major `math $i + 96` $system
2045                         makedev ttyACM$i c 166 $i $dialout
2046                         makedev ttyUSB$i c 188 $i $dialout
2047                 done
2048                 makedev usb/rio500 c $major 64 $audio
2049                 makedev usb/usblcd c $major 65 $audio
2050                 makedev usb/cpad0 c $major 66 $audio
2051                 ;;
2052         bluetooth)
2053                 major=216
2054                 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
2055                         16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
2056                 do
2057                         makedev rfcomm$i c $major $i $dialout
2058                 done
2059                 makedev vhci c 10 250 $dialout
2060                 for i in 0 1 2 3; do
2061                         makedev ttyUB$i c 216 $i $dialout
2062                         makedev ccub$i c 217 $i $dialout
2063                 done
2064                 ;;
2065         paride)
2066                 major=45
2067                 for unit in a b c d
2068                 do
2069                     base=`index abcd $unit`
2070                     base=`math $base \* 16`
2071                     makedev pd$unit b $major $base $disk
2072                     for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2073                     do
2074                         makedev pd$unit$part b $major $(( $base + $part )) $disk
2075                     done
2076                 done
2077                 for i in 0 1 2 3
2078                 do
2079                     makedev pcd$i b 46 $i $cdrom
2080                     makedev pf$i  b 47 $i $floppy
2081                 done
2082                 ;;
2083         update)
2084                 devices=
2085                 if [ ! -f $procfs/devices ]
2086                 then
2087                         echo "$0: warning: can't read $procfs/devices" >&2
2088                 else
2089                         exec 3<$procfs/devices
2090                         while read major device extra <&3
2091                         do
2092                                 device=`echo $device | sed 's#/.*##'`
2093                                 case "$major" in
2094                                         Character|Block|'')
2095                                                 ;;
2096                                         *)
2097                                                 eval "major_$device=$major"
2098                                                 devices="$devices $device"
2099                                                 ;;
2100                                 esac
2101                         done
2102                         exec 3<&-
2103                 fi
2104
2105                 if [ ! "$devices" ]
2106                 then
2107                         echo "$0: don't appear to have any devices" >&2
2108                         continue
2109                 fi
2110                 if [ "$opt_d" ]
2111                 then
2112                         echo "$0: can't delete an update" >&2
2113                         continue
2114                 fi
2115                 create=
2116                 delete=
2117                 devs="$devices"
2118                 if [ -f DEVICES ]
2119                 then
2120                         exec 3<DEVICES
2121                         while read device major <&3
2122                         do
2123                                 eval now=\$major_$device
2124                                 if [ "$now" = "" ]
2125                                 then
2126                                         delete="$delete `cvt $device`"
2127                                         continue
2128                                 elif [ "$now" != $major ]
2129                                 then
2130                                         create="$create "`cvt $device`
2131                                 fi
2132                                 devs=`strip " $devs " $device`
2133                         done
2134                         exec 3<&-
2135                 fi
2136                 create="$create "`cvt $devs`
2137                 [ "$delete" != "" ] && $0 $opts -d $delete
2138                 [ "$create" != " " ] && $0 $opts $create
2139                 [ "$opt_n" ] && continue
2140                 for device in $devices
2141                 do
2142                         if [ "`cvt $device`" ]
2143                         then
2144                             eval echo $device \$major_$device
2145                         fi
2146                 done > DEVICES
2147                 ;;
2148         *)
2149                 echo "$0: don't know how to make device \"$arg\"" >&2
2150                 exit 1
2151                 ;;
2152         esac
2153 done
2154
2155 exit 0