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