#!/bin/sh - # # $NetBSD: MAKEDEV,v 1.71 2003/09/19 11:11:58 pooka 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 ; make makedevs" # AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE! # ########################################################################### # # Device "make" file. Valid arguments: # all makes all known devices, including local devices, # Tries to make the ``standard'' number of each. # init A set of devices that is used for MFS /dev by init. # May be equal to "all". # floppy devices to be put on install floppies # fd makes fd/* for the fdescfs. # std standard devices # local configuration specific devices # isdns make ISDN devices # usbs make USB devices # # Tapes: # st* SCSI tapes # # Disks: # fd* Floppy disks # sd* SCSI disks, includes flopticals # cd* SCSI cdrom discs # vnd* "file" pseudo-disks # ccd* concatenated disk driver # cgd* cryptographic disk driver # raid* RAIDframe disk driver # md* memory pseudo-disk devices # bmd* Nereid bank memory disks # # Console ports: # ttye* ITE bitmapped consoles # # Pointing devices: # mouse* serial mouse # # Terminal ports: # tty* standard serial port # com* PSX16550 serial board # # Pseudo terminals: # pty* set of 62 master and slave pseudo terminals # opty minimum set of ptys, to save inodes on install media # # Printers: # par* motherboard parallel port # # ISDN devices: # isdn communication between userland isdnd and kernel # isdnctl control device # isdnbchan* raw b-channel access # isdntel* telephony device # isdnteld* telephony dialout device # isdntrc* trace device # # USB devices: # usb* USB control devices # ugen* USB generic devices # # Special purpose devices: # clockctl clock control for non root users # grf* built-in video # kbd keyboard # aconf autoconfig information (not yet) # lkm loadable kernel modules interface # bpf* Berkeley Packet Filter # ipl IP Filter # pf PF packet filter # crypto hardware crypto access driver # random Random number generator # audio audio device # sram battery backuped memory # tun* network tunnel driver # pow* power management device # bell* OPM bell device # ch* SCSI media changer # uk* unknown SCSI device # ss* SCSI scanner # scsibus* SCSI busses, see scsi(4), scsictl(8) # systrace syscall tracer # PATH=/sbin:/bin:/usr/sbin:/usr/bin umask 77 # Check if we have fdesc mounted if [ -d fd ]; then case "`df fd`" in *fdesc*) nofdesc=false;; *) nofdesc=true;; esac else nofdesc=true fi makedev() { for i do case $i in init|all) makedev std fd st0 st1 ttye0 ttye1 mouse0 mouse1 makedev tty00 tty01 tty02 tty03 com0 com1 grf0 grf1 kbd makedev sd0 sd1 sd2 sd3 sd4 sd5 sd6 makedev vnd0 vnd1 vnd2 vnd3 vnd4 vnd5 vnd6 pty0 makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7 makedev cd0 ss0 fd0 fd1 fd2 fd3 makedev bpf0 bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7 makedev ccd0 ccd1 ccd2 ccd3 tun0 tun1 par0 lkm ipl pf crypto makedev cgd0 cgd1 cgd2 cgd3 makedev sram audio pow0 pow1 bell random local makedev md0 md1 bmd0 bmd1 ch0 uk0 uk1 ss0 makedev scsibus0 scsibus1 scsibus2 scsibus3 makedev isdns makedev clockctl makedev systrace makedev usbs ;; floppy) makedev std fd0 sd0 sd1 sd2 sd3 sd4 sd5 sd6 makedev tty00 cd0 ttye0 opty ;; ramdisk) makedev floppy md0 sram ;; isdns) makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdnteld0 isdnteld1 isdntrc0 isdntrc1 ;; usbs) makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7 makedev ugen0 ;; std) rm -f console drum kmem mem reload null zero klog ksyms mknod console c 0 0 mknod drum c 3 0 ; chmod 640 drum ; chgrp kmem drum mknod kmem c 2 1 ; chmod 640 kmem ; chgrp kmem kmem mknod mem c 2 0 ; chmod 640 mem ; chgrp kmem mem mknod reload c 2 20 ; chmod 640 reload ; chgrp kmem reload mknod zero c 2 12 ; chmod 666 zero mknod null c 2 2 ; chmod 666 null mknod klog c 6 0 ; chmod 600 klog mknod ksyms c 54 0 ; chmod 444 ksyms if $nofdesc; then rm -f tty stdin stdout stderr mknod tty c 1 0 ; chmod 666 tty mknod stdin c 21 0 ; chmod 666 stdin mknod stdout c 21 1 ; chmod 666 stdout mknod stderr c 21 2 ; chmod 666 stderr fi ;; fd) if $nofdesc; then rm -f fd/* mkdir fd 2>/dev/null n=0 while [ $n -lt 64 ]; do mknod fd/$n c 21 $n n=$(($n + 1)) done chmod 755 fd chmod 666 fd/* fi ;; st*) case $i in st*) name=st; unit=${i#st} blk=5; chr=20;; esac rm -f $name$unit n$name$unit e$name$unit en$name$unit \ r$name$unit nr$name$unit er$name$unit enr$name$unit case $unit in [0-6]) mknod $name$unit b $blk $(($unit * 16 + 0)) mknod n$name$unit b $blk $(($unit * 16 + 1)) mknod e$name$unit b $blk $(($unit * 16 + 2)) mknod en$name$unit b $blk $(($unit * 16 + 3)) mknod r$name$unit c $chr $(($unit * 16 + 0)) mknod nr$name$unit c $chr $(($unit * 16 + 1)) mknod er$name$unit c $chr $(($unit * 16 + 2)) mknod enr$name$unit c $chr $(($unit * 16 + 3)) chgrp operator $name$unit n$name$unit \ e$name$unit en$name$unit \ r$name$unit nr$name$unit \ er$name$unit enr$name$unit chmod 660 $name$unit n$name$unit \ e$name$unit en$name$unit \ r$name$unit nr$name$unit \ er$name$unit enr$name$unit ;; *) echo bad unit for tape in: $i ;; esac ;; fd*) unit=${i#fd} rm -f fd$unit? rfd$unit? case $unit in [0-3]) mknod fd${unit}a b 2 $(($unit * 8 + 0)) mknod fd${unit}b b 2 $(($unit * 8 + 1)) mknod fd${unit}c b 2 $(($unit * 8 + 2)) mknod fd${unit}d b 2 $(($unit * 8 + 3)) mknod fd${unit}e b 2 $(($unit * 8 + 4)) mknod fd${unit}f b 2 $(($unit * 8 + 5)) mknod fd${unit}g b 2 $(($unit * 8 + 6)) mknod fd${unit}h b 2 $(($unit * 8 + 7)) mknod rfd${unit}a c 18 $(($unit * 8 + 0)) mknod rfd${unit}b c 18 $(($unit * 8 + 1)) mknod rfd${unit}c c 18 $(($unit * 8 + 2)) mknod rfd${unit}d c 18 $(($unit * 8 + 3)) mknod rfd${unit}e c 18 $(($unit * 8 + 4)) mknod rfd${unit}f c 18 $(($unit * 8 + 5)) mknod rfd${unit}g c 18 $(($unit * 8 + 6)) mknod rfd${unit}h c 18 $(($unit * 8 + 7)) chgrp operator fd$unit? rfd$unit? chmod 640 fd$unit? rfd$unit? ;; *) echo bad unit for floppy disk in: $i ;; esac ;; sd*|vnd*|ccd*|cgd*|raid*) case $i in sd*) name=sd; unit=${i#sd}; blk=4; chr=8;; raid*) name=raid; unit=${i#raid}; blk=16; chr=41;; vnd*) name=vnd; unit=${i#vnd}; blk=6; chr=19;; ccd*) name=ccd; unit=${i#ccd}; blk=15; chr=34;; cgd*) name=cgd; unit=${i#cgd}; blk=17; chr=52;; esac rm -f $name$unit? r$name$unit? case $unit in [0-9]|1[0-5]) mknod ${name}${unit}a b $blk $(($unit * 8 + 0)) mknod ${name}${unit}b b $blk $(($unit * 8 + 1)) mknod ${name}${unit}c b $blk $(($unit * 8 + 2)) mknod ${name}${unit}d b $blk $(($unit * 8 + 3)) mknod ${name}${unit}e b $blk $(($unit * 8 + 4)) mknod ${name}${unit}f b $blk $(($unit * 8 + 5)) mknod ${name}${unit}g b $blk $(($unit * 8 + 6)) mknod ${name}${unit}h b $blk $(($unit * 8 + 7)) mknod r${name}${unit}a c $chr $(($unit * 8 + 0)) mknod r${name}${unit}b c $chr $(($unit * 8 + 1)) mknod r${name}${unit}c c $chr $(($unit * 8 + 2)) mknod r${name}${unit}d c $chr $(($unit * 8 + 3)) mknod r${name}${unit}e c $chr $(($unit * 8 + 4)) mknod r${name}${unit}f c $chr $(($unit * 8 + 5)) mknod r${name}${unit}g c $chr $(($unit * 8 + 6)) mknod r${name}${unit}h c $chr $(($unit * 8 + 7)) chgrp operator $name$unit? r$name$unit? chmod 640 $name$unit? r$name$unit? ;; *) echo bad unit for disk in: $i ;; esac ;; cd*) case $i in cd*) name=cd; unit=${i#cd} blk=7; chr=9;; esac rm -f $name$unit? r$name$unit? case $unit in [0-6]) mknod ${name}${unit}a b $blk $(($unit * 8 + 0)) mknod ${name}${unit}c b $blk $(($unit * 8 + 2)) mknod r${name}${unit}a c $chr $(($unit * 8 + 0)) mknod r${name}${unit}c c $chr $(($unit * 8 + 2)) chgrp operator $name$unit? r$name$unit? chmod 640 $name$unit? r$name$unit? ;; *) echo bad unit for disk in: $i ;; esac ;; md*) unit=${i#md}; blk=8; chr=7 rm -f md${unit}? rmd${unit}? mknod md${unit}a b $blk $(($unit * 8 + 0)) mknod md${unit}c b $blk $(($unit * 8 + 2)) # mknod rmd${unit}a c $chr $(($unit * 8 + 0)) # mknod rmd${unit}c c $chr $(($unit * 8 + 2)) chgrp operator md${unit}? #rmd${unit}? chmod 640 md${unit}? #rmd${unit}? ;; bmd*) unit=${i#bmd}; blk=18; chr=53 rm -f bmd${unit}? rbmd${unit}? mknod bmd${unit}a b $blk $(($unit * 8 + 0)) mknod bmd${unit}c b $blk $(($unit * 8 + 2)) mknod rbmd${unit}a c $chr $(($unit * 8 + 0)) mknod rbmd${unit}c c $chr $(($unit * 8 + 2)) chgrp operator bmd${unit}? rbmd${unit}? chmod 640 bmd${unit}? rbmd${unit}? ;; ss*) case $i in ss*) name=ss; unit=${i#ss} chr=35;; esac rm -f $name$unit n$name$unit en$name$unit mknod $name$unit c $chr $(($unit * 16 + 0)) mknod n$name$unit c $chr $(($unit * 16 + 1)) mknod en$name$unit c $chr $(($unit * 16 + 3)) chgrp operator $name$unit n$name$unit en$name$unit chmod 640 $name$unit n$name$unit en$name$unit ;; ch*|uk*) case $i in ch*) name=ch; unit=${i#ch} chr=36;; uk*) name=uk; unit=${i#uk} chr=37;; esac rm -f $name$unit mknod $name$unit c $chr $unit chgrp operator $name$unit chmod 640 $name$unit ;; tty0*) unit=${i#tty0} rm -f tty0${unit} rm -f tty0${unit} mknod tty0${unit} c 12 $unit chown uucp tty0${unit} ;; com*) unit=${i#???} rm -f com${unit} case $unit in 0|1) rm -f com${unit} mknod com${unit} c 16 $unit chown uucp com${unit} ;; *) echo bad unit for com in: $i ;; esac ;; ttye*) unit=${i#ttye} rm -f ttye${unit} rm -f ite* case $unit in 0|1) mknod ttye${unit} c 13 ${unit} ;; *) echo bad unit for ttye in: $i ;; esac ;; grf*) unit=${i#grf} rm -f grf${unit} case $unit in 0|1) mknod grf${unit} c 10 ${unit}; chmod 600 grf${unit} ;; *) echo bad unit for grf in: $i ;; esac ;; mouse*) unit=${i#mouse} rm -f mouse${unit} case $unit in 0|1) mknod mouse${unit} c 15 ${unit}; chmod 600 mouse${unit} if [ $unit = 0 ] then ln -fs mouse${unit} mouse fi ;; *) echo bad unit for mouse in: $i ;; esac ;; kbd) rm -f kbd mknod kbd c 14 0 chmod 600 kbd ;; opty) rm -f ttyp[0-1] ptyp[0-1] for j in 0 1 do mknod ttyp$j c 4 $j mknod ptyp$j c 5 $j done chmod 666 ttyp[0-1] ptyp[0-1] ;; pty*) class=${i#pty} set -- p q r s t u v w x y z P Q R S T if [ "$class" -ge $# ]; then echo "$MAKEDEV: $i: pty unit must be between 0 and 15" continue fi shift $class name=$1 if [ "$name" = v ]; then echo "$MAKEDEV: $i: pty unit conflicts with console ttyv0 device." continue fi rm -f tty$name[0-9a-zA-Z] pty$name[0-9a-zA-Z] jn=0 unit=$(($class * 16)) names= set -- - 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z while shift j=$1 [ -n "$j" ] do if [ $j = g ]; then unit=$(($unit + $class * 30 + 256 - 16)) fi mknod tty$name$j c 4 $unit mknod pty$name$j c 5 $unit names="$names tty$name$j pty$name$j" unit=$(($unit + 1)) done chmod 666 $names unset names ;; bpf*|tun*|par*) case $i in par*) name=par; unit=${i#par}; chr=11;; bpf*) name=bpf; unit=${i#bpf}; chr=22;; tun*) name=tun; unit=${i#tun}; chr=31;; esac rm -f $name$unit mknod $name$unit c $chr $unit ;; ipl) rm -f ipl ipnat ipstate ipauth mknod ipl c 38 0 mknod ipnat c 38 1 mknod ipstate c 38 2 mknod ipauth c 38 3 chmod 600 ipl ipnat ipstate ipauth ;; pf) rm -f pf mknod pf c 55 0 chmod 600 pf ;; crypto) rm -f crypto mknod crypto c 56 0 chmod 666 crypto ;; lkm) rm -f lkm mknod lkm c 24 0 chgrp kmem lkm chmod 640 lkm ;; audio) makedev audio0 ln -fs sound0 sound ln -fs audio0 audio ln -fs mixer0 mixer ln -fs audioctl0 audioctl ;; audio*) unit=${i#audio} audio=audio$unit sound=sound$unit mixer=mixer$unit major=17 audioctl=audioctl$unit if [ "$unit" = "" ]; then unit=0; fi rm -f $audio $sound $mixer $audioctl mknod $sound c $major $(($unit + 0)) mknod $audio c $major $(($unit + 128)) mknod $mixer c $major $(($unit + 16)) mknod $audioctl c $major $(($unit + 192)) chmod 666 $audio $sound $mixer $audioctl ;; sram) rm -f sram mknod sram c 23 0 chmod 644 sram ;; pow*) unit=${i#pow} rm -f pow${unit} case $unit in 0|1) mknod pow${unit} c 32 ${unit}; chmod 644 pow${unit} if [ $unit = 0 ] then ln -fs pow${unit} pow fi ;; *) echo bad unit for pow in: $i ;; esac ;; bell*) rm -f bell mknod bell c 33 0 chmod 666 bell ;; random) rm -f random urandom mknod random c 39 0 mknod urandom c 39 1 chmod 444 random chmod 644 urandom ;; scsibus*) unit=${i#scsibus} rm -f scsibus$unit mknod scsibus$unit c 40 $unit chmod 644 scsibus$unit ;; isdn) rm -f isdn mknod isdn c 43 0 chmod 600 isdn ;; isdnctl) rm -f isdnctl mknod isdnctl c 44 0 chmod 600 isdnctl ;; isdnbchan*) unit=${i#isdnbchan} rm -f isdnbchan$unit mknod isdnbchan$unit c 45 $unit chmod 600 isdnbchan$unit ;; isdnteld*) unit=${i#isdnteld} rm -f isdnteld$unit mknod isdnteld$unit c 47 $(($unit + 64)) chmod 600 isdnteld$unit ;; isdntel*) unit=${i#isdntel} rm -f isdntel$unit mknod isdntel$unit c 47 $unit chmod 600 isdntel$unit ;; isdntrc*) unit=${i#isdntrc} rm -f isdntrc$unit mknod isdntrc$unit c 46 $unit chmod 600 isdntrc$unit ;; clockctl) rm -f clockctl mknod clockctl c 48 0 chgrp ntpd clockctl chmod 660 clockctl ;; systrace) rm -f systrace mknod systrace c 49 0 chmod 644 systrace ;; usb*) unit=${i#usb} if [ "$unit" = "" ]; then unit=255 usb=usb else usb=usb$unit fi major=50 rm -f $usb mknod $usb c $major $unit chmod 600 $usb ;; ugen*) unit=${i#ugen} ugen=ugen$unit major=51 for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 do ugenj=$ugen.$j rm -f $ugenj mknod $ugenj c $major $(($unit * 16 + ${j#0})) chmod 600 $ugenj done ;; local) if [ -f "$0.local" ]; then umask 0 sh $0.local all umask 77 fi ;; *) echo $i: unknown device ;; esac done } makedev $*