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