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