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