3 RCSID='$Id: MAKEDEV 2.3 1997/09/29 19:03:13 johnsonm Exp $'
5 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
7 # The devices fall into various classes. This section contains the mapping
8 # from a class name into a group name and permission.
9 # You will almost certainly need to edit the group name to match your
10 # system, and you may change the permissions to suit your preference. These
11 # lines _must_ be of the format "user group perm".
13 public=" root sys 666"
14 system=" root sys 660"
17 cons=" root tty 622" # 622 for console?
19 dialout=" root uucp 660"
21 printer=" root daemon 660"
22 floppy=" root floppy 660"
25 cdrom=" root disk 660"
29 scanner=" root sys 666"
33 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
47 -n) shift; opt_n=1; opt_v=1 ;;
49 -*) echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
60 opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
62 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
64 makedev () { # usage: makedev name [bcu] major minor owner group mode
68 else echo "create $1 $2 $3 $4 $5:$6 $7"
84 symlink () { # usage: symlink name target
88 else echo "create $1 -> $2"
91 [ ! "$opt_n" ] && rm -f $1 &&
92 [ ! "$opt_d" ] && ln -s $2 $1
95 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
97 # For bash and ksh, we can use faster builtin routines to do manipulation,
98 # otherwise (ash) fall back to slower method using `expr'.
99 # The extra level of indirection using `eval' is necessary a) for ksh, and
100 # b) to get past ash.
102 if [ "$RANDOM" != "$RANDOM" ]
107 index () { # index string c
115 eval echo "\${1% $2 *} \${1#* $2 }"
121 index () { # index string c
125 expr "$1" : "$2\(.*\)"
129 echo "`expr \"$1\" : \"\(.*\) $2 \"` `expr \"$1\" : \".* $2 \(.*\)\"`"
133 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
136 if [ ! -f $procfs/devices ]
138 echo "$0: warning: can't read $procfs/devices" >&2
140 exec 3<$procfs/devices
141 while read major device <&3
147 eval "major_$device=$major"
148 devices="$devices $device"
161 eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
169 mem|tty|ttyp|cua|cub) ;;
170 hd) (for d in a b c d e f g h ; do
174 ide0) echo hda hdb ;;
175 ide1) echo hdc hdd ;;
176 ide2) echo hde hdf ;;
177 ide3) echo hdg hdh ;;
190 logiscan) echo logiscan ;;
191 ac4096) echo ac4096 ;;
192 hw) echo helloworld ;;
193 sbpcd | sbpcd[123]) echo $1 ;;
195 apm_bios) echo apm ;;
198 pcmcia) ;; # taken care of by its own driver
199 ttyC) echo cyclades ;;
201 *) echo "$0: don't know what \"$1\" is" >&2 ;;
219 $0 $opts ttyS0 ttyS1 ttyS2 ttyS3
228 makedev mem c 1 1 $kmem
229 makedev kmem c 1 2 $kmem
230 makedev null c 1 3 $public
231 makedev port c 1 4 $kmem
232 makedev zero c 1 5 $public
233 symlink core $procfs/kcore
234 makedev full c 1 7 $public
236 makedev tty c 5 0 $tty
239 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
240 makedev ram$i b 1 $i $disk
245 major=`Major vcs` # not fatal
247 makedev tty0 c 4 0 $cons
249 [ "$major" ] && makedev vcs0 c $major 0 $vcs
250 [ "$major" ] && makedev vcsa c $major 128 $vcs
253 while [ $line -le $MAXVT -a $line -le 63 ]
255 makedev tty$line c 4 $line $tty
256 [ "$major" ] && makedev vcs$line c $major $line $vcs
257 [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs
258 line=`math $line + 1`
261 tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
262 line=`suffix $arg tty`
263 makedev tty$line c 4 $line $tty
265 ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
266 line=`suffix $arg ttyS`
267 minor=`math 64 + $line`
268 makedev ttyS$line c 4 $minor $tty
269 makedev cua$line c 5 $minor $dialout
272 bank=`suffix $arg pty`
273 base=`index pqrstuvwxyzabcde $bank`
274 base=`math $base \* 16`
275 for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
277 j=`index 0123456789abcdef $i`
278 makedev pty$bank$i c 2 `math $base + $j` $tty
279 makedev tty$bank$i c 3 `math $base + $j` $tty
284 for i in p q r s t u v w x y z a b c d e
286 ptysufs="$ptysufs pty$i"
291 major1=`Major ttyC` || continue
292 major2=`Major cub` || continue
293 for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
294 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
296 makedev ttyC$i c $major1 $i $tty
297 makedev cub$i c $major2 $i $dialout
301 major=`Major lp` || continue
302 makedev ${arg}0 c $major 0 $printer
303 makedev ${arg}1 c $major 1 $printer
304 makedev ${arg}2 c $major 2 $printer
307 major=`Major lp` || continue
308 makedev ${arg}0 c $major 0 $printer
309 makedev ${arg}1 c $major 1 $printer
310 makedev ${arg}2 c $major 2 $printer
313 major=`Major mouse 10` || continue
314 makedev logimouse c $major 0 $mouse
315 makedev psmouse c $major 1 $mouse
316 makedev msmouse c $major 2 $mouse
317 makedev atimouse c $major 3 $mouse
318 makedev jmouse c $major 4 $mouse
321 major=`Major Joystick` || continue
322 makedev js0 c $major 0 $mouse
323 makedev js1 c $major 1 $mouse
326 major=`Major fd 2` || continue
327 base=`suffix $arg fd`
330 base=`math $base + 124`
332 makedev ${arg} b $major $base $floppy
333 makedev ${arg}d360 b $major `math $base + 4` $floppy
334 makedev ${arg}h1200 b $major `math $base + 8` $floppy
335 makedev ${arg}D360 b $major `math $base + 12` $floppy
336 makedev ${arg}D720 b $major `math $base + 16` $floppy
337 makedev ${arg}h360 b $major `math $base + 20` $floppy
338 makedev ${arg}h720 b $major `math $base + 24` $floppy
339 makedev ${arg}H1440 b $major `math $base + 28` $floppy
340 makedev ${arg}E2880 b $major `math $base + 32` $floppy
341 makedev ${arg}CompaQ b $major `math $base + 36` $floppy
343 symlink ${arg}H360 ${arg}D360
344 symlink ${arg}H720 ${arg}D720
346 makedev ${arg}h1440 b $major `math $base + 40` $floppy
347 makedev ${arg}H1680 b $major `math $base + 44` $floppy
348 makedev ${arg}h410 b $major `math $base + 48` $floppy
349 makedev ${arg}H820 b $major `math $base + 52` $floppy
350 makedev ${arg}h1476 b $major `math $base + 56` $floppy
351 makedev ${arg}H1722 b $major `math $base + 60` $floppy
352 makedev ${arg}h420 b $major `math $base + 64` $floppy
353 makedev ${arg}H830 b $major `math $base + 68` $floppy
354 makedev ${arg}h1494 b $major `math $base + 72` $floppy
355 makedev ${arg}H1743 b $major `math $base + 76` $floppy
356 makedev ${arg}h880 b $major `math $base + 80` $floppy
357 makedev ${arg}D1040 b $major `math $base + 84` $floppy
358 makedev ${arg}D1120 b $major `math $base + 88` $floppy
359 makedev ${arg}h1600 b $major `math $base + 92` $floppy
360 makedev ${arg}H1760 b $major `math $base + 96` $floppy
361 makedev ${arg}H1920 b $major `math $base + 100` $floppy
362 makedev ${arg}E3200 b $major `math $base + 104` $floppy
363 makedev ${arg}E3520 b $major `math $base + 108` $floppy
364 makedev ${arg}E3840 b $major `math $base + 112` $floppy
365 makedev ${arg}H1840 b $major `math $base + 116` $floppy
366 makedev ${arg}D800 b $major `math $base + 120` $floppy
367 makedev ${arg}H1600 b $major `math $base + 124` $floppy
370 major=`Major ide0` || major=`Major hd 3` || continue
371 unit=`suffix $arg hd`
372 base=`index ab $unit`
373 base=`math $base \* 64`
374 makedev hd$unit b $major $base $disk
375 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
377 makedev hd$unit$part b $major `math $base + $part` $disk
381 major=`Major ide1 22` || continue
382 unit=`suffix $arg hd`
383 base=`index cd $unit`
384 base=`math $base \* 64`
385 makedev hd$unit b $major $base $disk
386 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
388 makedev hd$unit$part b $major `expr $base + $part` $disk
392 major=`Major ide2 33` || continue
393 unit=`suffix $arg hd`
394 base=`index ef $unit`
395 base=`math $base \* 64`
396 makedev hd$unit b $major $base $disk
397 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
399 makedev hd$unit$part b $major `expr $base + $part` $disk
403 major=`Major ide3 34` || continue
404 unit=`suffix $arg hd`
405 base=`index gh $unit`
406 base=`math $base \* 64`
407 makedev hd$unit b $major $base $disk
408 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
410 makedev hd$unit$part b $major `expr $base + $part` $disk
414 major=`Major ht0 37` || continue
415 # Only one IDE tape drive is currently supported; ht0.
416 makedev ht0 c $major 0 $tape
417 makedev ht0 c $major 0 $tape
418 makedev nht0 c $major 128 $tape
421 major=`Major xd 13` || continue
422 unit=`suffix $arg xd`
423 base=`index abcd $unit`
424 base=`math $base \* 64`
425 makedev xd$unit b $major $base $disk
426 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
428 makedev xd$unit$part b $major `expr $base + $part` $disk
432 major=`Major sd 8` || continue
433 unit=`suffix $arg sd`
434 base=`index abcdefgh $unit`
435 base=`math $base \* 16`
436 makedev sd$unit b $major $base $disk
437 for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15
439 minor=`expr $base + $part`
440 makedev sd$unit$part b $major $minor $disk
444 major=`Major loop` || continue
445 for part in 0 1 2 3 4 5 6 7
447 makedev loop$part b $major $part $disk
451 major=`Major md` || continue
454 makedev md$part b $major $part $disk
459 unit=`suffix $arg st`
460 makedev st$unit c $major $unit $tape
461 makedev nst$unit c $major `math 128 + $unit` $tape
464 major=`Major tpqic02 12`
465 makedev rmt8 c $major 6 $tape
466 makedev rmt16 c $major 8 $tape
467 makedev tape-d c $major 136 $tape
468 makedev tape-reset c $major 255 $tape
471 major=`Major mt 27` || continue
474 makedev rft$unit c $major $unit $tape
475 makedev nrft$unit c $major `math $unit + 4` $tape
481 major=`Major sr 11` || continue
482 unit=`suffix $arg scd`
483 makedev scd$unit b $major $unit $cdrom
486 major=`Major cdu31a` || continue
487 makedev $arg b $major 0 $cdrom
490 major=`Major mcd 23` || continue
491 makedev $arg b $major 0 $cdrom
494 major=`Major mcdx 20` || continue
495 makedev $arg b $major 0 $cdrom
498 makedev $arg b 24 0 $cdrom
501 makedev $arg b 24 0 $cdrom
504 major=`Major $arg` || continue
505 base=`suffix ${arg}0 sbpcd`
506 # base=`expr ${arg}0 : "sbpcd\(.\)"`
510 unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1`
511 makedev sbpcd$unit b $major $minor $cdrom
513 [ $arg = sbpcd ] && symlink $arg ${arg}0
516 major=`Major $arg` || continue
517 makedev ${arg}0 b $major 0 $cdrom
520 makedev $arg b 41 0 $cdrom
523 major=`Major logiscan` || continue
524 makedev $arg c $major 0 $scanner
527 major=`Major m105` || continue
528 makedev $arg c $major 0 $scanner
531 major=`Major ac4096` || continue
532 makedev $arg c $major 0 $scanner
535 major=`Major sound 14`
536 makedev mixer c $major 0 $audio
537 makedev sequencer c $major 1 $audio
538 makedev midi00 c $major 2 $audio
539 makedev dsp c $major 3 $audio
540 makedev audio c $major 4 $audio
541 makedev sndstat c $major 6 $audio
542 # makedev sequencer2 c $major 8 $audio
543 makedev mixer1 c $major 16 $audio
544 # makedev patmgr0 c $major 17 $audio
545 makedev midi01 c $major 18 $audio
546 makedev dsp1 c $major 19 $audio
547 makedev audio1 c $major 20 $audio
548 # makedev patmgr1 c $major 33 $audio
549 makedev midi02 c $major 34 $audio
550 makedev midi03 c $major 50 $audio
553 major=`Major pcsp` || continue
554 makedev pcmixer c $major 0 $audio
555 makedev pcsp c $major 3 $audio
556 makedev pcaudio c $major 4 $audio
560 for unit in a b c d e f g h
562 minor=`index abcdefgh $unit`
563 # minor=`expr abcdefgh : ".*$unit" - 1`
564 makedev $arg$unit c $major $minor $scsi
568 # not really devices, we use the /proc filesystem
569 symlink fd $procfs/self/fd
575 major=`Major ibcs2` || continue
576 makedev socksys c $major 0 $ibcs2
578 makedev spx c $major 1 $ibcs2
582 major=`Major apm_bios` || continue
583 makedev $arg c $major 0 $system
586 major=`Major dcf` || continue
587 makedev $arg c $major 0 $system
590 major=`Major hw` || continue
591 makedev helloworld c $major 0 $public
596 echo "$0: don't appear to have any devices" >&2
601 echo "$0: can't delete an update" >&2
610 while read device major <&3
612 eval now=\$major_$device
615 delete="$delete `cvt $device`"
617 elif [ "$now" != $major ]
619 create="$create "`cvt $device`
621 devs=`strip " $devs " $device`
622 # devs=`expr "$devs" : "\(.*\) $device"``expr "$devs" : ".* $device\(.*\)"`
626 create="$create "`cvt $devs`
627 [ "$delete" != "" ] && $0 $opts -d $delete
628 [ "$create" != " " ] && $0 $opts $create
629 [ "$opt_n" ] && continue
630 for device in $devices
632 if [ "`cvt $device`" ]
634 eval echo $device \$major_$device
639 echo "$0: don't know how to make device \"$arg\"" >&2