MAKEDEV.tmpl revision 1.135
1#!/bin/sh - 2# $NetBSD: MAKEDEV.tmpl,v 1.135 2010/08/22 18:56:20 rmind Exp $ 3# 4# Copyright (c) 2003,2007,2008 The NetBSD Foundation, Inc. 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 1. Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 2. Redistributions in binary form must reproduce the above copyright 13# notice, this list of conditions and the following disclaimer in the 14# documentation and/or other materials provided with the distribution. 15# 16# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26# POSSIBILITY OF SUCH DAMAGE. 27# 28# 29########################################################################### 30# 31# PLEASE RUN "cd ../share/man/man8 ; make makedevs" 32# AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE! 33# 34########################################################################### 35# 36# Device "make" file. Valid special arguments: 37# all makes all known devices, including local devices. 38# Tries to make the 'standard' number of each type. 39# init A set of devices that is used for MFS /dev by init. 40# May be equal to "all". 41# floppy devices to be put on install floppies 42# ramdisk devices to be put into INSTALL kernel ramdisks. 43# std standard devices 44# local configuration specific devices 45# wscons make wscons devices 46# usbs make USB devices 47# isdns make ISDN devices 48# 49# Tapes: 50# st* SCSI tapes 51# wt* QIC-interfaced (e.g. not SCSI) 3M cartridge tape 52# ht* MASSBUS TM03 and TU?? 53# mt* MSCP tapes (e.g. TU81, TK50) 54# tm* UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11) 55# ts* UNIBUS TS11 56# ut* UNIBUS TU45 emulations (e.g. si 9700) 57# uu* TU58 cassettes on DL11 controller 58# 59# Disks: 60# ccd* concatenated disk devices 61# cd* SCSI or ATAPI CD-ROM 62# cgd* cryptographic disk devices 63# raid* RAIDframe disk devices 64# sd* SCSI disks 65# wd* "winchester" disk drives (ST506,IDE,ESDI,RLL,...) 66# bmd* Nereid bank memory disks 67# ed* IBM PS/2 ESDI disk devices 68# fd* "floppy" disk drives (3 1/2", 5 1/4") 69# fss* Files system snapshot devices 70# gdrom* Dreamcast "gigadisc" CD-ROM drive 71# hk* UNIBUS RK06 and RK07 72# hp* MASSBUS RM?? 73# ld* Logical disk devices (e.g., hardware RAID) 74# mcd* Mitsumi CD-ROM 75# md* memory pseudo-disk devices 76# ofdisk* OpenFirmware disk devices 77# ra* MSCP disks (RA??, RD??) 78# rb* 730 IDC w/ RB80 and/or RB02 79# rd* HDC9224 RD disks on VS2000 80# rl* UNIBUS RL02 81# rx* MSCP floppy disk (RX33/50/...) 82# up* other UNIBUS devices (e.g. on Emulex SC-21V controller) 83# vnd* "file" pseudo-disks 84# xbd* Xen virtual disks 85# xd* Xylogic 753/7053 disks 86# xy* Xylogic 450/451 disks 87# 88# Pointing devices: 89# wsmouse* wscons mouse events 90# lms* Logitech bus mouse 91# mms* Microsoft bus mouse 92# qms* "quadrature mouse" 93# pms* PS/2 mouse 94# mouse mouse (provides events, for X11) 95# 96# Keyboard devices: 97# wskbd* wscons keyboard events 98# kbd raw keyboard (provides events, for X11) 99# kbdctl keyboard control 100# 101# Terminals/Console ports: 102# tty[01]* standard serial ports 103# tty0* SB1250 ("sbscn") serial ports (sbmips) 104# ttyE* wscons - Workstation console ("wscons") glass-tty emulators 105# ttyCZ? Cyclades-Z multiport serial boards. Each "unit" 106# makes 64 ports. 107# ttyCY? Cyclom-Y multiport serial boards. Each "unit" makes 108# 32 ports. 109# ttye* ITE bitmapped consoles 110# ttyv0 pccons 111# ttyC? NS16550 ("com") serial ports 112# ttyS* SA1110 serial port (hpcarm) 113# ttyTX? TX39 internal serial ports (hpcmips) 114# ttyB? DEC 3000 ZS8530 ("scc") serial ports (alpha) 115# ttyA* mfc serial ports (amiga) 116# ttyB* msc serial ports (amiga) 117# ttyC* com style serial ports (DraCo, HyperCom) (amiga) 118# On the DraCo, units 0 and 1 are the built-in "modem" and 119# "mouse" ports, if configured. 120# ttyA0 8530 Channel A (formerly ser02) (atari) 121# ttyA1 8530 Channel B (formerly mdm02) (atari) 122# ttyB0 UART on first 68901 (formerly mdm01) (atari) 123# ixpcom IXP12x0 COM ports 124# epcom EP93xx COM ports 125# ttyM? HP200/300 4 port serial mux interface (hp300) 126# ttya "ttya" system console (luna68k) 127# ttyb second system serial port (luna68k) 128# tty* Onboard serial ports (mvme68k) 129# On the mvme147 these are: ttyZ1, ttyZ2 and ttyZ3. 130# On the mvme167, and '177: ttyC1, ttyC2 and ttyC3. 131# Note that tty[CZ]0 is grabbed by the console device 132# so is not created by default 133# dc* PMAX 4 channel serial interface (kbd, mouse, modem, printer) 134# scc* 82530 serial interface (pmax) 135# ttyZ* Zilog 8530 ("zstty") serial ports 136# tty[abcd] Built-in serial ports (sparc) 137# tty* Z88530 serial controllers (sparc64) 138# ttyh* SAB82532 serial controllers (sparc64) 139# tty[a-j] Built-in serial ports (sun2, sun3) 140# ttyC? pccons (arc) 141# dz* UNIBUS DZ11 and DZ32 (vax) 142# dh* UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11) (vax) 143# dmf* UNIBUS DMF32 (vax) 144# dhu* UNIBUS DHU11 (vax) 145# dmz* UNIBUS DMZ32 (vax) 146# dl* UNIBUS DL11 (vax) 147# xencons Xen virtual console 148# 149# Terminal multiplexors: 150# dc* 4 channel serial interface (keyboard, mouse, modem, printer) 151# dh* UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11) 152# dhu* UNIBUS DHU11 153# dl* UNIBUS DL11 154# dmf* UNIBUS DMF32 155# dmz* UNIBUS DMZ32 156# dz* UNIBUS DZ11 and DZ32 157# scc* 82530 serial interface 158# 159# Call units: 160# dn* UNIBUS DN11 and emulations (e.g. Able Quadracall) 161# 162# Pseudo terminals: 163# ptm pty multiplexor device, and pts directory 164# pty* set of 16 master and slave pseudo terminals 165# opty first 16 ptys, to save inodes on install media 166# ipty first 2 ptys, for install media use only 167# 168# Printers: 169# arcpp* Archimedes parallel port 170# lpt* stock lp 171# lpa* interruptless lp 172# par* Amiga motherboard parallel port 173# cpi* Macintosh Nubus CSI parallel printer card 174# 175# USB devices: 176# usb* USB control devices 177# uhid* USB generic HID devices 178# ulpt* USB printer devices 179# ugen* USB generic devices 180# urio* USB Diamond Rio 500 devices 181# uscanner* USB scanners 182# ttyHS* USB Option N.V. modems 183# ttyU* USB modems 184# ttyY* USB serial adapters 185# 186# ISDN devices: 187# isdn communication between userland isdnd and kernel 188# isdnctl control device 189# isdnbchan* raw b-channel access 190# isdntel* telephony device 191# isdnteld* telephony dialout device 192# isdntrc* trace device 193# 194# Video devices: 195# bwtwo* monochromatic frame buffer 196# cgtwo* 8-bit color frame buffer 197# cgthree* 8-bit color frame buffer 198# cgfour* 8-bit color frame buffer 199# cgsix* accelerated 8-bit color frame buffer 200# cgeight* 24-bit color frame buffer 201# etvme Tseng et-compatible cards on VME (atari) 202# ik* UNIBUS interface to Ikonas frame buffer 203# leo Circad Leonardo VME-bus true color (atari) 204# ps* UNIBUS interface to Picture System 2 205# qv* QVSS (MicroVAX) display 206# tcx* accelerated 8/24-bit color frame buffer 207# 208# Maple bus devices: 209# maple Maple bus control devices 210# mlcd* Maple bus LCD devices 211# mmem* Maple bus storage devices 212# 213# IEEE1394 bus devices: 214# fw* IEEE1394 bus generic node access devices 215# fwmem* IEEE1394 bus physical memory of the remote node access devices 216# 217# Special purpose devices: 218# ad* UNIBUS interface to Data Translation A/D converter 219# agp* AGP GART devices 220# altq ALTQ control interface 221# amr* AMI MegaRaid control device 222# apm power management device 223# audio* audio devices 224# bell* OPM bell device (x68k) 225# bktr Brooktree 848/849/878/879 based TV cards 226# bpf packet filter 227# bthub Bluetooth Device Hub control interface 228# cfs* Coda file system device 229# ch* SCSI media changer 230# cir* Consumer IR 231# clockctl clock control for non root users 232# cpuctl CPU control 233# crypto hardware crypto access driver 234# dmoverio hardware-assisted data movers 235# dpt* DPT/Adaptec EATA RAID management interface 236# dpti* DPT/Adaptec I2O RAID management interface 237# drm* Direct Rendering Manager interface 238# fb* PMAX generic framebuffer pseudo-device 239# fd file descriptors 240# grf* graphics frame buffer device 241# hdaudio* High Definition audio control device 242# hil HP300 HIL input devices 243# icp ICP-Vortex/Intel RAID control interface 244# iic* IIC bus device 245# io x86 IOPL access for COMPAT_10, COMPAT_FREEBSD 246# iop* I2O IOP control interface 247# ipl IP Filter 248# irframe* IrDA physical frame 249# ite* terminal emulator interface to HP300 graphics devices 250# joy* joystick device 251# kttcp kernel ttcp helper device 252# lockstat kernel locking statistics 253# magma* Magma multiport serial/parallel cards 254# midi* MIDI 255# mlx* Mylex DAC960 control interface 256# mly* Mylex AcceleRAID/eXtremeRAID control interface 257# np* UNIBUS Ethernet co-processor interface, for downloading. 258# npf NPF packet filter 259# nsmb* SMB requester 260# openfirm OpenFirmware accessor 261# pad* Pseudo-audio device driver 262# pci* PCI bus access devices 263# pf PF packet filter 264# pow* power management device (x68k) 265# putter Pass-to-Userspace Transporter 266# px* PixelStamp Xserver access 267# radio* radio devices 268# random Random number generator 269# rtc* RealTimeClock 270# satlink* PlanetConnect satellite receiver driver 271# scsibus* SCSI busses 272# se* SCSI Ethernet 273# ses* SES/SAF-TE SCSI Devices 274# speaker PC speaker (XXX - installed) 275# sram battery backuped memory (x68k) 276# ss* SCSI scanner 277# stic* PixelStamp interface chip 278# sysmon System Monitoring hardware 279# tap* virtual Ethernet device 280# tun* network tunnel driver 281# twa 3ware Apache control interface 282# twe 3ware Escalade control interface 283# uk* unknown SCSI device 284# veriexec Veriexec fingerprint loader 285# video* video capture devices 286# view* generic interface to graphic displays (Amiga) 287# vmegen* generic VME access 288# wsfont* console font control 289# wsmux* wscons event multiplexor 290# xenevt Xen event interface 291 292 293# 294# NOTE: 295# 296# * MAKEDEV is used both as a standalone script (via "sh ./MAKEDEV 297# all" or similar), and as a function library for MAKEDEV.local (via 298# "MAKEDEV_AS_LIBRARY=1 . MAKEDEV"). Because of this, the script 299# should consist almost entirely of function definitions, apart from a 300# few lines right at the end. 301# 302# * MAKEDEV may be executed in an environment that is missing some 303# common commands. For example, it may be executed from a minimal 304# system used during installation, or it may be executed early in the 305# boot sequence before most file systems have been mounted. It may 306# also be executed in a cross-build environment on a non-NetBSD host. 307# 308 309usage() 310{ 311 cat 1>&2 << _USAGE_ 312Usage: ${0##*/} [-fMs] [-m mknod] [-p pax] [-t mtree] special [...] 313 Create listed special devices. Options: 314 -f Force permissions to be updated on existing devices. 315 -M Create memory file system. 316 -m mknod Name of mknod(8) program. [\$TOOL_MKNOD or mknod] 317 -p pax Name of pax(1) program. [\$TOOL_PAX or pax] 318 -s Generate mtree(8) specfile instead of creating devices. 319 -t mtree Name of mtree(8) program. [\$TOOL_MTREE or mtree] 320 321_USAGE_ 322 exit 1 323} 324 325# zeropad width number 326# display number with a zero (`0') padding of width digits. 327# 328zeropad() 329{ 330 case $(($1 - ${#2})) in 331 5) echo 00000$2;; 332 4) echo 0000$2;; 333 3) echo 000$2;; 334 2) echo 00$2;; 335 1) echo 0$2;; 336 0) echo $2;; 337 *) die "bad padding" ;; 338 esac 339} 340 341# hexprint number 342# display (base10) number as hexadecimal 343# 344hexprint() 345{ 346 val="$(($1 + 0))" 347 hex= 348 set -- 0 1 2 3 4 5 6 7 8 9 a b c d e f 349 while [ "$val" -gt 0 ]; do 350 eval hex=\$$(($val % 16 + 1))\$hex 351 val="$(($val / 16))" 352 done 353 echo "${hex:-0}" 354} 355 356# linecount multiline_string 357# count the number of lines in the string 358# 359linecount() 360{ 361 local IFS=' 362' # just a newline, no other white space between the quotes 363 set -- $1 364 echo $# 365} 366 367# nooutput -12 cmd [args...] 368# run a command with stdout and/or stderr ignored. 369# "nooutput -1 cmd" is like "cmd >/dev/null"; 370# "nooutput -2 cmd" is like "{ cmd ; } 2>/dev/null"; 371# "nooutput -12 cmd" is like "{ cmd ; } >/dev/null 2>&1"; 372# except they should work even if /dev/null doesn't [yet] exist. 373# 374# The "{...}" wrapper used in cases where stderr is redirected 375# serves to capture shell error messages such as "cmd: not found". 376# 377nooutput() 378{ 379 local flags="$1" ; shift 380 local junk 381 case "$flags" in 382 "-1") junk="$( "$@" )" ;; 383 "-2") exec 4>&1 ; junk="$( { "$@" ; } 2>&1 1>&4 )" ; exec 4>&- ;; 384 "-12") junk="$( { "$@" ; } 2>&1 )" ;; 385 *) warn "Incorrect use of nooutput" ;; 386 esac 387} 388 389# check_pax path_to_pax 390# Check whether pax exists and supports the command line options 391# and input format that we will want to use. 392# 393check_pax() 394{ 395 local pax="$1" 396 echo ". type=dir optional" | nooutput -12 "${pax}" -r -w -M -pe . 397} 398 399# check_mtree path_to_mtree 400# Check whether mtree exists and supports the command line options 401# and input format that we will want to use. 402# 403check_mtree() 404{ 405 local mtree="$1" 406 echo ". type=dir optional" | nooutput -12 "${mtree}" -e -U 407} 408 409# setup args... 410# Parse command line arguments, exit on error. 411# Callers should shift $((OPTIND - 1)) afterwards. 412# 413setup() 414{ 415 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/rescue 416 417 : ${TOOL_MKNOD:=mknod} 418 : ${TOOL_MTREE:=mtree} 419 : ${TOOL_PAX:=pax} 420 do_create_mfs=false 421 do_force=false 422 do_mknod=false 423 do_pax=false 424 do_mtree=false 425 do_redirect=false 426 do_specfile=false 427 opts= 428 while getopts Mfm:p:st: ch; do 429 # Note that $opts is only for options pased through to 430 # MAKEDEV.local, not for all options. 431 case ${ch} in 432 M) 433 # "-M" sets do_create_mfs; 434 # "-M -M" is for use from init(8), and sets do_redirect 435 do_redirect=$do_create_mfs 436 do_create_mfs=true 437 ;; 438 f) do_force=true 439 opts="${opts} -f" 440 ;; 441 m) TOOL_MKNOD=${OPTARG} 442 do_mknod=true 443 opts="${opts} -m ${OPTARG}" 444 ;; 445 p) TOOL_PAX="${OPTARG}" 446 if check_pax "${TOOL_PAX}"; then 447 do_pax=true 448 # do not add this to $opts; we will later 449 # add "-s" instead. 450 else 451 warn "Ignored -p option:" \ 452 "${TOOL_PAX} is missing or broken" 453 do_mknod=true 454 fi 455 ;; 456 s) do_specfile=true 457 opts="${opts} -s" 458 ;; 459 t) TOOL_MTREE="${OPTARG}" 460 if check_mtree "${TOOL_MTREE}"; then 461 do_mtree=true 462 # do not add this to $opts; we will later 463 # add "-s" instead. 464 else 465 warn "Ignored -t option:" \ 466 "${TOOL_MTREE} is missing or broken" 467 do_mknod=true 468 fi 469 ;; 470 *) usage ;; 471 esac 472 done 473 474 shift $((${OPTIND} - 1)) 475 [ $# -gt 0 ] || usage 476 477 u_root="%uid_root%" 478 u_uucp="%uid_uucp%" 479 g_kmem="%gid_kmem%" 480 g_ntpd="%gid_ntpd%" 481 g_operator="%gid_operator%" 482 g_wheel="%gid_wheel%" 483 dialin=0 484 dialout=524288 485 callunit=262144 486 487 # only allow read&write for owner by default 488 umask 077 489 490 # Set fdesc_mounted=true if the fdesc file system is mounted 491 # on the current directory (typically "/dev"). 492 # Later, this will be used to suppress creation of device nodes 493 # that are supplied by the fdesc file system. 494 # 495 fdesc_mounted=false 496 if [ -d fd ]; then 497 # Parse the output from "mount -u -o nosuchoption .". 498 # We don't parse the output from df(1) because that's 499 # less likely to be available on install media. 500 # 501 # If the current directory is a mount point for the 502 # fdesc file system, then the expected output (whether 503 # or not the current user is root) is: 504 # mount_fdesc: -o suchoption: option not supported. 505 # 506 # If the current directory is not a mount point, then 507 # the expected output is: 508 # mount: .: unknown special file or file system. 509 # 510 # If we are not running on NetBSD, or mount(8) is not 511 # found, then we should get some other error message. 512 # 513 case "$({ LC_ALL=C mount -u -o nosuchoption . ; } 2>&1)" in 514 *mount_fdesc*) fdesc_mounted=true ;; 515 esac 516 fi 517 518 # do_force requires mknod 519 if $do_force; then 520 if $do_mtree || $do_pax || $do_specfile; then 521 die "-f option works only with mknod" 522 fi 523 do_mknod=true 524 fi 525 526 # If no explicit method was specified on the command line or 527 # forced above, then use one of mtree, pax, or mknod, in that 528 # order of preference. 529 # 530 # mtree is preferred because it's fast and designed for the 531 # purpose. However, it's unlikely to be available early in the 532 # boot sequence, when init(8) may invoke MAKEDEV(8). 533 # 534 # pax is usually acceptable, and it's likely to be available 535 # early in the boot sequence. However, it's much slower than mtree. 536 # 537 # mknod is just very slow, because the shell has to fork for 538 # each device node. 539 # 540 if ! ( $do_mtree || $do_pax || $do_mknod || $do_specfile ); then 541 if check_mtree "${TOOL_MTREE}"; then 542 do_mtree=true 543 elif check_pax "${TOOL_PAX}"; then 544 do_pax=true 545 else 546 do_mknod=true 547 fi 548 fi 549 550 # Now we need exactly one node-creation method. 551 case $(( $($do_mtree && echo 1 || echo 0) + \ 552 $($do_pax && echo 1 || echo 0) + \ 553 $($do_mknod && echo 1 || echo 0) + \ 554 $($do_specfile && echo 1 || echo 0) )) 555 in 556 1) : OK ;; 557 *) die "-m, -p, -s, and -t options are mutually exclusive" ;; 558 esac 559 560 # If we are using mknod, then decide what options to pass it. 561 if $do_mknod; then 562 MKNOD="${TOOL_MKNOD:-mknod} -F netbsd" 563 if $do_force; then 564 MKNOD="${MKNOD} -R" 565 else 566 MKNOD="${MKNOD} -r" 567 fi 568 fi 569 570 # do_mtree or do_pax internally implies do_specfile. 571 # This happens after checking for mutually-exclusive options. 572 if ($do_mtree || $do_pax) && ! $do_specfile; then 573 do_specfile=true 574 opts="${opts} -s" 575 fi 576} 577 578# wrap_makedev makedev_name ... 579# Invoke a makedev-like function, with additional processing 580# as appropriate for use from the outer level. 581# 582wrap_makedev() 583{ 584 if $do_specfile; then 585 # "." must appear as the first line of the specfile. 586 # "optional" means do not create the directory itself. 587 echo ". type=dir optional" 588 fi 589 "$@" 590} 591 592# makedev_main makedev_name args... 593# Perform most of the work of the main program. makedev_name 594# is typically "makedev", but may be the name of some other 595# makedev-like function (if we are invoked from MAKEDEV.local or 596# some other script). The other args to this function are the 597# command line args with which the MAKEDEV (or MAKEDEV.local) 598# script was invoked. 599# 600makedev_main() 601{ 602 local makedev="$1" ; shift 603 604 # Parse command line args 605 setup ${1+"$@"} 606 shift $((${OPTIND}-1)) 607 608 if $do_create_mfs; then 609 # Count inodes and create mfs file system. 610 # The makedev call merely updates $count_nodes. 611 count_nodes=0 612 $makedev ${1+"$@"} 613 create_mfs_dev $count_nodes 614 unset count_nodes 615 fi 616 617 # If using mtree or pax, then wrap_makedev should print an mtree 618 # specification, which we postprocess to create the device nodes. 619 # Otherwise, wrap_makedev should do all the work itself. 620 if $do_mtree ; then 621 wrap_makedev $makedev ${1+"$@"} \ 622 | nooutput -1 "${TOOL_MTREE}" -e -U 623 elif $do_pax ; then 624 wrap_makedev $makedev ${1+"$@"} \ 625 | ( 626 # Run pax in an empty directory, so it pays 627 # attention only to the specfile, without being 628 # confused by the existing contents of the target 629 # directory. Without this, pax would complain "file 630 # would overwrite itself" for already-existing 631 # device nodes. 632 tmpdir=./tmp.$$ 633 mkdir "${tmpdir}" || die "can't create temporary directory" 634 cd "${tmpdir}" || die "can't cd to temporary directory" 635 "${TOOL_PAX}" -r -w -M -pe .. 636 status=$? 637 cd .. # back to where we started 638 rmdir "${tmpdir}" 639 exit $status 640 ) 641 else 642 wrap_makedev $makedev ${1+"$@"} 643 fi 644} 645 646# 647# functions available to create nodes: 648# 649# mkdev name [b|c] major minor [mode{=600} [gid{=0} [uid{=0}]]] 650# create device node `name' with the appropriate permissions 651# 652# lndev src target 653# create a symlink from src to target 654# 655# makedir dir mode 656# create directory with appropriate mode 657# 658 659mkdev() 660{ 661 if [ -n "$count_nodes" ]; then 662 count_nodes=$((count_nodes + 1)) 663 return 664 fi 665 if $do_specfile; then 666 case $2 in 667 b) type=block ;; 668 c) type=char ;; 669 esac 670 echo "./$1 type=${type} device=netbsd,$3,$4 mode=${5:-600} gid=${6:-$g_wheel} uid=${7:-$u_root}" 671 else 672 ${MKNOD} -m ${5:-600} -g \#${6:-$g_wheel} -u \#${7:-$u_root} $1 $2 $3 $4 673 fi 674} 675 676lndev() 677{ 678 if [ -n "$count_nodes" ]; then 679 count_nodes=$((count_nodes + 1)) 680 return 681 fi 682 if $do_specfile; then 683 echo "./$2 type=link link=$1 mode=0700 gid=$g_wheel uid=$u_root" 684 else 685 ln -f -s $1 $2 686 fi 687} 688 689makedir() 690{ 691 if [ -n "$count_nodes" ]; then 692 count_nodes=$((count_nodes + 1)) 693 return 694 fi 695 if $do_specfile; then 696 echo "./$1 type=dir mode=$2 gid=$g_wheel uid=$u_root" 697 else 698 nooutput -2 mkdir $1 699 chmod $2 $1 700 fi 701} 702 703warn() 704{ 705 echo 1>&2 "$0: $*" 706} 707 708die() 709{ 710 echo 1>&2 "$0: $*" 711 exit 1 712} 713 714# makedev special [...] 715# the main loop 716# 717makedev() 718{ 719 720for i 721do 722 723case $i in 724 725%MD_DEVICES% 726 727all) 728 makedev all_md 729 makedev std fd ptm pty0 pty1 pty2 pty3 730 makedev ccd0 ccd1 ccd2 ccd3 731 makedev cgd0 cgd1 cgd2 cgd3 732 makedev fss0 fss1 fss2 fss3 733 makedev md0 md1 734 makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7 735 makedev vnd0 vnd1 vnd2 vnd3 736 makedev bpf npf 737 makedev tun0 tun1 tun2 tun3 738 makedev ipl pf crypto random 739 makedev lockstat clockctl cpuctl 740 makedev atabus0 atabus1 atabus2 atabus3 741 makedev tap tap0 tap1 tap2 tap3 742 makedev gpio gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7 743 makedev pad pad0 pad1 pad2 pad3 744 makedev bthub 745 makedev putter 746 makedev drvctl 747 makedev video 748 makedev drm0 749 makedev altmem 750 makedev zfs 751 makedev local # do this last 752 ;; 753 754init) 755 # unless overridden by MD entry, this is equal to 'all' 756 makedev all 757 ;; 758 759%MI_DEVICES_BEGIN% 760audio) 761 makedev audio0 audio1 audio2 audio3 762 makedev hdaudio0 hdaudio1 hdaudio2 hdaudio3 763 lndev sound0 sound 764 lndev audio0 audio 765 lndev mixer0 mixer 766 lndev audioctl0 audioctl 767 ;; 768 769gpio) 770 makedev gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7 771 lndev gpio0 gpio 772 ;; 773 774pad) 775 makedev pad0 pad1 pad2 pad3 776 lndev pad0 pad 777 ;; 778 779radio) 780 makedev radio0 radio1 781 lndev radio0 radio 782 ;; 783 784video) 785 makedev video0 video1 video2 video3 786 ;; 787 788altmem) 789 makedev altmem0 altmem1 790 ;; 791 792ramdisk) 793 makedev floppy md0 794 ;; 795 796usbs) 797 makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7 798 makedev uhid0 uhid1 uhid2 uhid3 799 makedev ulpt0 ulpt1 800 makedev ttyU0 ttyU1 801 makedev ttyY0 ttyY1 802 makedev ttyHS0 803 makedev urio0 804 makedev uscanner0 uscanner1 805 makedev utoppy0 utoppy1 806 makedev ugen0 ugen1 ugen2 ugen3 807 ;; 808 809isdns) 810 makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdnteld0 isdnteld1 isdntrc0 isdntrc1 811 ;; 812 813std) 814 mkdev console c %cons_chr% 0 600 815 mkdev constty c %cons_chr% 1 600 816 mkdev drum c %swap_chr% 0 640 $g_kmem 817 mkdev kmem c %mem_chr% 1 640 $g_kmem 818 mkdev mem c %mem_chr% 0 640 $g_kmem 819 mkdev null c %mem_chr% 2 666 820 mkdev zero c %mem_chr% 12 666 821 mkdev klog c %log_chr% 0 600 822 mkdev ksyms c %ksyms_chr% 0 444 823 if ! $fdesc_mounted; then 824 mkdev tty c %ctty_chr% 0 666 825 mkdev stdin c %filedesc_chr% 0 666 826 mkdev stdout c %filedesc_chr% 1 666 827 mkdev stderr c %filedesc_chr% 2 666 828 fi 829 ;; 830 831usb) 832 mkdev usb c %usb_chr% 255 444 833 ;; 834 835usb*) 836 unit=${i#usb} 837 usb=usb$unit 838 mkdev usb$unit c %usb_chr% $unit 839 ;; 840 841uhid*) 842 unit=${i#uhid} 843 mkdev uhid$unit c %uhid_chr% $unit 666 844 ;; 845 846ulpt*) 847 unit=${i#ulpt} 848 mkdev ulpt$unit c %ulpt_chr% $unit 849 mkdev ulpn$unit c %ulpt_chr% $(($unit + 64)) 850 ;; 851 852urio*) 853 unit=${i#urio} 854 mkdev urio$unit c %urio_chr% $unit 666 855 ;; 856 857uscanner*) 858 unit=${i#uscanner} 859 mkdev uscanner$unit c %uscanner_chr% $unit 860 ;; 861 862utoppy*) 863 unit=${i#utoppy} 864 mkdev utoppy$unit c %utoppy_chr% $unit 865 ;; 866 867ttyHS*) 868 unit=${i#ttyHS} 869 for j in 00 01 02 03 04 05 06 07 08 09 10 870 do 871 base=$(($unit * 16 + ${j#0})) 872 mkdev ttyHS$unit.$j c %uhso_chr% $(($base + $dialin )) "" "" $u_uucp 873 mkdev dtyHS$unit.$j c %uhso_chr% $(($base + $dialout )) "" "" $u_uucp 874 mkdev ctyHS$unit.$j c %uhso_chr% $(($base + $callunit)) "" "" $u_uucp 875 done 876 ;; 877 878ttyY*) 879 unit=${i#ttyY} 880 mkdev ttyY$unit c %ucycom_chr% $(($unit + $dialin )) "" "" $u_uucp 881 mkdev dtyY$unit c %ucycom_chr% $(($unit + $dialout )) "" "" $u_uucp 882 mkdev ctyY$unit c %ucycom_chr% $(($unit + $callunit)) "" "" $u_uucp 883 ;; 884 885ttyU*) 886 unit=${i#ttyU} 887 mkdev ttyU$unit c %ucom_chr% $(($unit + $dialin )) "" "" $u_uucp 888 mkdev dtyU$unit c %ucom_chr% $(($unit + $dialout )) "" "" $u_uucp 889 mkdev ctyU$unit c %ucom_chr% $(($unit + $callunit)) "" "" $u_uucp 890 ;; 891 892ugen*) 893 unit=${i#ugen} 894 for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 895 do 896 mkdev ugen$unit.$j c %ugen_chr% $(($unit * 16 + ${j#0})) 897 done 898 ;; 899 900wscons) 901 makedev ttyE0 ttyE1 ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7 902 makedev wsmouse0 wsmouse1 wsmouse2 wsmouse3 903 makedev wskbd0 wskbd1 wskbd2 wskbd3 904 makedev wsmux0 wsmux1 wsmux2 wsmux3 905 makedev wsmouse wskbd 906 makedev ttyEcfg ttyEstat 907 makedev wsfont 908 ;; 909 910wsmouse) 911 mkdev wsmouse c %wsmux_chr% 0 912 ;; 913 914wskbd) 915 mkdev wskbd c %wsmux_chr% 1 916 ;; 917 918wsmux*) 919 unit=${i#wsmux} 920 mkdev wsmux$unit c %wsmux_chr% $unit 921 mkdev wsmuxctl$unit c %wsmux_chr% $(($unit + 128)) 200 922 ;; 923 924xenevt) 925 mkdev xenevt c %xenevt_chr% 0 926 ;; 927 928xsd_kva) 929 mkdev xsd_kva c %xenevt_chr% 1 930 ;; 931 932xencons) 933 mkdev xencons c %xencons_chr% 0 934 ;; 935 936ttyEstat) 937 mkdev ttyEstat c %wsdisplay_chr% 254 938 ;; 939 940ttyEcfg) 941 mkdev ttyEcfg c %wsdisplay_chr% 255 942 ;; 943 944ttyE*) 945 unit=${i#ttyE} 946 mkdev ttyE$unit c %wsdisplay_chr% $unit 947 ;; 948 949wsmouse*) 950 unit=${i#wsmouse} 951 mkdev wsmouse$unit c %wsmouse_chr% $unit 952 ;; 953 954wskbd*) 955 unit=${i#wskbd} 956 mkdev wskbd$unit c %wskbd_chr% $unit 957 ;; 958 959fd) 960 if ! $fdesc_mounted; then 961 makedir fd 755 962 n=0 963 while [ $n -lt 64 ] 964 do 965 mkdev fd/$n c %filedesc_chr% $n 666 966 n=$(($n + 1)) 967 done 968 fi 969 ;; 970 971wt*) 972 case $i in 973 wt*) name=wt; unit=${i#wt}; chr=%wt_chr%; blk=%wt_blk%;; 974 esac 975 for sub in $unit $(($unit+8)) $(($unit+16)) 976 do 977 mkdev $name$sub b $blk $(($sub + 0)) 660 $g_operator 978 mkdev n$name$sub b $blk $(($sub + 4)) 660 $g_operator 979 mkdev r$name$sub c $chr $(($sub + 0)) 660 $g_operator 980 mkdev nr$name$sub c $chr $(($sub + 4)) 660 $g_operator 981 done 982 ;; 983 984md*) 985 makedisk_minimal md ${i#md} %md_blk% %md_chr% 986 ;; 987 988fss*) 989 case $i in 990 fss*) name=fss; unit=${i#fss}; blk=%fss_blk%; chr=%fss_chr% 991 esac 992 mkdev $name$unit b $blk $unit 660 $g_operator 993 mkdev r$name$unit c $chr $unit 660 $g_operator 994 ;; 995 996ss*) 997 case $i in 998 ss*) name=ss; unit=${i#ss}; chr=%ss_chr%;; 999 esac 1000 mkdev $name$unit c $chr $(($unit * 16 + 0)) 640 $g_operator 1001 mkdev n$name$unit c $chr $(($unit * 16 + 1)) 640 $g_operator 1002 mkdev en$name$unit c $chr $(($unit * 16 + 3)) 640 $g_operator 1003 ;; 1004 1005ccd*|cgd*|raid*|vnd*) 1006 case $i in 1007 ccd*) name=ccd; unit=${i#ccd}; blk=%ccd_blk%; chr=%ccd_chr%;; 1008 cgd*) name=cgd; unit=${i#cgd}; blk=%cgd_blk%; chr=%cgd_chr%;; 1009 raid*) name=raid; unit=${i#raid}; blk=%raid_blk%; chr=%raid_chr%;; 1010 vnd*) name=vnd; unit=${i#vnd}; blk=%vnd_blk%; chr=%vnd_chr%;; 1011 esac 1012 %MKDISK% $name $unit $blk $chr 1013 ;; 1014 1015sd*) 1016 name=sd; unit=${i#sd}; blk=%sd_blk%; chr=%sd_chr% 1017 %MKDISK% $name $unit $blk $chr 1018 ;; 1019 1020wd*) 1021 name=wd; unit=${i#wd}; blk=%wd_blk%; chr=%wd_chr% 1022 %MKDISK% $name $unit $blk $chr 1023 ;; 1024 1025fd*) 1026 name=fd; unit=${i#fd}; blk=%fd_blk%; chr=%fd_chr% 1027 %MKDISK% $name $unit $blk $chr 1028 ;; 1029 1030ld*) 1031 name=ld; unit=${i#ld}; blk=%ld_blk%; chr=%ld_chr% 1032 %MKDISK% $name $unit $blk $chr 1033 ;; 1034 1035altmem*) 1036 name=altmem; unit=${i#altmem}; blk=%altmem_blk%; chr=%altmem_chr% 1037 %MKDISK% $name $unit $blk $chr 1038 ;; 1039 1040bio) 1041 mkdev bio c %bio_chr% 0 1042 ;; 1043 1044ed*) 1045 name=ed; unit=${i#ed}; blk=%ed_blk%; chr=%ed_chr% 1046 %MKDISK% $name $unit $blk $chr 1047 ;; 1048 1049ofdisk*) 1050 name=ofdisk; unit=${i#ofdisk}; blk=%ofdisk_blk%; chr=%ofdisk_chr% 1051 %MKDISK% $name $unit $blk $chr 1052 ;; 1053 1054xbd*) 1055 name=xbd; unit=${i#xbd}; blk=%xbd_blk%; chr=%xbd_chr% 1056 %MKDISK% $name $unit $blk $chr 1057 ;; 1058 1059dk*) 1060 name=dk; unit=${i#dk}; blk=%dk_blk%; chr=%dk_chr% 1061 minor=0 1062 while [ $minor -le ${i#dk} ] 1063 do 1064 mkdev r$name$minor c $chr $minor 0640 $g_operator 1065 mkdev $name$minor b $blk $minor 0640 $g_operator 1066 minor=$(($minor + 1)) 1067 done 1068 ;; 1069 1070ttyCY*) 1071 name=tyCY; chr=%cy_chr%; off=32 1072 unit=${i#t${name}} 1073 minor=$(($unit * $off)) 1074 eminor=$(($minor + $off)) 1075 while [ $minor -lt $eminor ] 1076 do 1077 nminor=000$minor 1078 nminor=${nminor#${nminor%???}} 1079 mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp 1080 mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp 1081 minor=$(($minor + 1)) 1082 done 1083 ;; 1084 1085ttyCZ*) 1086 name=tyCZ; chr=%cz_chr%; off=64 1087 unit=${i#t${name}} 1088 minor=$(($unit * $off)) 1089 eminor=$(($minor + $off)) 1090 while [ $minor -lt $eminor ] 1091 do 1092 nminor=0000$minor 1093 nminor=${nminor#${nminor%????}} 1094 mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp 1095 mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp 1096 minor=$(($minor + 1)) 1097 done 1098 ;; 1099 1100 1101tty[0-9]|tty0[0-9]) 1102 # some archs have built-in zstty (major %zstty_chr%) instead 1103 # of NS16550; create ttyZ* and hardlink as [dt]ty0*; this 1104 # needs to be before com entry, for archs which have both 1105 unit=${i#tty} 1106 unit=$(($unit + 0)) 1107 makedev ttyZ${unit} 1108 lndev ttyZ$unit tty0${unit} 1109 lndev dtyZ$unit dty0${unit} 1110 ;; 1111 1112tty0*|tty1*|tty[0-9]) 1113 unit=${i#tty} 1114 ounit=00$unit 1115 ounit=${ounit#${ounit%??}} 1116 mkdev tty$ounit c %com_chr% $(($unit + $dialin )) "" "" $u_uucp 1117 mkdev dty$ounit c %com_chr% $(($unit + $dialout)) "" "" $u_uucp 1118 ;; 1119 1120ttyC*) 1121 # some archs call com_chr ttyC traditionally 1122 unit=${i#ttyC}; name=ttyC; dname=dtyC; chr=%com_chr% 1123 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1124 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1125 ;; 1126 1127ttyh*) 1128 unit=${i#ttyh}; name=ttyh; dname=dtyh; chr=%sabtty_chr% 1129 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1130 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1131 ;; 1132 1133ttyTX*) 1134 unit=${i#ttyTX}; name=ttyTX0; dname=dtyTX0; chr=%txcom_chr% 1135 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1136 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1137 ;; 1138 1139ttyZ*) 1140 unit=${i#ttyZ}; name=ttyZ; dname=dtyZ; chr=%zstty_chr% 1141 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1142 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1143 ;; 1144 1145opty) 1146 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f 1147 do 1148 case $j in 1149 [0-9]) jn=$j ;; 1150 a) jn=10 ;; 1151 b) jn=11 ;; 1152 c) jn=12 ;; 1153 d) jn=13 ;; 1154 e) jn=14 ;; 1155 f) jn=15 ;; 1156 esac 1157 mkdev ttyp$j c %pts_chr% $jn 666 1158 mkdev ptyp$j c %ptc_chr% $jn 666 1159 done 1160 ;; 1161 1162pty*) 1163 class=${i#pty} 1164 d1="p q r s t u v w x y z P Q R S T" 1165 if [ "$class" -ge 64 ] 1166 then 1167 warn "$i: pty unit must be between 0 and 63" 1168 continue 1169 elif [ "$class" -lt 16 ] 1170 then 1171 offset=0 1172 mult=0 1173 d2="0 1 2 3 4 5 6 7 8 9 a b c d e f" 1174 else 1175 class=$(($class - 16)) 1176 offset=256 1177 mult=2 1178 d2="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" 1179 fi 1180 start=$(($class * 16)) 1181 set -- $d2 1182 nt=$# 1183 s1=$(($start / $nt)) 1184 set -- $d1 1185 shift $s1 1186 t1=$1 1187 if [ "$t1" = v ]; then 1188 warn "$i: pty unit conflicts with console ttyv0 device" 1189 continue 1190 fi 1191 s2=$(($start % ($nt - $s1 * $mult))) 1192 set -- $d2 1193 shift $s2 1194 t2=$1 1195 unit=$(($start + $offset - $s1 * $mult)) 1196 end=$(($unit + 16)) 1197 while [ "$unit" -lt "$end" ] 1198 do 1199 mkdev tty$t1$t2 c %pts_chr% $unit 666 1200 mkdev pty$t1$t2 c %ptc_chr% $unit 666 1201 shift 1202 t2=$1 1203 if [ -z "$t2" ] 1204 then 1205 break 1206 fi 1207 unit=$(($unit + 1)) 1208 done 1209 ;; 1210 1211stic*) 1212 unit=${i#stic} 1213 mkdev stic$unit c %stic_chr% $unit 1214 ;; 1215 1216st*) 1217 case $i in 1218 st*) name=st; unit=${i#st}; chr=%st_chr%; blk=%st_blk%;; 1219 esac 1220 mkdev $name$unit b $blk $(($unit * 16 + 0)) 660 $g_operator 1221 mkdev n$name$unit b $blk $(($unit * 16 + 1)) 660 $g_operator 1222 mkdev e$name$unit b $blk $(($unit * 16 + 2)) 660 $g_operator 1223 mkdev en$name$unit b $blk $(($unit * 16 + 3)) 660 $g_operator 1224 mkdev r$name$unit c $chr $(($unit * 16 + 0)) 660 $g_operator 1225 mkdev nr$name$unit c $chr $(($unit * 16 + 1)) 660 $g_operator 1226 mkdev er$name$unit c $chr $(($unit * 16 + 2)) 660 $g_operator 1227 mkdev enr$name$unit c $chr $(($unit * 16 + 3)) 660 $g_operator 1228 ;; 1229 1230ses*|ch*|uk*) 1231 case $i in 1232 ch*) name=ch; unit=${i#ch}; chr=%ch_chr%;; 1233 uk*) name=uk; unit=${i#uk}; chr=%uk_chr%;; 1234 ses*) name=ses; unit=${i#ses}; chr=%ses_chr%;; 1235 esac 1236 mkdev $name$unit c $chr $unit 640 $g_operator 1237 ;; 1238 1239cd*) 1240 makedisk_minimal cd ${i#cd} %cd_blk% %cd_chr% 1241 ;; 1242 1243mcd*) 1244 makedisk_minimal mcd ${i#mcd} %mcd_blk% %mcd_chr% 1245 ;; 1246 1247gdrom*) 1248 makedisk_minimal gdrom ${i#gdrom} %gdrom_blk% %gdrom_chr% 1249 ;; 1250 1251lpt*|lpa*) 1252 case $i in 1253 lpt*) name=lpt; unit=${i#lpt}; chr=%lpt_chr%; flags=0;; 1254 lpa*) name=lpa; unit=${i#lpa}; chr=%lpt_chr%; flags=128;; 1255 esac 1256 mkdev $name$unit c $chr $(($unit + $flags)) 1257 mkdev lpt${unit}ctl c $chr $(($unit + 256)) 1258 ;; 1259 1260bpf) 1261 mkdev bpf c %bpf_chr% 0 1262 lndev bpf bpf0 1263 ;; 1264 1265npf) 1266 mkdev npf c %npf_chr% 0 1267 ;; 1268 1269bthub) 1270 mkdev bthub c %bthub_chr% 0 1271 ;; 1272 1273tun*) 1274 unit=${i#tun} 1275 mkdev tun$unit c %tun_chr% $unit 1276 ;; 1277 1278joy*) 1279 unit=${i#joy} 1280 mkdev joy$unit c %joy_chr% $unit 1281 ;; 1282 1283ipl) 1284 mkdev ipl c %ipl_chr% 0 1285 mkdev ipnat c %ipl_chr% 1 1286 mkdev ipstate c %ipl_chr% 2 1287 mkdev ipauth c %ipl_chr% 3 1288 mkdev ipsync c %ipl_chr% 4 1289 mkdev ipscan c %ipl_chr% 5 1290 mkdev iplookup c %ipl_chr% 6 1291 ;; 1292 1293pf) 1294 mkdev pf c %pf_chr% 0 1295 ;; 1296 1297crypto) 1298 mkdev crypto c %crypto_chr% 0 666 1299 ;; 1300 1301cmos) 1302 mkdev cmos c %cmos_chr% 0 644 1303 ;; 1304 1305speaker) 1306 mkdev speaker c %spkr_chr% 0 1307 ;; 1308 1309lockstat) 1310 mkdev lockstat c %lockstat_chr% 0 1311 ;; 1312 1313cpuctl) 1314 mkdev cpuctl c %cpuctl_chr% 0 666 1315 ;; 1316 1317audio*) 1318 unit=${i#audio} 1319 audio=audio$unit 1320 sound=sound$unit 1321 mixer=mixer$unit 1322 audioctl=audioctl$unit 1323 : ${unit:-0} 1324 mkdev $sound c %audio_chr% $(($unit + 0)) 666 1325 mkdev $audio c %audio_chr% $(($unit + 128)) 666 1326 mkdev $mixer c %audio_chr% $(($unit + 16)) 666 1327 mkdev $audioctl c %audio_chr% $(($unit + 192)) 666 1328 ;; 1329 1330hdaudio*) 1331 unit=${i#hdaudio} 1332 mkdev hdaudio$unit c %hdaudio_chr% $unit 644 1333 ;; 1334 1335gpio*) 1336 unit=${i#gpio} 1337 mkdev gpio$unit c %gpio_chr% $unit 644 1338 ;; 1339 1340rmidi*) 1341 unit=${i#rmidi} 1342 mkdev rmidi$unit c %midi_chr% $unit 666 1343 ;; 1344 1345music*) 1346 unit=${i#music} 1347 : ${unit:-0} 1348 mkdev music$unit c %sequencer_chr% $(($unit + 0)) 666 1349 mkdev sequencer$unit c %sequencer_chr% $(($unit + 128)) 666 1350 ;; 1351 1352radio*) 1353 unit=${i#radio} 1354 : ${unit:-0} 1355 mkdev radio$unit c %radio_chr% $unit 666 1356 ;; 1357 1358video*) 1359 unit=${i#video} 1360 : ${unit:-0} 1361 mkdev video$unit c %video_chr% $unit 666 1362 ;; 1363 1364amr*) 1365 unit=${i#amr} 1366 mkdev amr$unit c %amr_chr% $unit 1367 ;; 1368 1369apm) 1370 mkdev apm c %apm_chr% 0 644 1371 mkdev apmctl c %apm_chr% 8 644 1372 ;; 1373 1374apm) 1375 # hpcmips uses `apmdev_chr' instead of `apm_chr' 1376 mkdev apm c %apmdev_chr% 0 644 1377 mkdev apmctl c %apmdev_chr% 8 644 1378 ;; 1379 1380satlink*) 1381 unit=${i#satlink} 1382 mkdev satlink$unit c %satlink_chr% $unit 444 1383 ;; 1384 1385random) 1386 mkdev random c %rnd_chr% 0 444 1387 mkdev urandom c %rnd_chr% 1 644 1388 ;; 1389 1390cfs) 1391 makedev cfs0 1392 ;; 1393 1394cfs*) 1395 unit=${i#cfs} 1396 mkdev cfs$unit c %vcoda_chr% $unit 1397 ;; 1398 1399sysmon) 1400 mkdev sysmon c %sysmon_chr% 0 644 1401 mkdev watchdog c %sysmon_chr% 1 644 1402 mkdev power c %sysmon_chr% 2 640 1403 ;; 1404 1405scsibus*) 1406 unit=${i#scsibus} 1407 mkdev scsibus$unit c %scsibus_chr% $unit 644 1408 ;; 1409 1410bktr) 1411 makedev bktr0 bktr1 1412 lndev bktr0 bktr 1413 lndev tuner0 tuner 1414 lndev vbi0 vbi 1415 ;; 1416 1417bktr*) 1418 unit=${i#bktr} 1419 mkdev bktr$unit c %bktr_chr% $(($unit + 0)) 444 1420 mkdev tuner$unit c %bktr_chr% $(($unit + 16)) 444 1421 mkdev vbi$unit c %bktr_chr% $(($unit + 32)) 444 1422 ;; 1423 1424io) 1425 mkdev io c %mem_chr% 14 600 1426 ;; 1427 1428iop*) 1429 unit=${i#iop} 1430 mkdev iop$unit c %iop_chr% $unit 1431 ;; 1432 1433mlx*) 1434 unit=${i#mlx} 1435 mkdev mlx$unit c %mlx_chr% $unit 1436 ;; 1437 1438mly*) 1439 unit=${i#mly} 1440 mkdev mly$unit c %mly_chr% $unit 1441 ;; 1442 1443twa*) 1444 unit=${i#twa} 1445 mkdev twa$unit c %twa_chr% $unit 1446 ;; 1447 1448twe*) 1449 unit=${i#twe} 1450 mkdev twe$unit c %twe_chr% $unit 1451 ;; 1452 1453icp*) 1454 unit=${i#icp} 1455 mkdev icp$unit c %icp_chr% $unit 1456 ;; 1457 1458agp*) 1459 unit=${i#agp} 1460 mkdev agp$unit c %agp_chr% $unit 644 1461 if [ "$unit" = "0" ]; then 1462 lndev agp$unit agpgart 1463 fi 1464 ;; 1465 1466pci*) 1467 unit=${i#pci} 1468 mkdev pci$unit c %pci_chr% $unit 644 1469 ;; 1470 1471dpti*) 1472 unit=${i#dpti} 1473 mkdev dpti$unit c %dpti_chr% $unit 1474 ;; 1475 1476dpt*) 1477 unit=${i#dpt} 1478 mkdev dpt$unit c %dpt_chr% $unit 1479 ;; 1480 1481altq) 1482 makedir altq 755 1483 unit=0 1484 for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq jobs 1485 do 1486 mkdev altq/$dev c %altq_chr% $unit 644 1487 unit=$(($unit + 1)) 1488 done 1489 ;; 1490 1491isdn) 1492 mkdev isdn c %isdn_chr% 0 1493 ;; 1494 1495isdnctl) 1496 mkdev isdnctl c %isdnctl_chr% 0 1497 ;; 1498 1499isdnbchan*) 1500 unit=${i#isdnbchan} 1501 mkdev isdnbchan$unit c %isdnbchan_chr% $unit 1502 ;; 1503 1504isdnteld*) 1505 unit=${i#isdnteld} 1506 mkdev isdnteld$unit c %isdntel_chr% $(($unit + 64)) 1507 ;; 1508 1509isdntel*) 1510 unit=${i#isdntel} 1511 mkdev isdntel$unit c %isdntel_chr% $unit 1512 ;; 1513 1514isdntrc*) 1515 unit=${i#isdntrc} 1516 mkdev isdntrc$unit c %isdntrc_chr% $unit 1517 ;; 1518 1519vmegen) 1520 makedev vmegen0 vmegen1 vmegen2 vmegen3 1521 ;; 1522 1523vmegen*) 1524 unit=${i#vmegen} 1525 mkdev vmegen$unit c %vmegeneric_chr% $(($unit * 16 + 0)) 1526 ;; 1527 1528wsfont) 1529 mkdev wsfont c %wsfont_chr% 0 1530 ;; 1531 1532cir*) 1533 unit=${i#cir} 1534 mkdev cir$unit c %cir_chr% $unit 666 1535 ;; 1536 1537irframe*) 1538 unit=${i#irframe} 1539 mkdev irframe$unit c %irframe_chr% $unit 1540 ;; 1541 1542fcom*) 1543 unit=${i#fcom} 1544 mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp 1545 ;; 1546 1547openfirm) 1548 mkdev openfirm c %openfirm_chr% 0 444 1549 ;; 1550 1551pad*) 1552 unit=${i#pad} 1553 mkdev pad$unit c %pad_chr% $unit 444 1554 ;; 1555 1556nvram) 1557 mkdev nvram c %nvram_chr% 0 644 1558 ;; 1559 1560rtc) 1561 mkdev rtc c %rtc_chr% 0 644 1562 ;; 1563 1564clockctl) 1565 mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd 1566 ;; 1567 1568nsmb) 1569 makedev nsmb0 nsmb1 nsmb2 nsmb3 1570 ;; 1571 1572nsmb*) 1573 unit=${i#nsmb} 1574 mkdev nsmb$unit c %nsmb_chr% $unit 644 1575 ;; 1576 1577kttcp) 1578 mkdev kttcp c %kttcp_chr% 0 1579 ;; 1580 1581dmoverio) 1582 mkdev dmoverio c %dmoverio_chr% 0 644 1583 ;; 1584 1585veriexec) 1586 mkdev veriexec c %veriexec_chr% 0 600 1587 ;; 1588 1589ttyv*) 1590 unit=${i#ttyv} 1591 mkdev ttyv$unit c %pc_chr% $unit 1592 ;; 1593 1594# arm, acorn32 1595ttyv*) 1596 unit=${i#ttyv} 1597 mkdev ttyv$unit c %physcon_chr% $unit 1598 ;; 1599 1600arcpp*) 1601 unit=${i#arcpp} 1602 mkdev arcpp$unit c %arcpp_chr% $unit 1603 ;; 1604 1605par*) 1606 unit=${i#par} 1607 case $unit in 1608 0) 1609 mkdev par$unit c %par_chr% $unit 1610 ;; 1611 *) 1612 warn "bad unit for par in: $i" 1613 ;; 1614 esac 1615 ;; 1616 1617cpi*) 1618 unit=${i#cpi} 1619 mkdev cpi$unit c %cpi_chr% $unit 1620 ;; 1621 1622ite*|ttye*) 1623 case $i in 1624 ite*) unit=${i#ite};; 1625 ttye*) unit=${i#ttye};; 1626 esac 1627 mkdev ttye$unit c %ite_chr% $unit 1628 ;; 1629 1630pms*) 1631 unit=${i#pms} 1632 mkdev pms$unit c %opms_chr% $unit 1633 ;; 1634 1635qms*) 1636 unit=${i#qms} 1637 mkdev qms$unit c %qms_chr% $unit 1638 ;; 1639 1640lms*) 1641 unit=${i#lms} 1642 mkdev lms$unit c %lms_chr% $unit 1643 ;; 1644 1645mms*) 1646 unit=${i#mms} 1647 mkdev mms$unit c %mms_chr% $unit 1648 ;; 1649 1650mouse-*) 1651 case $i in 1652 mouse-pms*) name=pms ;; 1653 mouse-qms*) name=qms ;; 1654 esac 1655 unit=${i#mouse-${name}} 1656 lndev $name$unit mouse 1657 ;; 1658 1659kbd) 1660 mkdev kbd c %kbd_chr% 0 1661 ;; 1662 1663kbdctl) 1664 mkdev kbdctl c %kbd_chr% 1 1665 ;; 1666 1667vidcconsole0) 1668 mkdev vidcconsole0 c %vidcconsole_chr% 0 640 1669 ;; 1670 1671view*) 1672 unit=${i#view} 1673 mkdev view$unit c %view_chr% $unit 666 1674 ;; 1675 1676mouse*) 1677 unit=${i#mouse} 1678 case $unit in 1679 0|1) 1680 mkdev mouse$unit c %ms_chr% $unit 666 1681 if [ $unit = 0 ]; then 1682 lndev mouse$unit mouse 1683 fi 1684 ;; 1685 *) 1686 warn "bad unit for mouse in: $i" 1687 ;; 1688 esac 1689 ;; 1690 1691panel) 1692 mkdev panel0 c %panel_chr% 0 660 1693 ;; 1694 1695tslcd) 1696 mkdev tslcd0 c %tslcd_chr% 0 660 1697 ;; 1698 1699ipty) 1700 mkdev ttyp0 c %pts_chr% 0 666 1701 mkdev ttyp1 c %pts_chr% 1 666 1702 mkdev ptyp0 c %ptc_chr% 0 666 1703 mkdev ptyp1 c %ptc_chr% 1 666 1704 ;; 1705 1706ptm) 1707 makedir pts 755 1708 mkdev ptmx c %ptm_chr% 0 666 1709 mkdev ptm c %ptm_chr% 1 666 1710 ;; 1711 1712grf*) 1713 unit=${i#grf} 1714 mkdev grf$unit c %grf_chr% $unit 666 1715 ;; 1716 1717etvme) 1718 mkdev etvme c %et_chr% 0 1719 ;; 1720 1721leo*) 1722 unit=${i#leo} 1723 mkdev leo$unit c %leo_chr% $unit 1724 ;; 1725 1726scif*) 1727 unit=${i#scif} 1728 mkdev scif$unit c %scif_chr% $(($unit + $dialin )) "" "" $u_uucp 1729 mkdev dscif$unit c %scif_chr% $(($unit + $dialout)) "" "" $u_uucp 1730 ;; 1731 1732sci*) 1733 unit=${i#sci} 1734 mkdev sci$unit c %sci_chr% $(($unit + $dialin )) "" "" $u_uucp 1735 mkdev dsci$unit c %sci_chr% $(($unit + $dialout)) "" "" $u_uucp 1736 ;; 1737 1738maple*) 1739 case $i in 1740 mapleA*) name="mapleA"; unit=0;; 1741 mapleB*) name="mapleB"; unit=1;; 1742 mapleC*) name="mapleC"; unit=2;; 1743 mapleD*) name="mapleD"; unit=3;; 1744 esac 1745 subunit=${i#$name} 1746 mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit)) 1747 ;; 1748 1749mmem*) 1750 unit=${i#mmem} 1751 for pt in 0 # 1 2 3 4 ... 255 1752 do 1753# mkdev mmem${unit}.${pt}a b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator 1754 mkdev mmem${unit}.${pt}c b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator 1755# mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator 1756 mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator 1757 done 1758 ;; 1759 1760mlcd*) 1761 unit=${i#mlcd} 1762 for pt in 0 # 1 2 3 4 ... 255 1763 do 1764 mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator 1765 done 1766 ;; 1767 1768ixpcom*) 1769 unit=${i#ixpcom} 1770 mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp 1771 ;; 1772 1773epcom*) 1774 unit=${i#epcom} 1775 mkdev epcom$unit c %epcom_chr% $unit "" "" $u_uucp 1776 ;; 1777 1778ucbsnd) 1779 mkdev ucbsnd c %ucbsnd_chr% 0 666 1780 ;; 1781 1782adb) 1783 mkdev adb c %aed_chr% 0 666 1784 ;; 1785 1786asc*) 1787 unit=${i#asc} 1788 mkdev asc$unit c %asc_chr% $unit 666 1789 ;; 1790 1791bwtwo*) 1792 unit=${i#bwtwo} 1793 mkdev bwtwo$unit c %bwtwo_chr% $unit 666 1794 ;; 1795 1796cgtwo*) 1797 unit=${i#cgtwo} 1798 mkdev cgtwo$unit c %cgtwo_chr% $unit 666 1799 ;; 1800 1801cgthree*) 1802 unit=${i#cgthree} 1803 mkdev cgthree$unit c %cgthree_chr% $unit 666 1804 ;; 1805 1806cgfour*) 1807 unit=${i#cgfour} 1808 mkdev cgfour$unit c %cgfour_chr% $unit 666 1809 ;; 1810 1811cgsix*) 1812 unit=${i#cgsix} 1813 mkdev cgsix$unit c %cgsix_chr% $unit 666 1814 ;; 1815 1816cgeight*) 1817 unit=${i#cgeight} 1818 mkdev cgeight$unit c %cgeight_chr% $unit 666 1819 ;; 1820 1821tcx*) 1822 unit=${i#tcx} 1823 mkdev tcx$unit c %tcx_chr% $unit 666 1824 ;; 1825 1826xd*|xy*) 1827 case $i in 1828 xd*) name=xd; unit=${i#xd}; blk=%xd_blk%; chr=%xd_chr%;; 1829 xy*) name=xy; unit=${i#xy}; blk=%xy_blk%; chr=%xy_chr%;; 1830 esac 1831 %MKDISK% $name $unit $blk $chr 1832 ;; 1833 1834magma*) 1835 unit=${i#magma} 1836 if [ 0$unit -gt 3 ]; then 1837 warn "bad unit for $i: $unit" 1838 break 1839 fi 1840 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f 1841 do 1842 case $j in 1843 [0-9]) jn=$j ;; 1844 a) jn=10 ;; 1845 b) jn=11 ;; 1846 c) jn=12 ;; 1847 d) jn=13 ;; 1848 e) jn=14 ;; 1849 f) jn=15 ;; 1850 esac 1851 mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn)) 1852 done 1853 mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0)) 1854 mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1)) 1855 ;; 1856 1857clcd*) 1858 unit=${i#clcd} 1859 if [ 0$unit -gt 7 ]; then 1860 warn "bad unit for $i: $unit" 1861 break 1862 fi 1863 for j in 0 1 2 3 4 5 6 7 1864 do 1865 mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp 1866 mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp 1867 done 1868 ;; 1869 1870spif*) 1871 unit=${i#spif} 1872 if [ 0$unit -gt 3 ]; then 1873 warn "bad unit for $i: $unit" 1874 break 1875 fi 1876 for j in 0 1 2 3 4 5 6 7; do 1877 mkdev ttyS$unit$j c 102 $(($unit * 64 + $j)) "" "" $u_uucp 1878 done 1879 mkdev bppS${unit}0 c 103 $(($unit * 64 + 0)) 1880 mkdev bppS${unit}1 c 103 $(($unit * 64 + 1)) 1881 ;; 1882 1883bpp*) 1884 unit=${i#bpp} 1885 mkdev bpp$unit c %bpp_chr% $(($unit + 0)) 1886 ;; 1887 1888tctrl*) 1889 unit=${i#tctrl} 1890 mkdev tctrl$unit c %tctrl_chr% $unit 666 1891 ;; 1892 1893bmd*) 1894 unit=${i#bmd} 1895 mkdev bmd${unit}a b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator 1896 mkdev bmd${unit}c b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator 1897 mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator 1898 mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator 1899 ;; 1900 1901sram) 1902 mkdev sram c %sram_chr% 0 644 1903 ;; 1904 1905pow*) 1906 unit=${i#pow} 1907 case $unit in 1908 0|1) 1909 mkdev pow${unit} c %pow_chr% ${unit} 644 1910 if [ $unit = 0 ]; then 1911 lndev pow${unit} pow 1912 fi 1913 ;; 1914 *) 1915 warn "bad unit for pow in: $i" 1916 ;; 1917 esac 1918 ;; 1919 1920ttyS*) 1921 unit=${i#ttyS} 1922 mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp 1923 mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp 1924 ;; 1925 1926atabus*) 1927 unit=${i#atabus} 1928 mkdev atabus$unit c %atabus_chr% $unit 644 1929 ;; 1930 1931drm*) 1932 unit=${i#drm} 1933 makedir dri 755 1934 mkdev dri/card$unit c %drm_chr% $unit 660 1935 ;; 1936 1937drvctl) 1938 mkdev drvctl c %drvctl_chr% 0 644 1939 ;; 1940 1941isv) 1942 mkdev isv c %isv_chr% 0 644 1943 ;; 1944 1945tap*) 1946 unit=${i#tap} 1947 case "$unit" in 1948 [0-9]*) 1949 mkdev tap${unit} c %tap_chr% ${unit} 600 1950 ;; 1951 *) 1952 mkdev tap c %tap_chr% 0xfffff 600 1953 ;; 1954 esac 1955 ;; 1956 1957fw*) 1958 unit=${i#fw} 1959 for j in 0 1 2 3 1960 do 1961 mkdev fw${unit}.${j} c %fw_chr% $((${unit} * 256 + ${j})) 660 ${g_operator} 1962 mkdev fwmem${unit}.${j} c %fw_chr% $((65536 + ${unit} * 256 + ${j})) 660 ${g_operator} 1963 done 1964 ;; 1965 1966# create putter device and symlinks for all subsystems using it 1967putter) 1968 mkdev putter c %putter_chr% 0 600 1969 mkdev pud c %putter_chr% 1 600 1970 lndev putter puffs 1971 ;; 1972 1973zfs) 1974 mkdev zfs c %zfs_chr% 0 600 1975 makedir zpool 755 1976 ;; 1977 1978midevend) 1979%MI_DEVICES_END% 1980local) 1981 if [ -f "$0.local" ]; then 1982 umask 0 1983 if [ -n "$count_nodes" ]; then 1984 count_nodes=$((count_nodes + \ 1985 $(linecount "$(sh "$0.local" $opts -s all)") )) 1986 else 1987 sh "$0.local" $opts all 1988 fi 1989 umask 077 1990 fi 1991 ;; 1992 1993*) 1994 warn "$i: unknown device" 1995 ;; 1996 1997esac 1998done 1999 2000} 2001 2002 2003# three variants of disk partitions - max 8, max 16, max 16 with highpartoffset 2004# hack; only the one used by port is retained in final MAKEDEV script 2005# routine is called as: 2006# makedisk name unit blk chr 2007makedisk_p8() 2008{ 2009 name="$1"; unit="$2"; blk="$3"; chr="$4" 2010 2011 mkdev ${name}${unit}a b $blk $(($unit * 8 + 0)) 640 $g_operator 2012 mkdev ${name}${unit}b b $blk $(($unit * 8 + 1)) 640 $g_operator 2013 mkdev ${name}${unit}c b $blk $(($unit * 8 + 2)) 640 $g_operator 2014 mkdev ${name}${unit}d b $blk $(($unit * 8 + 3)) 640 $g_operator 2015 mkdev ${name}${unit}e b $blk $(($unit * 8 + 4)) 640 $g_operator 2016 mkdev ${name}${unit}f b $blk $(($unit * 8 + 5)) 640 $g_operator 2017 mkdev ${name}${unit}g b $blk $(($unit * 8 + 6)) 640 $g_operator 2018 mkdev ${name}${unit}h b $blk $(($unit * 8 + 7)) 640 $g_operator 2019 mkdev r${name}${unit}a c $chr $(($unit * 8 + 0)) 640 $g_operator 2020 mkdev r${name}${unit}b c $chr $(($unit * 8 + 1)) 640 $g_operator 2021 mkdev r${name}${unit}c c $chr $(($unit * 8 + 2)) 640 $g_operator 2022 mkdev r${name}${unit}d c $chr $(($unit * 8 + 3)) 640 $g_operator 2023 mkdev r${name}${unit}e c $chr $(($unit * 8 + 4)) 640 $g_operator 2024 mkdev r${name}${unit}f c $chr $(($unit * 8 + 5)) 640 $g_operator 2025 mkdev r${name}${unit}g c $chr $(($unit * 8 + 6)) 640 $g_operator 2026 mkdev r${name}${unit}h c $chr $(($unit * 8 + 7)) 640 $g_operator 2027} 2028 2029makedisk_p16() 2030{ 2031 name="$1"; unit="$2"; blk="$3"; chr="$4" 2032 2033 mkdev ${name}${unit}a b $blk $(($unit * 16 + 0)) 640 $g_operator 2034 mkdev ${name}${unit}b b $blk $(($unit * 16 + 1)) 640 $g_operator 2035 mkdev ${name}${unit}c b $blk $(($unit * 16 + 2)) 640 $g_operator 2036 mkdev ${name}${unit}d b $blk $(($unit * 16 + 3)) 640 $g_operator 2037 mkdev ${name}${unit}e b $blk $(($unit * 16 + 4)) 640 $g_operator 2038 mkdev ${name}${unit}f b $blk $(($unit * 16 + 5)) 640 $g_operator 2039 mkdev ${name}${unit}g b $blk $(($unit * 16 + 6)) 640 $g_operator 2040 mkdev ${name}${unit}h b $blk $(($unit * 16 + 7)) 640 $g_operator 2041 mkdev ${name}${unit}i b $blk $(($unit * 16 + 8)) 640 $g_operator 2042 mkdev ${name}${unit}j b $blk $(($unit * 16 + 9)) 640 $g_operator 2043 mkdev ${name}${unit}k b $blk $(($unit * 16 + 10)) 640 $g_operator 2044 mkdev ${name}${unit}l b $blk $(($unit * 16 + 11)) 640 $g_operator 2045 mkdev ${name}${unit}m b $blk $(($unit * 16 + 12)) 640 $g_operator 2046 mkdev ${name}${unit}n b $blk $(($unit * 16 + 13)) 640 $g_operator 2047 mkdev ${name}${unit}o b $blk $(($unit * 16 + 14)) 640 $g_operator 2048 mkdev ${name}${unit}p b $blk $(($unit * 16 + 15)) 640 $g_operator 2049 mkdev r${name}${unit}a c $chr $(($unit * 16 + 0)) 640 $g_operator 2050 mkdev r${name}${unit}b c $chr $(($unit * 16 + 1)) 640 $g_operator 2051 mkdev r${name}${unit}c c $chr $(($unit * 16 + 2)) 640 $g_operator 2052 mkdev r${name}${unit}d c $chr $(($unit * 16 + 3)) 640 $g_operator 2053 mkdev r${name}${unit}e c $chr $(($unit * 16 + 4)) 640 $g_operator 2054 mkdev r${name}${unit}f c $chr $(($unit * 16 + 5)) 640 $g_operator 2055 mkdev r${name}${unit}g c $chr $(($unit * 16 + 6)) 640 $g_operator 2056 mkdev r${name}${unit}h c $chr $(($unit * 16 + 7)) 640 $g_operator 2057 mkdev r${name}${unit}i c $chr $(($unit * 16 + 8)) 640 $g_operator 2058 mkdev r${name}${unit}j c $chr $(($unit * 16 + 9)) 640 $g_operator 2059 mkdev r${name}${unit}k c $chr $(($unit * 16 + 10)) 640 $g_operator 2060 mkdev r${name}${unit}l c $chr $(($unit * 16 + 11)) 640 $g_operator 2061 mkdev r${name}${unit}m c $chr $(($unit * 16 + 12)) 640 $g_operator 2062 mkdev r${name}${unit}n c $chr $(($unit * 16 + 13)) 640 $g_operator 2063 mkdev r${name}${unit}o c $chr $(($unit * 16 + 14)) 640 $g_operator 2064 mkdev r${name}${unit}p c $chr $(($unit * 16 + 15)) 640 $g_operator 2065} 2066 2067makedisk_p16high() 2068{ 2069 ho=524280 # offset for partition 9 to 16 2070 name="$1"; unit="$2"; blk="$3"; chr="$4" 2071 2072 mkdev ${name}${unit}a b $blk $(($unit * 8 + 0)) 640 $g_operator 2073 mkdev ${name}${unit}b b $blk $(($unit * 8 + 1)) 640 $g_operator 2074 mkdev ${name}${unit}c b $blk $(($unit * 8 + 2)) 640 $g_operator 2075 mkdev ${name}${unit}d b $blk $(($unit * 8 + 3)) 640 $g_operator 2076 mkdev ${name}${unit}e b $blk $(($unit * 8 + 4)) 640 $g_operator 2077 mkdev ${name}${unit}f b $blk $(($unit * 8 + 5)) 640 $g_operator 2078 mkdev ${name}${unit}g b $blk $(($unit * 8 + 6)) 640 $g_operator 2079 mkdev ${name}${unit}h b $blk $(($unit * 8 + 7)) 640 $g_operator 2080 mkdev ${name}${unit}i b $blk $(($unit * 8 + $ho + 8)) 640 $g_operator 2081 mkdev ${name}${unit}j b $blk $(($unit * 8 + $ho + 9)) 640 $g_operator 2082 mkdev ${name}${unit}k b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator 2083 mkdev ${name}${unit}l b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator 2084 mkdev ${name}${unit}m b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator 2085 mkdev ${name}${unit}n b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator 2086 mkdev ${name}${unit}o b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator 2087 mkdev ${name}${unit}p b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator 2088 mkdev r${name}${unit}a c $chr $(($unit * 8 + 0)) 640 $g_operator 2089 mkdev r${name}${unit}b c $chr $(($unit * 8 + 1)) 640 $g_operator 2090 mkdev r${name}${unit}c c $chr $(($unit * 8 + 2)) 640 $g_operator 2091 mkdev r${name}${unit}d c $chr $(($unit * 8 + 3)) 640 $g_operator 2092 mkdev r${name}${unit}e c $chr $(($unit * 8 + 4)) 640 $g_operator 2093 mkdev r${name}${unit}f c $chr $(($unit * 8 + 5)) 640 $g_operator 2094 mkdev r${name}${unit}g c $chr $(($unit * 8 + 6)) 640 $g_operator 2095 mkdev r${name}${unit}h c $chr $(($unit * 8 + 7)) 640 $g_operator 2096 mkdev r${name}${unit}i c $chr $(($unit * 8 + $ho + 8)) 640 $g_operator 2097 mkdev r${name}${unit}j c $chr $(($unit * 8 + $ho + 9)) 640 $g_operator 2098 mkdev r${name}${unit}k c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator 2099 mkdev r${name}${unit}l c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator 2100 mkdev r${name}${unit}m c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator 2101 mkdev r${name}${unit}n c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator 2102 mkdev r${name}${unit}o c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator 2103 mkdev r${name}${unit}p c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator 2104} 2105 2106# make only the very few basic disk device nodes - 'a' partition 2107# and raw partition 2108makedisk_minimal() 2109{ 2110 name=$1; unit=$2; blk=$3; chr=$4 2111 doff=%DISKMINOROFFSET% 2112 ro=%RAWDISK_OFF% 2113 rn=%RAWDISK_NAME% 2114 2115 mkdev ${name}${unit}a b $blk $(($unit * $doff + 0)) 640 $g_operator 2116 mkdev ${name}${unit}$rn b $blk $(($unit * $doff + $ro)) 640 $g_operator 2117 mkdev r${name}${unit}a c $chr $(($unit * $doff + 0)) 640 $g_operator 2118 mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator 2119} 2120 2121# create_mfs_dev nodes 2122# Create a memory file system for a given number of device nodes, 2123# and mount it. Attempts to use mount_tmpfs, or falls back to 2124# mount_mfs. 2125# 2126# If do_redirect, then also redirect output to the console. 2127# 2128create_mfs_dev() 2129{ 2130 ndevnodes=${1-1200} 2131 dev_mountpoint=${PWD:-/dev} 2132 2133 # Number of inodes is the specified number of device nodes, plus 2134 # a margin to allow for extra device nodes created later. 2135 ninode=$((ndevnodes * 11 / 10)) 2136 # Add 2 reserved inodes (needed for both mfs and tmpfs), and round 2137 # up to a multiple of 32 (needed for mfs, not needed for tmpfs). 2138 ninode=$(( (ninode + 2 + 31) / 32 * 32 )) 2139 # Try tmpfs; if that fails try mfs. 2140 # 2141 # For tmpfs, allocate 16KB and 512 byte per node. 2142 # Actual requirements are much lower, but the size limit 2143 # is only intended to avoid accidental writing to /dev. 2144 fs_bytes=$((16384 + ninode * 512)) 2145 if mount_tmpfs -s $fs_bytes -n $ninode -m 0755 \ 2146 -o union tmpfs "$dev_mountpoint" 2147 then 2148 fstype=tmpfs 2149 else 2150 # This file system size calculation is exact for mount_mfs(8) 2151 # with 512-byte sectors. 40960 bytes (80 blocks) is the 2152 # minimum size allowed by mount_mfs. 2153 fs_bytes=$((8192 + 2 * 8192 + 4096 + ninode*512 + 8192)) 2154 [ "$fs_bytes" -lt 40960 ] && fs_bytes=40960 2155 fs_blocks=$((fs_bytes/512)) 2156 if mount_mfs -b 4096 -f 512 -s $fs_blocks -n $ninode -p 0755 \ 2157 -o union swap "$dev_mountpoint" 2158 then 2159 fstype=mfs 2160 else 2161 die "Failed to create memory file system" 2162 fi 2163 fi 2164 2165 # Our current directory was in the lower file system; change it to 2166 # the newly mounted upper file system. 2167 cd "$dev_mountpoint" 2168 2169 if $do_redirect; then 2170 # Redirect stdout and stderr to console 2171 mknod -m 600 -g 0 -u 0 temp_console c 0 0 2172 exec >temp_console 2>&1 2173 rm temp_console 2174 fi 2175 2176 echo "Created $fstype $dev_mountpoint" \ 2177 "($fs_bytes byte, $ninode inodes)" 2178} 2179 2180# 2181# MAIN: If MAKEDEV_AS_LIBRARY is set, then we are being used as a 2182# function library, so just return. Otherwise, do all the real work. 2183# 2184[ -n "${MAKEDEV_AS_LIBRARY}" ] && return 2185makedev_main makedev ${1+"$@"} 2186