1#!/bin/sh - 2# 3# $OpenBSD: MAKEDEV,v 1.3 2000/03/22 08:08:53 niklas Exp $ 4# @(#)MAKEDEV 5.5 (Berkeley) 5/28/91 5# 6# Device "make" file. Valid arguments: 7# std standard devices 8# local configuration specific devices 9# Tapes: 10# st* SCSI tape 11# Disks: 12# fd* floppy disks 13# sd* SCSI disks 14# cd* CDROM drives 15# ccd* "concatenated" pseudo-disks 16# vnd* "file" pseudo-disks 17# rd* RAM disks 18# Terminal multiplexors: 19# tty0* RS-232 single-port serial interface 20# Pseudo terminals: 21# pty* set of 16 master and slave pseudo terminals 22# Printers: 23# lpt* IEEE 1284 cetronics iface 24# Call units: 25# Special purpose devices: 26# ch* SCSI media changer 27# fd file descriptors 28# hil HIL input devices 29# bpf* packet filter 30# tun* network tunnel driver 31# lkm loadable kernel modules interface 32# *random inkernel random number generator 33# xfs* XFS filesystem devices 34# 35 36PATH=/sbin:/bin/:/usr/bin:/usr/sbin 37umask 77 38 39# 40# Utility functions 41# 42 43hex () 44{ 45 case $1 in 46 [0-9]) echo -n $1 ;; 47 10) echo -n a;; 48 11) echo -n b;; 49 12) echo -n c;; 50 13) echo -n d;; 51 14) echo -n e;; 52 15) echo -n f;; 53 esac 54} 55 56dodisk () 57{ 58 rm -f ${1}${2}? r${1}${2}? 59 mknod ${1}${2}a b $3 $(($5 * 16 + $6 + 0)) 60 mknod ${1}${2}b b $3 $(($5 * 16 + $6 + 1)) 61 mknod ${1}${2}c b $3 $(($5 * 16 + $6 + 2)) 62 mknod ${1}${2}d b $3 $(($5 * 16 + $6 + 3)) 63 mknod ${1}${2}e b $3 $(($5 * 16 + $6 + 4)) 64 mknod ${1}${2}f b $3 $(($5 * 16 + $6 + 5)) 65 mknod ${1}${2}g b $3 $(($5 * 16 + $6 + 6)) 66 mknod ${1}${2}h b $3 $(($5 * 16 + $6 + 7)) 67 mknod ${1}${2}i b $3 $(($5 * 16 + $6 + 8)) 68 mknod ${1}${2}j b $3 $(($5 * 16 + $6 + 9)) 69 mknod ${1}${2}k b $3 $(($5 * 16 + $6 + 10)) 70 mknod ${1}${2}l b $3 $(($5 * 16 + $6 + 11)) 71 mknod ${1}${2}m b $3 $(($5 * 16 + $6 + 12)) 72 mknod ${1}${2}n b $3 $(($5 * 16 + $6 + 13)) 73 mknod ${1}${2}o b $3 $(($5 * 16 + $6 + 14)) 74 mknod ${1}${2}p b $3 $(($5 * 16 + $6 + 15)) 75 mknod r${1}${2}a c $4 $(($5 * 16 + $6 + 0)) 76 mknod r${1}${2}b c $4 $(($5 * 16 + $6 + 1)) 77 mknod r${1}${2}c c $4 $(($5 * 16 + $6 + 2)) 78 mknod r${1}${2}d c $4 $(($5 * 16 + $6 + 3)) 79 mknod r${1}${2}e c $4 $(($5 * 16 + $6 + 4)) 80 mknod r${1}${2}f c $4 $(($5 * 16 + $6 + 5)) 81 mknod r${1}${2}g c $4 $(($5 * 16 + $6 + 6)) 82 mknod r${1}${2}h c $4 $(($5 * 16 + $6 + 7)) 83 mknod r${1}${2}i c $4 $(($5 * 16 + $6 + 8)) 84 mknod r${1}${2}j c $4 $(($5 * 16 + $6 + 9)) 85 mknod r${1}${2}k c $4 $(($5 * 16 + $6 + 10)) 86 mknod r${1}${2}l c $4 $(($5 * 16 + $6 + 11)) 87 mknod r${1}${2}m c $4 $(($5 * 16 + $6 + 12)) 88 mknod r${1}${2}n c $4 $(($5 * 16 + $6 + 13)) 89 mknod r${1}${2}o c $4 $(($5 * 16 + $6 + 14)) 90 mknod r${1}${2}p c $4 $(($5 * 16 + $6 + 15)) 91 chown root.operator ${1}${2}[a-p] r${1}${2}[a-p] 92 chmod 640 ${1}${2}[a-p] r${1}${2}[a-p] 93} 94 95# 96# End of utility functions 97# 98 99for i 100do 101case $i in 102 103all) 104 sh MAKEDEV std fd st0 st1 ccd0 ccd1 ccd2 105 sh MAKEDEV sd0 sd1 sd2 rd0 rd1 pty0 vnd0 vnd1 vnd2 vnd3 106 sh MAKEDEV hil com0 com1 com2 com3 107 sh MAKEDEV bpf0 bpf1 bpf2 bpf3 bpf4 bpf5 bpf6 bpf7 bpf8 bpf9 108 sh MAKEDEV ipl tun0 tun1 tun2 tun3 lkm random xfs0 109 sh MAKEDEV local 110 ;; 111 112raminst) 113 sh MAKEDEV std fd st0 st1 sd0 sd1 sd2 sd3 rd0 rd1 114 sh MAKEDEV pty0 hil com0 com1 115 sh MAKEDEV bpf0 bpf1 tun0 tun1 lkm random 116 ;; 117 118std) 119 rm -f console drum kmem mem null zero tty klog stdin stdout stderr ksyms 120 mknod console c 0 0 121 mknod tty c 1 0 ; chmod 666 tty 122 mknod mem c 2 0 ; chmod 640 mem ; chown root.kmem mem 123 mknod kmem c 2 1 ; chmod 640 kmem ; chown root.kmem kmem 124 mknod null c 2 2 ; chmod 666 null 125 mknod zero c 2 12 ; chmod 666 zero 126 mknod drum c 3 0 ; chmod 640 drum ; chown root.kmem drum 127 mknod klog c 6 0 ; chmod 600 klog 128 mknod stdin c 16 0 ; chmod 666 stdin 129 mknod stdout c 16 1 ; chmod 666 stdout 130 mknod stderr c 16 2 ; chmod 666 stderr 131 mknod ksyms c 29 0 ; chmod 640 ksyms ; chown root.kmem ksyms 132 ;; 133 134fd) 135 rm -f fd/* 136 mkdir fd > /dev/null 2>&1 137 n=0 138 (cd fd && while [ $n -lt 64 ]; do mknod $n c 24 $n; n="$(( $n + 1 ))"; done ) 139 chown -R root.wheel fd 140 chmod 555 fd 141 chmod 666 fd/* 142 ;; 143 144st*) 145 umask 2 ; unit=${i##*[a-z]} 146 case $i in 147 st*) name=st; chr=11; blk=5;; 148 esac 149 rm -f $name$unit n$name$unit e$name$unit en$name$unit \ 150 r$name$unit nr$name$unit er$name$unit enr$name$unit 151 mknod $name$unit b $blk $(($unit * 16 + 0)) 152 mknod n$name$uni b $blk $(($unit * 16 + 1)) 153 mknod e$name$uni b $blk $(($unit * 16 + 2)) 154 mknod en$name$unit b $blk $(($unit * 16 + 3)) 155 mknod r$name$unit c $chr $(($unit * 16 + 0)) 156 mknod nr$name$unit c $chr $(($unit * 16 + 1)) 157 mknod er$name$unit c $chr $(($unit * 16 + 2)) 158 mknod enr$name$unit c $chr $(($unit * 16 + 3)) 159 chown root.operator $name$unit n$name$unit e$name$unit en$name$unit \ 160 r$name$unit nr$name$unit er$name$unit enr$name$unit 161 chmod 660 $name$unit n$name$unit e$name$unit en$name$unit \ 162 r$name$unit nr$name$unit er$name$unit enr$name$unit 163 umask 77 164 ;; 165 166ch*) 167 umask 2 168 name=ch; chr=13 169 rm -f $name$unit 170 mknod ${name}${unit} c $chr $unit 171 chown root.operator ${name}${unit} 172 chmod 660 ${name}${unit} 173 umask 77 174 ;; 175 176bpf*) 177 unit=${i##*[a-z]} 178 rm -f bpf$unit 179 mknod bpf$unit c 17 $unit 180 chmod 600 bpf$unit 181 chown root.wheel bpf$unit 182 ;; 183 184ipl) 185 rm -f ipl ipnat ipstate ipauth 186 mknod ipl c 21 0 187 mknod ipnat c 21 1 188 mknod ipstate c 21 2 189 mknod ipauth c 21 3 190 chown root.wheel ipl ipnat ipstate ipauth 191 ;; 192 193tun*) 194 unit=${i##*[a-z]} 195 rm -f tun$unit 196 mknod tun$unit c 18 $unit 197 chmod 600 tun$unit 198 chown root.wheel tun$unit 199 ;; 200 201rd*|cd*) 202 umask 2 ; unit=${i##*[a-z]} 203 case $i in 204 rd*) name=cd; blk=3; chr=9;; 205 cd*) name=cd; blk=6; chr=12;; 206 esac 207 rm -f $name$unit? r$name$unit? 208 mknod ${name}${unit}a b $blk $(($unit * 16 + 0)) 209 mknod ${name}${unit}c b $blk $(($unit * 16 + 2)) 210 mknod r${name}${unit}a c $chr $(($unit * 16 + 0)) 211 mknod r${name}${unit}c c $chr $(($unit * 16 + 2)) 212 chown root.operator ${name}${unit}[a-h] r${name}${unit}[a-h] 213 chmod 640 ${name}${unit}[a-h] r${name}${unit}[a-h] 214 umask 77 215 ;; 216 217ccd*|sd*) 218 umask 2 ; unit=${i##*[a-z]} 219 case $i in 220 sd*) name=sd; blk=4; chr=10;; 221 ccd*) name=ccd; blk=1; chr=7;; 222 esac 223 case $unit in 224 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|\ 225 17|18|19|20|21|22|23|24|25|26|27|28|29|30|31) 226 dodisk $name $unit $blk $chr $unit 0 227 ;; 228 *) 229 echo bad unit for disk in: $i 230 ;; 231 esac 232 umask 77 233 ;; 234 235vnd*) 236 umask 2 ; unit=${i##*[a-z]} 237 blk=2; chr=8; 238 dodisk vnd $unit $blk $chr $unit 0 239 dodisk svnd $unit $blk $chr $unit 128 240 umask 77 241 ;; 242 243tty0*) 244 unit=${i##tty0} 245 case $unit in 246 0|1|2|3) 247 rm -f tty${unit} cua${unit} 248 mknod tty${unit} c 23 ${unit} 249 mknod cua${unit} c 23 $((${unit} + 128)) 250 ;; 251 *) 252 echo bad unit for tty in: $i 253 ;; 254 esac 255 ;; 256 257lpt*) 258 unit=${i##*[a-z]} 259 case $unit in 260 0|1|2|3) 261 rm -f lpt${unit} 262 mknod lpt${unit} c 30 ${unit} 263 ;; 264 *) 265 echo bad unit for lpt in: $i 266 ;; 267 esac 268 ;; 269 270lkm) 271 rm -f lkm 272 mknod lkm c 19 0 273 chown root.kmem lkm 274 chmod 640 lkm 275 ;; 276 277pty*) 278 class=${i##*[a-z]} 279 case $class in 280 0) offset=0 name=p;; 281 1) offset=16 name=q;; 282 2) offset=32 name=r;; 283 3) offset=48 name=s;; 284 4) offset=64 name=t;; 285 5) offset=80 name=u;; 286 6) offset=96 name=v;; 287 7) offset=112 name=w;; 288 8) offset=128 name=x;; 289 9) offset=144 name=y;; 290 10) offset=160 name=z;; 291 11) offset=176 name=P;; 292 12) offset=192 name=Q;; 293 13) offset=208 name=R;; 294 14) offset=224 name=S;; 295 15) offset=240 name=T;; 296 *) echo bad unit for pty in: $i;; 297 esac 298 case $class in 299 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15) 300 umask 0 301 n=0 302 while [ $n -lt 16 ] 303 do 304 nam=$name`hex $n` 305 rm -f {tty,pty}$nam 306 mknod tty$nam c 4 "$(( $offset + $n ))" 307 mknod pty$nam c 5 "$(( $offset + $n ))" 308 n="$(( $n + 1 ))" 309 done 310 umask 77 311 ;; 312 esac 313 ;; 314 315random|srandom|urandom|prandom|arandom) 316 rm -f random urandom srandom prandom arandom 317 mknod random c 20 0 318 mknod srandom c 20 1 319 mknod urandom c 20 2 320 mknod prandom c 20 3 321 mknod arandom c 20 4 322 chown root.wheel random srandom urandom prandom arandom 323 chmod 644 random srandom urandom prandom arandom 324 ;; 325 326xfs*) 327 rm -f xfs$unit 328 mknod xfs$unit c 31 $unit 329 chmod 600 xfs$unit 330 chown root.wheel xfs$unit 331 ;; 332 333local) 334 umask 0 335 test -s MAKEDEV.local && sh MAKEDEV.local 336 ;; 337*) 338 echo $i: unknown device 339 ;; 340esac 341done 342