#!/bin/sh - # # $NetBSD: MAKEDEV,v 1.7 2002/02/02 20:58:53 tls Exp $ # # Copyright (c) 1990 The Regents of the University of California. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by the University of # California, Berkeley and its contributors. # 4. Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # @(#)MAKEDEV 5.5 (Berkeley) 5/28/91 # ########################################################################### # # PLEASE RUN "cd ../share/man/man8 ; perl5 MAKEDEV2manpage.pl" # AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE! # ########################################################################### # # Device "make" file. Valid arguments: # std standard devices # local configuration specific devices # Tapes: # st* SCSI tape # Disks: # sd* Sun SCSI disks # vnd* "file" pseudo-disks # ccd* concatenated disk driver # raid* RAIDframe disk driver # md* memory pseudo-disk devices # Pseudo terminals: # pty* set of 62 master and slave pseudo terminals # opty first 16 ptys, to save inodes on install media # Special purpose devices: # clockctl clock control for non root users # bwtwo* monochromatic frame buffer # cgtwo* 8-bit VME bus color frame buffer # cgfour* 8-bit color frame buffer # bpf* packet filter # lkm loadable kernel modules interface # tun* network tunnel driver # random Random number generator # scsibus* SCSI busses, see scsi(4), scsictl(8) # XXX - Keep /usr/etc so SunOS can find chown PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/etc umask 77 # set this to echo for Echo-Only debugging eo= # mk name b/c major minor [mode] [group] mk() { $eo rm -f $1 $eo mknod $1 $2 $3 $4 $eo chmod ${5-666} $1 test -n "$6" && $eo chgrp $6 $1 return 0 } for arg do unit=`expr $arg : '[a-z][a-z]*\([0-9][0-9]*\)'` [ "$unit" ] || unit=0 case $arg in all) sh $0 std pty0 sh $0 bwtwo0 cgtwo0 sh $0 raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7 sh $0 sd0 sd1 sd2 sd3 sd4 sd5 sd6 sh $0 cd0 cd1 st0 st1 st2 md0 md1 sh $0 xd0 xd1 xd2 xd3 sh $0 xy0 xy1 xy2 xy3 sh $0 vnd0 vnd1 vnd2 vnd3 ccd0 ccd1 ccd2 ccd3 sh $0 bpf0 bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7 sh $0 tun0 tun1 sh $0 lkm random sh $0 scsibus0 scsibus1 scsibus2 scsibus3 sh $0 local sh $0 clockctl ;; std) mk console c 0 0 622 mk kd c 1 0 622 mk tty c 2 0 mk mem c 3 0 640 kmem mk kmem c 3 1 640 kmem mk null c 3 2 mk zero c 3 12 mk leds c 3 13 mk drum c 7 0 640 kmem mk ttya c 12 0 mk ttyb c 12 1 # this hole in minors is for the keyboard and mouse mk ttyc c 12 4 mk ttyd c 12 5 mk ttye c 12 6 mk ttyf c 12 7 mk ttyg c 12 8 mk ttyh c 12 9 mk ttyi c 12 10 mk ttyj c 12 11 mk mouse c 13 0 mk klog c 16 0 600 mk fb c 22 0 mk kbd c 29 0 mk stdin c 23 0 mk stdout c 23 1 mk stderr c 23 2 ;; bpf*) mk bpf$unit c 36 $unit 600 ;; tun*) mk tun$unit c 24 $unit 600 ;; opty) rm -f ttyp[0-9a-f] ptyp[0-9a-f] for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f do case $j in [0-9]) jn=$j ;; a) jn=10 ;; b) jn=11 ;; c) jn=12 ;; d) jn=13 ;; e) jn=14 ;; f) jn=15 ;; esac mknod ttyp$j c 20 $jn mknod ptyp$j c 21 $jn done chgrp wheel ttyp[0-9a-f] ptyp[0-9a-f] chmod 666 ttyp[0-9a-f] ptyp[0-9a-f] ;; pty*) class=${i#pty} name=`echo pqrstuvwxyzPQRST | dd bs=1 count=1 skip=$class 2>/dev/null` case $name in v) echo "$0: $i: pty unit conflicts with console ttyv0 device." continue;; ?) ;; *) echo "$0: $i: pty unit must be between 0 and 15" continue ;; esac rm -f tty$name[0-9a-zA-Z] pty$name[0-9a-zA-Z] jn=0 while [ $jn -lt 62 ] do j=`echo 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ | dd bs=1 count=1 skip=$jn 2>/dev/null` skip=0 if [ $jn -ge 16 ]; then skip=$(($class * 30 + 256 - 16)) fi unit=$(($class * 62 + $jn + $skip)) mknod tty$name$j c 20 $unit mknod pty$name$j c 21 $unit jn=$(($jn + 1)) done chgrp wheel tty$name[0-9a-zA-Z] pty$name[0-9a-zA-Z] chmod 666 tty$name[0-9a-zA-Z] pty$name[0-9a-zA-Z] ;; ccd*|cd*|fd*|sd*|xd*|xy*|vnd*|raid*) case $arg in ccd*) name=ccd; blk=9; chr=33;; cd*) name=cd; blk=18; chr=58;; fd*) name=fd; blk=16; chr=54;; raid*) name=raid; blk=25; chr=82;; sd*) name=sd; blk=7; chr=17;; xd*) name=xd; blk=10; chr=42;; xy*) name=xy; blk=3; chr=9 ;; vnd*) name=vnd; blk=5; chr=19;; esac case $unit in [0-7]) offset=$(($unit * 8));; *) echo bad unit for $name in: $arg;; esac for part in a.0 b.1 c.2 d.3 e.4 f.5 g.6 h.7 do ( tmp="$IFS" ; IFS="$IFS." set -- $part IFS="$tmp" ; unset tmp minor=$(($offset + $2)) mk $name$unit$1 b $blk $minor 640 operator mk r$name$unit$1 c $chr $minor 640 operator ) done ;; st*) name=st; blk=11; chr=18; mk r$name$unit c $chr $(($unit * 16 + 0)) 660 operator mk nr$name$unit c $chr $(($unit * 16 + 1)) 660 operator mk er$name$unit c $chr $(($unit * 16 + 2)) 660 operator mk enr$name$unit c $chr $(($unit * 16 + 3)) 660 operator ;; bwtwo*) mk bwtwo$unit c 27 $unit ;; cgtwo*) mk cgtwo$unit c 31 $unit ;; md*) name=md; blk=13; chr=52; mk md${unit}a b $blk $(($unit * 8 + 0)) 640 operator mk md${unit}c b $blk $(($unit * 8 + 2)) 640 operator # mk rmd${unit}a c $chr $(($unit * 8 + 0)) 640 operator # mk rmd${unit}c c $chr $(($unit * 8 + 2)) 640 operator ;; lkm) mk lkm c 72 0 640 kmem ;; random) mk random c 80 0 444 mk urandom c 80 1 ;; scsibus*) mk scsibus${unit} c 81 $unit 644 wheel ;; clockctl) rm -f clockctl mknod clockctl c 89 0 chown root.ntpd clockctl chmod 660 clockctl ;; local) umask 0 sh $0.local all umask 77 ;; *) echo $arg: unknown device ;; esac done