NetBSD/etc/etc.x68k/MAKEDEV
2003-05-07 13:41:34 +00:00

668 lines
15 KiB
Bash
Executable File

#!/bin/sh -
#
# $NetBSD: MAKEDEV,v 1.65 2003/05/07 13:41:39 christos 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
# 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
# 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
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 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}
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 * 16 + $jn + $skip))
mknod tty$name$j c 4 $unit
mknod pty$name$j c 5 $unit
jn=$(($jn + 1))
done
chmod 666 tty$name[0-9a-zA-Z] pty$name[0-9a-zA-Z]
;;
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
;;
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
;;
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 $*