MAKEDEV.tmpl revision 1.212
1#!/bin/sh - 2# $NetBSD: MAKEDEV.tmpl,v 1.212 2019/12/23 06:45:37 maxv 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 filemon 820 makedev fss0 fss1 fss2 fss3 821 makedev md0 md1 822 makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7 823 makedev vnd0 vnd1 vnd2 vnd3 824 makedev iscsi0 825 makedev bpf npf 826 makedev tun0 tun1 tun2 tun3 827 makedev ipl pf crypto random 828 makedev lockstat clockctl cpuctl 829 makedev atabus0 atabus1 atabus2 atabus3 atabus4 atabus5 atabus6 atabus7 830 makedev srt0 srt1 srt2 srt3 831 makedev tap tap0 tap1 tap2 tap3 832 makedev gpio gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7 833 makedev gpiopps0 834 makedev pad pad0 pad1 pad2 pad3 835 makedev bthub 836 makedev putter 837 makedev drvctl 838 makedev video 839 makedev dtv 840 makedev drm0 drm1 drm2 drm3 841 makedev altmem 842 makedev zfs 843 makedev lua 844 makedev hdmicec0 845 makedev dtrace 846 makedev veriexec 847 makedev autofs 848 makedev fw0 fw1 fw2 fw3 849 makedev local # do this last 850 ;; 851 852init) 853 # unless overridden by MD entry, this is equal to 'all' 854 makedev all opty 855 ;; 856 857%MI_DEVICES_BEGIN% 858audio) 859 makedev audio0 audio1 audio2 audio3 860 makedev hdaudio0 hdaudio1 hdaudio2 hdaudio3 861 lndev sound0 sound 862 lndev audio0 audio 863 lndev mixer0 mixer 864 lndev audioctl0 audioctl 865 ;; 866 867gpio) 868 makedev gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7 869 lndev gpio0 gpio 870 ;; 871 872gpiopps) 873 makedev gpiopps0 874 lndev gpiopps0 gpiopps 875 ;; 876 877lua) 878 makedev lua0 879 lndev lua0 lua 880 ;; 881 882pad) 883 makedev pad0 pad1 pad2 pad3 884 lndev pad0 pad 885 ;; 886 887qemufwcfg) 888 makedev qemufwcfg0 889 lndev qemufwcfg0 qemufwcfg 890 ;; 891 892radio) 893 makedev radio0 radio1 894 lndev radio0 radio 895 ;; 896 897video) 898 makedev video0 video1 video2 video3 899 ;; 900 901dtv) 902 makedev dtv0 dtv1 dtv2 dtv3 903 ;; 904 905iic) 906 makedev iic0 iic1 iic2 iic3 907 ;; 908 909altmem) 910 makedev altmem0 altmem1 911 ;; 912 913ramdisk) 914 makedev floppy md0 915 ;; 916 917usbs) 918 makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7 919 makedev usb8 usb9 usb10 usb11 usb12 usb13 usb14 usb15 920 makedev uhid0 uhid1 uhid2 uhid3 uhid4 uhid5 921 makedev uhid6 uhid7 uhid8 uhid9 uhid10 uhid11 922 makedev uhid12 uhid13 uhid14 uhid15 923 makedev ulpt0 ulpt1 924 makedev ttyU0 ttyU1 ttyU2 ttyU3 ttyU4 ttyU5 ttyU6 ttyU7 925 makedev ttyY0 ttyY1 926 makedev ttyHS0 927 makedev urio0 928 makedev uscanner0 uscanner1 929 makedev utoppy0 utoppy1 930 makedev ugen0 ugen1 ugen2 ugen3 931 ;; 932 933std) 934 mkdev console c %cons_chr% 0 600 935 mkdev constty c %cons_chr% 1 600 936 mkdev drum c %swap_chr% 0 640 $g_kmem 937 mkdev kmem c %mem_chr% 1 640 $g_kmem 938 mkdev mem c %mem_chr% 0 640 $g_kmem 939 mkdev null c %mem_chr% 2 666 940 mkdev full c %mem_chr% 11 666 941 mkdev zero c %mem_chr% 12 666 942 mkdev klog c %log_chr% 0 600 943 mkdev ksyms c %ksyms_chr% 0 440 $g_kmem 944 mkdev random c %rnd_chr% 0 444 945 mkdev urandom c %rnd_chr% 1 644 946 if ! $fdesc_mounted; then 947 mkdev tty c %ctty_chr% 0 666 948 mkdev stdin c %filedesc_chr% 0 666 949 mkdev stdout c %filedesc_chr% 1 666 950 mkdev stderr c %filedesc_chr% 2 666 951 fi 952 ;; 953 954usb) 955 mkdev usb c %usb_chr% 255 444 956 ;; 957 958usb[0-9]*) 959 unit=${i#usb} 960 usb=usb$unit 961 mkdev usb$unit c %usb_chr% $unit 962 ;; 963 964uhid[0-9]*) 965 unit=${i#uhid} 966 mkdev uhid$unit c %uhid_chr% $unit 666 967 ;; 968 969ulpt[0-9]*) 970 unit=${i#ulpt} 971 mkdev ulpt$unit c %ulpt_chr% $unit 972 mkdev ulpn$unit c %ulpt_chr% $(($unit + 64)) 973 ;; 974 975urio[0-9]*) 976 unit=${i#urio} 977 mkdev urio$unit c %urio_chr% $unit 666 978 ;; 979 980uscanner[0-9]*) 981 unit=${i#uscanner} 982 mkdev uscanner$unit c %uscanner_chr% $unit 983 ;; 984 985utoppy[0-9]*) 986 unit=${i#utoppy} 987 mkdev utoppy$unit c %utoppy_chr% $unit 988 ;; 989 990ttyHS[0-9]*) 991 unit=${i#ttyHS} 992 for j in 00 01 02 03 04 05 06 07 08 09 10 993 do 994 base=$(($unit * 16 + ${j#0})) 995 mkdev ttyHS$unit.$j c %uhso_chr% $(($base + $dialin )) "" "" $u_uucp 996 mkdev dtyHS$unit.$j c %uhso_chr% $(($base + $dialout )) "" "" $u_uucp 997 mkdev ctyHS$unit.$j c %uhso_chr% $(($base + $callunit)) "" "" $u_uucp 998 done 999 ;; 1000 1001ttyY[0-9]*) 1002 unit=${i#ttyY} 1003 mkdev ttyY$unit c %ucycom_chr% $(($unit + $dialin )) "" "" $u_uucp 1004 mkdev dtyY$unit c %ucycom_chr% $(($unit + $dialout )) "" "" $u_uucp 1005 mkdev ctyY$unit c %ucycom_chr% $(($unit + $callunit)) "" "" $u_uucp 1006 ;; 1007 1008ucom[0-9]*) 1009 makedev ttyU${i#ucom} 1010 ;; 1011 1012ttyU[0-9]*) 1013 unit=${i#ttyU} 1014 mkdev ttyU$unit c %ucom_chr% $(($unit + $dialin )) "" "" $u_uucp 1015 mkdev dtyU$unit c %ucom_chr% $(($unit + $dialout )) "" "" $u_uucp 1016 mkdev ctyU$unit c %ucom_chr% $(($unit + $callunit)) "" "" $u_uucp 1017 ;; 1018 1019ugen[0-9]*) 1020 unit=${i#ugen} 1021 for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 1022 do 1023 mkdev ugen$unit.$j c %ugen_chr% $(($unit * 16 + ${j#0})) 1024 done 1025 ;; 1026 1027wscons) 1028 makedev ttyE0 ttyE1 ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7 1029 makedev ttyF0 ttyF1 ttyF2 ttyF3 ttyF4 ttyF5 ttyF6 ttyF7 1030 makedev ttyG0 ttyG1 ttyG2 ttyG3 ttyG4 ttyG5 ttyG6 ttyG7 1031 makedev ttyH0 ttyH1 ttyH2 ttyH3 ttyH4 ttyH5 ttyH6 ttyH7 1032 makedev wsmouse0 wsmouse1 wsmouse2 wsmouse3 1033 makedev wskbd0 wskbd1 wskbd2 wskbd3 1034 makedev wsmux0 wsmux1 wsmux2 wsmux3 1035 makedev wsmouse wskbd 1036 makedev ttyEcfg ttyEstat 1037 makedev ttyFcfg ttyFstat 1038 makedev ttyGcfg ttyGstat 1039 makedev ttyHcfg ttyHstat 1040 makedev wsfont 1041 ;; 1042 1043wsmouse) 1044 mkdev wsmouse c %wsmux_chr% 0 1045 ;; 1046 1047wskbd) 1048 mkdev wskbd c %wsmux_chr% 1 1049 ;; 1050 1051wsmux[0-9]*) 1052 unit=${i#wsmux} 1053 mkdev wsmux$unit c %wsmux_chr% $unit 1054 mkdev wsmuxctl$unit c %wsmux_chr% $(($unit + 128)) 200 1055 ;; 1056 1057xenevt) 1058 mkdev xenevt c %xenevt_chr% 0 1059 ;; 1060 1061xsd_kva) 1062 mkdev xsd_kva c %xenevt_chr% 1 1063 ;; 1064 1065xencons) 1066 mkdev xencons c %xencons_chr% 0 1067 ;; 1068 1069ttyEstat) 1070 mkdev ttyEstat c %wsdisplay_chr% 254 1071 ;; 1072 1073ttyEcfg) 1074 mkdev ttyEcfg c %wsdisplay_chr% 255 1075 ;; 1076 1077ttyE[0-9]*) 1078 unit=${i#ttyE} 1079 mkdev ttyE$unit c %wsdisplay_chr% $unit 1080 ;; 1081 1082ttyFstat) 1083 mkdev ttyFstat c %wsdisplay_chr% 510 1084 ;; 1085 1086ttyFcfg) 1087 mkdev ttyFcfg c %wsdisplay_chr% 511 1088 ;; 1089 1090ttyF[0-9]*) 1091 unit=${i#ttyF} 1092 mkdev ttyF$unit c %wsdisplay_chr% $(($unit + 256)) 1093 ;; 1094 1095ttyGstat) 1096 mkdev ttyGstat c %wsdisplay_chr% 766 1097 ;; 1098 1099ttyGcfg) 1100 mkdev ttyGcfg c %wsdisplay_chr% 767 1101 ;; 1102 1103ttyG[0-9]*) 1104 unit=${i#ttyG} 1105 mkdev ttyG$unit c %wsdisplay_chr% $(($unit + 512)) 1106 ;; 1107 1108ttyHstat) 1109 mkdev ttyHstat c %wsdisplay_chr% 1022 1110 ;; 1111 1112ttyHcfg) 1113 mkdev ttyHcfg c %wsdisplay_chr% 1023 1114 ;; 1115 1116ttyH[0-9]*) 1117 unit=${i#ttyH} 1118 mkdev ttyH$unit c %wsdisplay_chr% $(($unit + 768)) 1119 ;; 1120 1121wsmouse[0-9]*) 1122 unit=${i#wsmouse} 1123 mkdev wsmouse$unit c %wsmouse_chr% $unit 1124 ;; 1125 1126wskbd[0-9]*) 1127 unit=${i#wskbd} 1128 mkdev wskbd$unit c %wskbd_chr% $unit 1129 ;; 1130 1131fd) 1132 if ! $fdesc_mounted; then 1133 # Create the "fd" subdirectory, and devices "fd/0" to "fd/63" 1134 makedir fd 755 1135 n=0 1136 while [ $n -lt 64 ] 1137 do 1138 mkdev fd/$n c %filedesc_chr% $n 666 1139 n=$(($n + 1)) 1140 done 1141 fi 1142 ;; 1143 1144wt[0-9]*) 1145 name=wt; unit=${i#wt}; chr=%wt_chr%; blk=%wt_blk% 1146 for sub in $unit $(($unit+8)) $(($unit+16)) 1147 do 1148 mkdev $name$sub b $blk $(($sub + 0)) 660 $g_operator 1149 mkdev n$name$sub b $blk $(($sub + 4)) 660 $g_operator 1150 mkdev r$name$sub c $chr $(($sub + 0)) 660 $g_operator 1151 mkdev nr$name$sub c $chr $(($sub + 4)) 660 $g_operator 1152 done 1153 ;; 1154 1155md[0-9]*) 1156 makedisk_minimal md ${i#md} %md_blk% %md_chr% 1157 ;; 1158 1159fss[0-9]*) 1160 name=fss; unit=${i#fss}; blk=%fss_blk%; chr=%fss_chr% 1161 mkdev $name$unit b $blk $unit 660 $g_operator 1162 mkdev r$name$unit c $chr $unit 660 $g_operator 1163 ;; 1164 1165ss[0-9]*) 1166 name=ss; unit=${i#ss}; chr=%ss_chr% 1167 mkdev $name$unit c $chr $(($unit * 16 + 0)) 640 $g_operator 1168 mkdev n$name$unit c $chr $(($unit * 16 + 1)) 640 $g_operator 1169 mkdev en$name$unit c $chr $(($unit * 16 + 3)) 640 $g_operator 1170 ;; 1171 1172ccd[0-9]*|cgd[0-9]*|raid[0-9]*|vnd[0-9]*) 1173 case $i in 1174 ccd*) name=ccd; unit=${i#ccd}; blk=%ccd_blk%; chr=%ccd_chr%;; 1175 cgd*) name=cgd; unit=${i#cgd}; blk=%cgd_blk%; chr=%cgd_chr%;; 1176 raid*) name=raid; unit=${i#raid}; blk=%raid_blk%; chr=%raid_chr%;; 1177 vnd*) name=vnd; unit=${i#vnd}; blk=%vnd_blk%; chr=%vnd_chr%;; 1178 esac 1179 %MKDISK% $name $unit $blk $chr 1180 ;; 1181 1182sd[0-9]*) 1183 name=sd; unit=${i#sd}; blk=%sd_blk%; chr=%sd_chr% 1184 %MKDISK% $name $unit $blk $chr 1185 ;; 1186 1187ace[0-9]*) 1188 name=ace; unit=${i#ace}; blk=%ace_blk%; chr=%ace_chr% 1189 %MKDISK% $name $unit $blk $chr 1190 ;; 1191 1192eflash[0-9]*) 1193 name=eflash; unit=${i#eflash}; blk=%eflash_blk%; chr=%eflash_chr% 1194 %MKDISK% $name $unit $blk $chr 1195 ;; 1196 1197wd[0-9]*) 1198 name=wd; unit=${i#wd}; blk=%wd_blk%; chr=%wd_chr% 1199 %MKDISK% $name $unit $blk $chr 1200 ;; 1201 1202fd[0-9]*) 1203 name=fd; unit=${i#fd}; blk=%fd_blk%; chr=%fd_chr% 1204 %MKDISK% $name $unit $blk $chr 1205 ;; 1206 1207ld[0-9]*) 1208 name=ld; unit=${i#ld}; blk=%ld_blk%; chr=%ld_chr% 1209 %MKDISK% $name $unit $blk $chr 1210 ;; 1211 1212flash[0-9]*) 1213 unit=${i#flash} 1214 flash=flash$unit 1215 mkdev flash$unit b %flash_blk% $unit 1216 mkdev rflash$unit c %flash_chr% $unit 1217 ;; 1218 1219spiflash[0-9]*) 1220 unit=${i#spiflash} 1221 spiflash=spiflash$unit 1222 mkdev spiflash$unit b %spiflash_blk% $unit 1223 mkdev rspiflash$unit c %spiflash_chr% $unit 1224 ;; 1225 1226altmem[0-9]*) 1227 name=altmem; unit=${i#altmem}; blk=%altmem_blk%; chr=%altmem_chr% 1228 %MKDISK% $name $unit $blk $chr 1229 ;; 1230 1231bio) 1232 mkdev bio c %bio_chr% 0 1233 ;; 1234 1235ed[0-9]*) 1236 name=ed; unit=${i#ed}; blk=%ed_blk%; chr=%ed_chr% 1237 %MKDISK% $name $unit $blk $chr 1238 ;; 1239 1240ofdisk[0-9]*) 1241 name=ofdisk; unit=${i#ofdisk}; blk=%ofdisk_blk%; chr=%ofdisk_chr% 1242 %MKDISK% $name $unit $blk $chr 1243 ;; 1244 1245xbd[0-9]*) 1246 name=xbd; unit=${i#xbd}; blk=%xbd_blk%; chr=%xbd_chr% 1247 %MKDISK% $name $unit $blk $chr 1248 ;; 1249 1250dk[0-9]*) 1251 name=dk; unit=${i#dk}; blk=%dk_blk%; chr=%dk_chr% 1252 mkdev r$name$unit c $chr $unit 0640 $g_operator 1253 mkdev $name$unit b $blk $unit 0640 $g_operator 1254 ;; 1255 1256tprof) 1257 mkdev tprof c %tprof_chr% 0 1258 ;; 1259 1260ttyCY[0-9]*) 1261 # Each unit number creates 32 pairs of {tty,dty} device nodes: 1262 # ttyCY0 => device nodes [td]tyCY000 to [td]tyCY031; 1263 # ttyCY1 => device nodes [td]tyCY032 to [td]tyCY063; 1264 name=tyCY; chr=%cy_chr%; off=32 1265 unit=${i#t${name}} 1266 minor=$(($unit * $off)) 1267 eminor=$(($minor + $off)) 1268 while [ $minor -lt $eminor ] 1269 do 1270 nminor=000$minor 1271 nminor=${nminor#${nminor%???}} 1272 mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp 1273 mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp 1274 minor=$(($minor + 1)) 1275 done 1276 ;; 1277 1278ttyCZ[0-9]*) 1279 # Each unit number creates 64 pairs of {tty,dty} device nodes: 1280 # ttyCZ0 => device nodes [td]tyCZ0000 to [td]tyCZ0063; 1281 # ttyCZ1 => device nodes [td]tyCZ0064 to [td]tyCZ0127; 1282 name=tyCZ; chr=%cz_chr%; off=64 1283 unit=${i#t${name}} 1284 minor=$(($unit * $off)) 1285 eminor=$(($minor + $off)) 1286 while [ $minor -lt $eminor ] 1287 do 1288 nminor=0000$minor 1289 nminor=${nminor#${nminor%????}} 1290 mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp 1291 mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp 1292 minor=$(($minor + 1)) 1293 done 1294 ;; 1295 1296 1297tty[0-9]|tty0[0-9]) 1298 # some archs have built-in zstty (major %zstty_chr%) instead 1299 # of NS16550; create ttyZ* and hardlink as [dt]ty0*; this 1300 # needs to be before com entry, for archs which have both 1301 unit=${i#tty} 1302 unit=$(($unit + 0)) 1303 makedev ttyZ${unit} 1304 lndev ttyZ$unit tty0${unit} 1305 lndev dtyZ$unit dty0${unit} 1306 ;; 1307 1308tty[0-9]*) 1309 unit=${i#tty} 1310 ounit=00$unit 1311 ounit=${ounit#${ounit%??}} 1312 mkdev tty$ounit c %com_chr% $(($unit + $dialin )) "" "" $u_uucp 1313 mkdev dty$ounit c %com_chr% $(($unit + $dialout)) "" "" $u_uucp 1314 ;; 1315 1316ttyC[0-9]*) 1317 # some archs call com_chr ttyC traditionally 1318 unit=${i#ttyC}; name=ttyC; dname=dtyC; chr=%com_chr% 1319 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1320 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1321 ;; 1322 1323ttyh[0-9]*) 1324 unit=${i#ttyh}; name=ttyh; dname=dtyh; chr=%sabtty_chr% 1325 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1326 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1327 ;; 1328 1329ttyTX[0-9]*) 1330 unit=${i#ttyTX}; name=ttyTX0; dname=dtyTX0; chr=%txcom_chr% 1331 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1332 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1333 ;; 1334 1335ttyZ[0-9]*) 1336 unit=${i#ttyZ}; name=ttyZ; dname=dtyZ; chr=%zstty_chr% 1337 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp 1338 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp 1339 ;; 1340 1341opty) 1342 # Create 16 device nodes, [pt]typ0 to [pt]typf, 1343 # same as "MAKEDEV pty0". 1344 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f 1345 do 1346 case $j in 1347 [0-9]) jn=$j ;; 1348 a) jn=10 ;; 1349 b) jn=11 ;; 1350 c) jn=12 ;; 1351 d) jn=13 ;; 1352 e) jn=14 ;; 1353 f) jn=15 ;; 1354 esac 1355 mkdev ttyp$j c %pts_chr% $jn 666 1356 mkdev ptyp$j c %ptc_chr% $jn 666 1357 done 1358 ;; 1359 1360pty[0-9]*) 1361 # Each unit number creates up to 16 pairs of {tty,pty} device nodes: 1362 # pty0 => 16 pairs, [tp]typ0 to [tp]typf 1363 # pty1 => 16 pairs, [tp]tyq0 to [tp]tyqf 1364 # pty16 => 16 pairs, [tp]typg to [tp]typv 1365 # pty17 => 16 pairs, [tp]typw to [tp]typL 1366 # pty18 => 14 pairs, [tp]typM to [tp]typZ 1367 warn "$i: creating BSD style tty nodes with ptyfs is a security issue" 1368 class=${i#pty} 1369 d1="p q r s t u v w x y z P Q R S T" 1370 if [ "$class" -ge 64 ] 1371 then 1372 warn "$i: pty unit must be between 0 and 63" 1373 continue 1374 elif [ "$class" -lt 16 ] 1375 then 1376 # pty[p-zP-T][0-9a-f] 1377 offset=0 1378 mult=0 1379 d2="0 1 2 3 4 5 6 7 8 9 a b c d e f" 1380 else 1381 # pty[p-zP-T][g-zA-Z] 1382 class=$(($class - 16)) 1383 offset=256 1384 mult=2 1385 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" 1386 fi 1387 start=$(($class * 16)) 1388 set -- $d2 1389 nt=$# 1390 s1=$(($start / $nt)) 1391 set -- $d1 1392 shift $s1 1393 t1=$1 1394 if [ "$t1" = v ]; then 1395 warn "$i: pty unit conflicts with console ttyv0 device" 1396 continue 1397 fi 1398 s2=$(($start % ($nt - $s1 * $mult))) 1399 set -- $d2 1400 shift $s2 1401 t2=$1 1402 unit=$(($start + $offset - $s1 * $mult)) 1403 end=$(($unit + 16)) 1404 while [ "$unit" -lt "$end" ] 1405 do 1406 mkdev tty$t1$t2 c %pts_chr% $unit 666 1407 mkdev pty$t1$t2 c %ptc_chr% $unit 666 1408 shift 1409 t2=$1 1410 if [ -z "$t2" ] 1411 then 1412 break 1413 fi 1414 unit=$(($unit + 1)) 1415 done 1416 ;; 1417 1418stic[0-9]*) 1419 unit=${i#stic} 1420 mkdev stic$unit c %stic_chr% $unit 1421 ;; 1422 1423st[0-9]*) 1424 name=st; unit=${i#st}; chr=%st_chr%; blk=%st_blk% 1425 mkdev $name$unit b $blk $(($unit * 16 + 0)) 660 $g_operator 1426 mkdev n$name$unit b $blk $(($unit * 16 + 1)) 660 $g_operator 1427 mkdev e$name$unit b $blk $(($unit * 16 + 2)) 660 $g_operator 1428 mkdev en$name$unit b $blk $(($unit * 16 + 3)) 660 $g_operator 1429 mkdev r$name$unit c $chr $(($unit * 16 + 0)) 660 $g_operator 1430 mkdev nr$name$unit c $chr $(($unit * 16 + 1)) 660 $g_operator 1431 mkdev er$name$unit c $chr $(($unit * 16 + 2)) 660 $g_operator 1432 mkdev enr$name$unit c $chr $(($unit * 16 + 3)) 660 $g_operator 1433 ;; 1434 1435ses[0-9]*|ch[0-9]*|uk[0-9]*) 1436 case $i in 1437 ch*) name=ch; unit=${i#ch}; chr=%ch_chr%;; 1438 uk*) name=uk; unit=${i#uk}; chr=%uk_chr%;; 1439 ses*) name=ses; unit=${i#ses}; chr=%ses_chr%;; 1440 esac 1441 mkdev $name$unit c $chr $unit 640 $g_operator 1442 ;; 1443 1444cd[0-9]*) 1445 makedisk_minimal cd ${i#cd} %cd_blk% %cd_chr% 1446 ;; 1447 1448mcd[0-9]*) 1449 makedisk_minimal mcd ${i#mcd} %mcd_blk% %mcd_chr% 1450 ;; 1451 1452gdrom[0-9]*) 1453 makedisk_minimal gdrom ${i#gdrom} %gdrom_blk% %gdrom_chr% 1454 ;; 1455 1456lpt[0-9]*|lpa[0-9]*) 1457 case $i in 1458 lpt*) name=lpt; unit=${i#lpt}; chr=%lpt_chr%; flags=0;; 1459 lpa*) name=lpa; unit=${i#lpa}; chr=%lpt_chr%; flags=128;; 1460 esac 1461 mkdev $name$unit c $chr $(($unit + $flags)) 1462 mkdev lpt${unit}ctl c $chr $(($unit + 256)) 1463 ;; 1464 1465bpf) 1466 mkdev bpf c %bpf_chr% 0 1467 lndev bpf bpf0 1468 ;; 1469 1470npf) 1471 mkdev npf c %npf_chr% 0 1472 ;; 1473 1474bthub) 1475 mkdev bthub c %bthub_chr% 0 1476 ;; 1477 1478tun[0-9]*) 1479 unit=${i#tun} 1480 mkdev tun$unit c %tun_chr% $unit 1481 ;; 1482 1483joy[0-9]*) 1484 unit=${i#joy} 1485 mkdev joy$unit c %joy_chr% $unit 1486 ;; 1487 1488ipl) 1489 mkdev ipl c %ipl_chr% 0 1490 mkdev ipnat c %ipl_chr% 1 1491 mkdev ipstate c %ipl_chr% 2 1492 mkdev ipauth c %ipl_chr% 3 1493 mkdev ipsync c %ipl_chr% 4 1494 mkdev ipscan c %ipl_chr% 5 1495 mkdev iplookup c %ipl_chr% 6 1496 ;; 1497 1498pf) 1499 mkdev pf c %pf_chr% 0 1500 ;; 1501 1502crypto) 1503 mkdev crypto c %crypto_chr% 0 666 1504 ;; 1505 1506cmos) 1507 mkdev cmos c %cmos_chr% 0 644 1508 ;; 1509 1510speaker) 1511 mkdev speaker c %spkr_chr% 0 1512 ;; 1513 1514lockstat) 1515 mkdev lockstat c %lockstat_chr% 0 1516 ;; 1517 1518cpuctl) 1519 mkdev cpuctl c %cpuctl_chr% 0 666 1520 ;; 1521 1522audio|audio[0-9]*) 1523 unit=${i#audio} 1524 audio=audio$unit 1525 sound=sound$unit 1526 mixer=mixer$unit 1527 audioctl=audioctl$unit 1528 : ${unit:-0} 1529 mkdev $sound c %audio_chr% $(($unit + 0)) 666 1530 mkdev $audio c %audio_chr% $(($unit + 128)) 666 1531 mkdev $mixer c %audio_chr% $(($unit + 16)) 666 1532 mkdev $audioctl c %audio_chr% $(($unit + 192)) 666 1533 ;; 1534 1535hdaudio[0-9]*) 1536 unit=${i#hdaudio} 1537 mkdev hdaudio$unit c %hdaudio_chr% $unit 644 1538 ;; 1539 1540hdmicec[0-9]*) 1541 uint=${i#hdmicec} 1542 mkdev hdmicec$unit c %hdmicec_chr% $unit 644 1543 ;; 1544 1545gpio[0-9]*) 1546 unit=${i#gpio} 1547 mkdev gpio$unit c %gpio_chr% $unit 664 $g_gpio 1548 ;; 1549 1550gpiopps[0-9]*) 1551 unit=${i#gpiopps} 1552 mkdev gpiopps$unit c %gpiopps_chr% $unit 664 $g_gpio 1553 ;; 1554 1555lua[0-9]*) 1556 unit=${i#lua} 1557 mkdev lua$unit c %lua_chr% $unit 664 1558 ;; 1559 1560rmidi[0-9]*) 1561 unit=${i#rmidi} 1562 mkdev rmidi$unit c %midi_chr% $unit 666 1563 ;; 1564 1565music|music[0-9]*) 1566 unit=${i#music} 1567 : ${unit:-0} 1568 mkdev music$unit c %sequencer_chr% $(($unit + 0)) 666 1569 mkdev sequencer$unit c %sequencer_chr% $(($unit + 128)) 666 1570 ;; 1571 1572radio|radio[0-9]*) 1573 unit=${i#radio} 1574 : ${unit:-0} 1575 mkdev radio$unit c %radio_chr% $unit 666 1576 ;; 1577 1578video|video[0-9]*) 1579 unit=${i#video} 1580 : ${unit:-0} 1581 mkdev video$unit c %video_chr% $unit 666 1582 ;; 1583 1584dtv[0-9]*) 1585 unit=${i#dtv} 1586 makedir dvb 755 1587 makedir dvb/adapter$unit 755 1588 mkdev dvb/adapter$unit/frontend0 c %dtv_chr% $(($unit + 0)) 666 1589 mkdev dvb/adapter$unit/demux0 c %dtv_chr% $(($unit + 16)) 666 1590 mkdev dvb/adapter$unit/dvr0 c %dtv_chr% $(($unit + 32)) 666 1591 ;; 1592 1593iic[0-9]*) 1594 unit=${i#iic} 1595 : ${unit:-0} 1596 mkdev iic$unit c %iic_chr% $unit 600 1597 ;; 1598 1599spi[0-9]*) 1600 unit=${i#spi} 1601 : ${unit:-0} 1602 mkdev spi$unit c %spi_chr% $unit 600 1603 ;; 1604 1605amr[0-9]*) 1606 unit=${i#amr} 1607 mkdev amr$unit c %amr_chr% $unit 1608 ;; 1609 1610apm) 1611 mkdev apm c %apm_chr% 0 644 1612 mkdev apmctl c %apm_chr% 8 644 1613 ;; 1614 1615apm) 1616 # hpcmips uses `apmdev_chr' instead of `apm_chr' 1617 mkdev apm c %apmdev_chr% 0 644 1618 mkdev apmctl c %apmdev_chr% 8 644 1619 ;; 1620 1621random) 1622 mkdev random c %rnd_chr% 0 444 1623 mkdev urandom c %rnd_chr% 1 644 1624 ;; 1625 1626cfs) 1627 makedev cfs0 1628 ;; 1629 1630cfs[0-9]*) 1631 unit=${i#cfs} 1632 mkdev cfs$unit c %vcoda_chr% $unit 1633 ;; 1634 1635sysmon) 1636 mkdev sysmon c %sysmon_chr% 0 644 1637 mkdev watchdog c %sysmon_chr% 1 644 1638 mkdev power c %sysmon_chr% 2 640 1639 ;; 1640 1641scsibus[0-9]*) 1642 unit=${i#scsibus} 1643 mkdev scsibus$unit c %scsibus_chr% $unit 644 1644 ;; 1645 1646bktr) 1647 makedev bktr0 bktr1 1648 lndev bktr0 bktr 1649 lndev tuner0 tuner 1650 lndev vbi0 vbi 1651 ;; 1652 1653bktr[0-9]*) 1654 unit=${i#bktr} 1655 mkdev bktr$unit c %bktr_chr% $(($unit + 0)) 444 1656 mkdev tuner$unit c %bktr_chr% $(($unit + 16)) 444 1657 mkdev vbi$unit c %bktr_chr% $(($unit + 32)) 444 1658 ;; 1659 1660io) 1661 mkdev io c %mem_chr% 14 600 1662 ;; 1663 1664iop[0-9]*) 1665 unit=${i#iop} 1666 mkdev iop$unit c %iop_chr% $unit 1667 ;; 1668 1669mfi[0-9]*) 1670 unit=${i#mfi} 1671 mkdev mfi$unit c %mfi_chr% $unit 1672 ;; 1673 1674mlx[0-9]*) 1675 unit=${i#mlx} 1676 mkdev mlx$unit c %mlx_chr% $unit 1677 ;; 1678 1679mly[0-9]*) 1680 unit=${i#mly} 1681 mkdev mly$unit c %mly_chr% $unit 1682 ;; 1683 1684twa[0-9]*) 1685 unit=${i#twa} 1686 mkdev twa$unit c %twa_chr% $unit 1687 ;; 1688 1689twe[0-9]*) 1690 unit=${i#twe} 1691 mkdev twe$unit c %twe_chr% $unit 1692 ;; 1693 1694icp[0-9]*) 1695 unit=${i#icp} 1696 mkdev icp$unit c %icp_chr% $unit 1697 ;; 1698 1699agp[0-9]*) 1700 unit=${i#agp} 1701 mkdev agp$unit c %agp_chr% $unit 644 1702 if [ "$unit" = "0" ]; then 1703 lndev agp$unit agpgart 1704 fi 1705 ;; 1706 1707pci[0-9]*) 1708 unit=${i#pci} 1709 mkdev pci$unit c %pci_chr% $unit 640 1710 ;; 1711 1712dpti[0-9]*) 1713 unit=${i#dpti} 1714 mkdev dpti$unit c %dpti_chr% $unit 1715 ;; 1716 1717dpt[0-9]*) 1718 unit=${i#dpt} 1719 mkdev dpt$unit c %dpt_chr% $unit 1720 ;; 1721 1722altq) 1723 makedir altq 755 1724 unit=0 1725 for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq jobs 1726 do 1727 mkdev altq/$dev c %altq_chr% $unit 644 1728 unit=$(($unit + 1)) 1729 done 1730 ;; 1731 1732wsfont) 1733 mkdev wsfont c %wsfont_chr% 0 1734 ;; 1735 1736cir[0-9]*) 1737 unit=${i#cir} 1738 mkdev cir$unit c %cir_chr% $unit 666 1739 ;; 1740 1741irframe[0-9]*) 1742 unit=${i#irframe} 1743 mkdev irframe$unit c %irframe_chr% $unit 1744 ;; 1745 1746fcom[0-9]*) 1747 unit=${i#fcom} 1748 mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp 1749 ;; 1750 1751openfirm) 1752 mkdev openfirm c %openfirm_chr% 0 444 1753 ;; 1754 1755pad[0-9]*) 1756 unit=${i#pad} 1757 mkdev pad$unit c %pad_chr% $unit 444 1758 ;; 1759 1760qemufwcfg[0-9]*) 1761 unit=${i#qemufwcfg} 1762 mkdev qemufwcfg$unit c %qemufwcfg_chr% $unit 660 1763 ;; 1764 1765vio9p[0-9]*) 1766 unit=${i#vio9p} 1767 mkdev vio9p$unit c %vio9p_chr% $unit 660 1768 ;; 1769 1770nvram) 1771 mkdev nvram c %nvram_chr% 0 644 1772 ;; 1773 1774rtc) 1775 mkdev rtc c %rtc_chr% 0 644 1776 ;; 1777 1778clockctl) 1779 mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd 1780 ;; 1781 1782nsmb) 1783 makedev nsmb0 nsmb1 nsmb2 nsmb3 1784 ;; 1785 1786nsmb[0-9]*) 1787 unit=${i#nsmb} 1788 mkdev nsmb$unit c %nsmb_chr% $unit 644 1789 ;; 1790 1791kttcp) 1792 mkdev kttcp c %kttcp_chr% 0 1793 ;; 1794 1795dmoverio) 1796 mkdev dmoverio c %dmoverio_chr% 0 644 1797 ;; 1798 1799veriexec) 1800 mkdev veriexec c %veriexec_chr% 0 600 1801 ;; 1802 1803vhci) 1804 mkdev vhci c %vhci_chr% 0 1805 ;; 1806 1807ttyv[0-9]*) 1808 unit=${i#ttyv} 1809 mkdev ttyv$unit c %pc_chr% $unit 1810 ;; 1811 1812# arm, acorn32 1813ttyv[0-9]*) 1814 unit=${i#ttyv} 1815 mkdev ttyv$unit c %physcon_chr% $unit 1816 ;; 1817 1818arcpp[0-9]*) 1819 unit=${i#arcpp} 1820 mkdev arcpp$unit c %arcpp_chr% $unit 1821 ;; 1822 1823par[0-9]*) 1824 unit=${i#par} 1825 case $unit in 1826 0) 1827 mkdev par$unit c %par_chr% $unit 1828 ;; 1829 *) 1830 warn "bad unit for par in: $i" 1831 ;; 1832 esac 1833 ;; 1834 1835cpi[0-9]*) 1836 unit=${i#cpi} 1837 mkdev cpi$unit c %cpi_chr% $unit 1838 ;; 1839 1840ite[0-9]*|ttye[0-9]*) 1841 case $i in 1842 ite*) unit=${i#ite};; 1843 ttye*) unit=${i#ttye};; 1844 esac 1845 mkdev ttye$unit c %ite_chr% $unit 1846 ;; 1847 1848pms[0-9]*) 1849 unit=${i#pms} 1850 mkdev pms$unit c %opms_chr% $unit 1851 ;; 1852 1853qms[0-9]*) 1854 unit=${i#qms} 1855 mkdev qms$unit c %qms_chr% $unit 1856 ;; 1857 1858lms[0-9]*) 1859 unit=${i#lms} 1860 mkdev lms$unit c %lms_chr% $unit 1861 ;; 1862 1863mms[0-9]*) 1864 unit=${i#mms} 1865 mkdev mms$unit c %mms_chr% $unit 1866 ;; 1867 1868mouse-pms[0-9]*|mouse-qms[0-9]*) 1869 case $i in 1870 mouse-pms*) name=pms ;; 1871 mouse-qms*) name=qms ;; 1872 esac 1873 unit=${i#mouse-${name}} 1874 lndev $name$unit mouse 1875 ;; 1876 1877kbd) 1878 mkdev kbd c %kbd_chr% 0 1879 ;; 1880 1881kbdctl) 1882 mkdev kbdctl c %kbd_chr% 1 1883 ;; 1884 1885vidcconsole0) 1886 mkdev vidcconsole0 c %vidcconsole_chr% 0 640 1887 ;; 1888 1889view[0-9]*) 1890 unit=${i#view} 1891 mkdev view$unit c %view_chr% $unit 666 1892 ;; 1893 1894mouse[0-9]*) 1895 unit=${i#mouse} 1896 case $unit in 1897 0|1) 1898 mkdev mouse$unit c %ms_chr% $unit 666 1899 if [ $unit = 0 ]; then 1900 lndev mouse$unit mouse 1901 fi 1902 ;; 1903 *) 1904 warn "bad unit for mouse in: $i" 1905 ;; 1906 esac 1907 ;; 1908 1909panel) 1910 mkdev panel0 c %panel_chr% 0 660 1911 ;; 1912 1913tslcd) 1914 mkdev tslcd0 c %tslcd_chr% 0 660 1915 ;; 1916 1917ipty) 1918 mkdev ttyp0 c %pts_chr% 0 666 1919 mkdev ttyp1 c %pts_chr% 1 666 1920 mkdev ptyp0 c %ptc_chr% 0 666 1921 mkdev ptyp1 c %ptc_chr% 1 666 1922 ;; 1923 1924ptm) 1925 makedir pts 755 1926 mkdev ptmx c %ptm_chr% 0 666 1927 mkdev ptm c %ptm_chr% 1 666 1928 ;; 1929 1930grf[0-9]*) 1931 unit=${i#grf} 1932 mkdev grf$unit c %grf_chr% $unit 666 1933 ;; 1934 1935etvme) 1936 mkdev etvme c %et_chr% 0 1937 ;; 1938 1939leo[0-9]*) 1940 unit=${i#leo} 1941 mkdev leo$unit c %leo_chr% $unit 1942 ;; 1943 1944scif[0-9]*) 1945 unit=${i#scif} 1946 mkdev scif$unit c %scif_chr% $(($unit + $dialin )) "" "" $u_uucp 1947 mkdev dscif$unit c %scif_chr% $(($unit + $dialout)) "" "" $u_uucp 1948 ;; 1949 1950sci[0-9]*) 1951 unit=${i#sci} 1952 mkdev sci$unit c %sci_chr% $(($unit + $dialin )) "" "" $u_uucp 1953 mkdev dsci$unit c %sci_chr% $(($unit + $dialout)) "" "" $u_uucp 1954 ;; 1955 1956maple[ABCD]|maple[ABCD][0-9]*) 1957 case $i in 1958 mapleA*) name="mapleA"; unit=0;; 1959 mapleB*) name="mapleB"; unit=1;; 1960 mapleC*) name="mapleC"; unit=2;; 1961 mapleD*) name="mapleD"; unit=3;; 1962 esac 1963 subunit=${i#$name} 1964 mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit)) 1965 ;; 1966 1967mmem[0-9]*) 1968 unit=${i#mmem} 1969 for pt in 0 # 1 2 3 4 ... 255 1970 do 1971# mkdev mmem${unit}.${pt}a b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator 1972 mkdev mmem${unit}.${pt}c b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator 1973# mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator 1974 mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator 1975 done 1976 ;; 1977 1978mlcd[0-9]*) 1979 unit=${i#mlcd} 1980 for pt in 0 # 1 2 3 4 ... 255 1981 do 1982 mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator 1983 done 1984 ;; 1985 1986ixpcom[0-9]*) 1987 unit=${i#ixpcom} 1988 mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp 1989 ;; 1990 1991epcom[0-9]*) 1992 unit=${i#epcom} 1993 mkdev epcom$unit c %epcom_chr% $unit "" "" $u_uucp 1994 ;; 1995 1996plcom[0-9]*) 1997 unit=${i#plcom} 1998 mkdev plcom$unit c %plcom_chr% $unit "" "" $u_uucp 1999 mkdev dplcom$unit c %plcom_chr% $(($unit + $dialout)) "" "" $u_uucp 2000 ;; 2001 2002wmcom[0-9]*) 2003 unit=${i#wmcom} 2004 mkdev wmcom$unit c %wmcom_chr% $unit "" "" $u_uucp 2005 ;; 2006 2007ucbsnd) 2008 mkdev ucbsnd c %ucbsnd_chr% 0 666 2009 ;; 2010 2011adb) 2012 mkdev adb c %aed_chr% 0 666 2013 ;; 2014 2015asc[0-9]*) 2016 unit=${i#asc} 2017 mkdev asc$unit c %asc_chr% $unit 666 2018 ;; 2019 2020bwtwo[0-9]*) 2021 unit=${i#bwtwo} 2022 mkdev bwtwo$unit c %bwtwo_chr% $unit 666 2023 ;; 2024 2025cgtwo[0-9]*) 2026 unit=${i#cgtwo} 2027 mkdev cgtwo$unit c %cgtwo_chr% $unit 666 2028 ;; 2029 2030cgthree[0-9]*) 2031 unit=${i#cgthree} 2032 mkdev cgthree$unit c %cgthree_chr% $unit 666 2033 ;; 2034 2035cgfour[0-9]*) 2036 unit=${i#cgfour} 2037 mkdev cgfour$unit c %cgfour_chr% $unit 666 2038 ;; 2039 2040cgsix[0-9]*) 2041 unit=${i#cgsix} 2042 mkdev cgsix$unit c %cgsix_chr% $unit 666 2043 ;; 2044 2045cgeight[0-9]*) 2046 unit=${i#cgeight} 2047 mkdev cgeight$unit c %cgeight_chr% $unit 666 2048 ;; 2049 2050tcx[0-9]*) 2051 unit=${i#tcx} 2052 mkdev tcx$unit c %tcx_chr% $unit 666 2053 ;; 2054 2055xd[0-9]*|xy[0-9]*) 2056 case $i in 2057 xd*) name=xd; unit=${i#xd}; blk=%xd_blk%; chr=%xd_chr%;; 2058 xy*) name=xy; unit=${i#xy}; blk=%xy_blk%; chr=%xy_chr%;; 2059 esac 2060 %MKDISK% $name $unit $blk $chr 2061 ;; 2062 2063magma[0-9]*) 2064 unit=${i#magma} 2065 if [ 0$unit -gt 3 ]; then 2066 warn "bad unit for $i: $unit" 2067 break 2068 fi 2069 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f 2070 do 2071 case $j in 2072 [0-9]) jn=$j ;; 2073 a) jn=10 ;; 2074 b) jn=11 ;; 2075 c) jn=12 ;; 2076 d) jn=13 ;; 2077 e) jn=14 ;; 2078 f) jn=15 ;; 2079 esac 2080 mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn)) 2081 done 2082 mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0)) 2083 mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1)) 2084 ;; 2085 2086clcd[0-9]*) 2087 unit=${i#clcd} 2088 if [ 0$unit -gt 7 ]; then 2089 warn "bad unit for $i: $unit" 2090 break 2091 fi 2092 for j in 0 1 2 3 4 5 6 7 2093 do 2094 mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp 2095 mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp 2096 done 2097 ;; 2098 2099spif[0-9]*) 2100 unit=${i#spif} 2101 if [ 0$unit -gt 3 ]; then 2102 warn "bad unit for $i: $unit" 2103 break 2104 fi 2105 for j in 0 1 2 3 4 5 6 7; do 2106 mkdev ttyS$unit$j c %stty_chr% $(($unit * 64 + $j)) "" "" $u_uucp 2107 done 2108 mkdev bppS${unit}0 c %sbpp_chr% $(($unit * 64 + 0)) 2109 mkdev bppS${unit}1 c %sbpp_chr% $(($unit * 64 + 1)) 2110 ;; 2111 2112bpp|bpp[0-9]*) 2113 unit=${i#bpp} 2114 mkdev bpp$unit c %bpp_chr% $(($unit + 0)) 2115 ;; 2116 2117tctrl[0-9]*) 2118 unit=${i#tctrl} 2119 mkdev tctrl$unit c %tctrl_chr% $unit 666 2120 ;; 2121 2122bmd[0-9]*) 2123 unit=${i#bmd} 2124 mkdev bmd${unit}a b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator 2125 mkdev bmd${unit}c b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator 2126 mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator 2127 mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator 2128 ;; 2129 2130sram) 2131 mkdev sram c %sram_chr% 0 644 2132 ;; 2133 2134ttyS[0-9]*) 2135 unit=${i#ttyS} 2136 mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp 2137 mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp 2138 ;; 2139 2140atabus[0-9]*) 2141 unit=${i#atabus} 2142 mkdev atabus$unit c %atabus_chr% $unit 644 2143 ;; 2144 2145drm[0-9]*) 2146 unit=${i#drm} 2147 makedir dri 755 2148 mkdev dri/card$unit c %drm_chr% $unit 660 2149 ;; 2150 2151drvctl) 2152 mkdev drvctl c %drvctl_chr% 0 644 2153 ;; 2154 2155isv) 2156 mkdev isv c %isv_chr% 0 644 2157 ;; 2158 2159tap|tap[0-9]*) 2160 unit=${i#tap} 2161 case "$unit" in 2162 [0-9]*) 2163 mkdev tap${unit} c %tap_chr% ${unit} 600 2164 ;; 2165 "") 2166 mkdev tap c %tap_chr% 0xfffff 600 2167 ;; 2168 esac 2169 ;; 2170 2171srt[0-9]*) 2172 unit=${i#srt} 2173 mkdev srt$unit c %srt_chr% $unit 600 2174 ;; 2175 2176tpm) 2177 mkdev tpm c %tpm_chr% 0 600 2178 ;; 2179 2180dtrace) 2181 makedir dtrace 755 2182 mkdev dtrace/dtrace c %dtrace_chr% 0 600 2183 ;; 2184 2185filemon) 2186 mkdev filemon c %filemon_chr% 0 666 2187 ;; 2188 2189fw[0-9]*) 2190 unit=${i#fw} 2191 for j in 0 1 2 3 2192 do 2193 mkdev fw${unit}.${j} c %fw_chr% $((${unit} * 256 + ${j})) 660 ${g_operator} 2194 mkdev fwmem${unit}.${j} c %fw_chr% $((65536 + ${unit} * 256 + ${j})) 660 ${g_operator} 2195 done 2196 ;; 2197 2198# create putter device and symlinks for all subsystems using it 2199putter) 2200 mkdev putter c %putter_chr% 0 600 2201 mkdev pud c %putter_chr% 1 600 2202 lndev putter puffs 2203 ;; 2204 2205zfs) 2206 mkdev zfs c %zfs_chr% 0 600 2207 makedir zpool 755 2208 ;; 2209 2210iscsi[0-9]*) 2211 unit=${i#iscsi} 2212 mkdev iscsi${unit} c %iscsi_chr% $unit 600 2213 ;; 2214 2215vchiq) 2216 mkdev vchiq c %vchiq_chr% 0 600 2217 ;; 2218 2219nvme[0-9]*ns[0-9]*) 2220 unit=${i#nvme} 2221 unit=${unit%ns*} 2222 subunit=${i#nvme${unit}ns} 2223 if [ 0$subunit -le 0 ] || [ 0$subunit -ge 65536 ]; then 2224 warn "bad nsid for $i: $subunit" 2225 break 2226 fi 2227 mkdev nvme${unit}ns$subunit c %nvme_chr% $(($unit * 65536 + $subunit)) 2228 ;; 2229 2230nvme[0-9]*) 2231 unit=${i#nvme} 2232 mkdev nvme$unit c %nvme_chr% $(($unit * 65536)) 2233 ;; 2234 2235nvmm) 2236 mkdev nvmm c %nvmm_chr% 0 640 $g_nvmm 2237 ;; 2238 2239autofs) 2240 mkdev autofs c %autofs_chr% 0 600 2241 ;; 2242 2243kcov) 2244 mkdev kcov c %kcov_chr% 0 2245 ;; 2246 2247ipmi[0-9]*) 2248 unit=${i#ipmi} 2249 mkdev ipmi${unit} c %ipmi_chr% $unit 600 2250 ;; 2251 2252midevend) 2253%MI_DEVICES_END% 2254local) 2255 if [ -f "$0.local" ]; then 2256 umask 0 2257 if [ -n "$count_nodes" ]; then 2258 count_nodes=$((count_nodes + \ 2259 $(linecount "$("$HOST_SH" "$0.local" $opts -s all)") )) 2260 else 2261 "$HOST_SH" "$0.local" $opts all 2262 fi 2263 umask 077 2264 fi 2265 ;; 2266 2267*) 2268 warn "$i: unknown device" 2269 ;; 2270 2271esac 2272done 2273 2274} 2275 2276 2277# three variants of disk partitions - max 8, max 16, max 16 with highpartoffset 2278# hack; only the one used by port is retained in final MAKEDEV script 2279# routine is called as: 2280# makedisk name unit blk chr 2281makedisk_p8() 2282{ 2283 name="$1"; unit="$2"; blk="$3"; chr="$4" 2284 2285 ro=%RAWDISK_OFF% 2286 mkdev ${name}${unit} b $blk $(($unit * 8 + $ro)) 640 $g_operator 2287 mkdev r${name}${unit} c $chr $(($unit * 8 + $ro)) 640 $g_operator 2288 2289 mkdev ${name}${unit}a b $blk $(($unit * 8 + 0)) 640 $g_operator 2290 mkdev ${name}${unit}b b $blk $(($unit * 8 + 1)) 640 $g_operator 2291 mkdev ${name}${unit}c b $blk $(($unit * 8 + 2)) 640 $g_operator 2292 mkdev ${name}${unit}d b $blk $(($unit * 8 + 3)) 640 $g_operator 2293 mkdev ${name}${unit}e b $blk $(($unit * 8 + 4)) 640 $g_operator 2294 mkdev ${name}${unit}f b $blk $(($unit * 8 + 5)) 640 $g_operator 2295 mkdev ${name}${unit}g b $blk $(($unit * 8 + 6)) 640 $g_operator 2296 mkdev ${name}${unit}h b $blk $(($unit * 8 + 7)) 640 $g_operator 2297 mkdev r${name}${unit}a c $chr $(($unit * 8 + 0)) 640 $g_operator 2298 mkdev r${name}${unit}b c $chr $(($unit * 8 + 1)) 640 $g_operator 2299 mkdev r${name}${unit}c c $chr $(($unit * 8 + 2)) 640 $g_operator 2300 mkdev r${name}${unit}d c $chr $(($unit * 8 + 3)) 640 $g_operator 2301 mkdev r${name}${unit}e c $chr $(($unit * 8 + 4)) 640 $g_operator 2302 mkdev r${name}${unit}f c $chr $(($unit * 8 + 5)) 640 $g_operator 2303 mkdev r${name}${unit}g c $chr $(($unit * 8 + 6)) 640 $g_operator 2304 mkdev r${name}${unit}h c $chr $(($unit * 8 + 7)) 640 $g_operator 2305} 2306 2307makedisk_p12high() 2308{ 2309 ho=524280 # offset for partition 9 to 11 (same as ...p16high) 2310 name="$1"; unit="$2"; blk="$3"; chr="$4" 2311 2312 ro=%RAWDISK_OFF% 2313 mkdev ${name}${unit} b $blk $(($unit * 8 + $ro)) 640 $g_operator 2314 mkdev r${name}${unit} c $chr $(($unit * 8 + $ro)) 640 $g_operator 2315 2316 mkdev ${name}${unit}a b $blk $(($unit * 8 + 0)) 640 $g_operator 2317 mkdev ${name}${unit}b b $blk $(($unit * 8 + 1)) 640 $g_operator 2318 mkdev ${name}${unit}c b $blk $(($unit * 8 + 2)) 640 $g_operator 2319 mkdev ${name}${unit}d b $blk $(($unit * 8 + 3)) 640 $g_operator 2320 mkdev ${name}${unit}e b $blk $(($unit * 8 + 4)) 640 $g_operator 2321 mkdev ${name}${unit}f b $blk $(($unit * 8 + 5)) 640 $g_operator 2322 mkdev ${name}${unit}g b $blk $(($unit * 8 + 6)) 640 $g_operator 2323 mkdev ${name}${unit}h b $blk $(($unit * 8 + 7)) 640 $g_operator 2324 mkdev ${name}${unit}i b $blk $(($unit * 8 + $ho + 8)) 640 $g_operator 2325 mkdev ${name}${unit}j b $blk $(($unit * 8 + $ho + 9)) 640 $g_operator 2326 mkdev ${name}${unit}k b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator 2327 mkdev ${name}${unit}l b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator 2328 mkdev r${name}${unit}a c $chr $(($unit * 8 + 0)) 640 $g_operator 2329 mkdev r${name}${unit}b c $chr $(($unit * 8 + 1)) 640 $g_operator 2330 mkdev r${name}${unit}c c $chr $(($unit * 8 + 2)) 640 $g_operator 2331 mkdev r${name}${unit}d c $chr $(($unit * 8 + 3)) 640 $g_operator 2332 mkdev r${name}${unit}e c $chr $(($unit * 8 + 4)) 640 $g_operator 2333 mkdev r${name}${unit}f c $chr $(($unit * 8 + 5)) 640 $g_operator 2334 mkdev r${name}${unit}g c $chr $(($unit * 8 + 6)) 640 $g_operator 2335 mkdev r${name}${unit}h c $chr $(($unit * 8 + 7)) 640 $g_operator 2336 mkdev r${name}${unit}i c $chr $(($unit * 8 + $ho + 8)) 640 $g_operator 2337 mkdev r${name}${unit}j c $chr $(($unit * 8 + $ho + 9)) 640 $g_operator 2338 mkdev r${name}${unit}k c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator 2339 mkdev r${name}${unit}l c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator 2340} 2341 2342makedisk_p16() 2343{ 2344 name="$1"; unit="$2"; blk="$3"; chr="$4" 2345 2346 ro=%RAWDISK_OFF% 2347 mkdev ${name}${unit} b $blk $(($unit * 16 + $ro)) 640 $g_operator 2348 mkdev r${name}${unit} c $chr $(($unit * 16 + $ro)) 640 $g_operator 2349 2350 mkdev ${name}${unit}a b $blk $(($unit * 16 + 0)) 640 $g_operator 2351 mkdev ${name}${unit}b b $blk $(($unit * 16 + 1)) 640 $g_operator 2352 mkdev ${name}${unit}c b $blk $(($unit * 16 + 2)) 640 $g_operator 2353 mkdev ${name}${unit}d b $blk $(($unit * 16 + 3)) 640 $g_operator 2354 mkdev ${name}${unit}e b $blk $(($unit * 16 + 4)) 640 $g_operator 2355 mkdev ${name}${unit}f b $blk $(($unit * 16 + 5)) 640 $g_operator 2356 mkdev ${name}${unit}g b $blk $(($unit * 16 + 6)) 640 $g_operator 2357 mkdev ${name}${unit}h b $blk $(($unit * 16 + 7)) 640 $g_operator 2358 mkdev ${name}${unit}i b $blk $(($unit * 16 + 8)) 640 $g_operator 2359 mkdev ${name}${unit}j b $blk $(($unit * 16 + 9)) 640 $g_operator 2360 mkdev ${name}${unit}k b $blk $(($unit * 16 + 10)) 640 $g_operator 2361 mkdev ${name}${unit}l b $blk $(($unit * 16 + 11)) 640 $g_operator 2362 mkdev ${name}${unit}m b $blk $(($unit * 16 + 12)) 640 $g_operator 2363 mkdev ${name}${unit}n b $blk $(($unit * 16 + 13)) 640 $g_operator 2364 mkdev ${name}${unit}o b $blk $(($unit * 16 + 14)) 640 $g_operator 2365 mkdev ${name}${unit}p b $blk $(($unit * 16 + 15)) 640 $g_operator 2366 mkdev r${name}${unit}a c $chr $(($unit * 16 + 0)) 640 $g_operator 2367 mkdev r${name}${unit}b c $chr $(($unit * 16 + 1)) 640 $g_operator 2368 mkdev r${name}${unit}c c $chr $(($unit * 16 + 2)) 640 $g_operator 2369 mkdev r${name}${unit}d c $chr $(($unit * 16 + 3)) 640 $g_operator 2370 mkdev r${name}${unit}e c $chr $(($unit * 16 + 4)) 640 $g_operator 2371 mkdev r${name}${unit}f c $chr $(($unit * 16 + 5)) 640 $g_operator 2372 mkdev r${name}${unit}g c $chr $(($unit * 16 + 6)) 640 $g_operator 2373 mkdev r${name}${unit}h c $chr $(($unit * 16 + 7)) 640 $g_operator 2374 mkdev r${name}${unit}i c $chr $(($unit * 16 + 8)) 640 $g_operator 2375 mkdev r${name}${unit}j c $chr $(($unit * 16 + 9)) 640 $g_operator 2376 mkdev r${name}${unit}k c $chr $(($unit * 16 + 10)) 640 $g_operator 2377 mkdev r${name}${unit}l c $chr $(($unit * 16 + 11)) 640 $g_operator 2378 mkdev r${name}${unit}m c $chr $(($unit * 16 + 12)) 640 $g_operator 2379 mkdev r${name}${unit}n c $chr $(($unit * 16 + 13)) 640 $g_operator 2380 mkdev r${name}${unit}o c $chr $(($unit * 16 + 14)) 640 $g_operator 2381 mkdev r${name}${unit}p c $chr $(($unit * 16 + 15)) 640 $g_operator 2382} 2383 2384makedisk_p16high() 2385{ 2386 ho=524280 # offset for partition 9 to 16 2387 name="$1"; unit="$2"; blk="$3"; chr="$4" 2388 2389 ro=%RAWDISK_OFF% 2390 mkdev ${name}${unit} b $blk $(($unit * 8 + $ro)) 640 $g_operator 2391 mkdev r${name}${unit} c $chr $(($unit * 8 + $ro)) 640 $g_operator 2392 2393 mkdev ${name}${unit}a b $blk $(($unit * 8 + 0)) 640 $g_operator 2394 mkdev ${name}${unit}b b $blk $(($unit * 8 + 1)) 640 $g_operator 2395 mkdev ${name}${unit}c b $blk $(($unit * 8 + 2)) 640 $g_operator 2396 mkdev ${name}${unit}d b $blk $(($unit * 8 + 3)) 640 $g_operator 2397 mkdev ${name}${unit}e b $blk $(($unit * 8 + 4)) 640 $g_operator 2398 mkdev ${name}${unit}f b $blk $(($unit * 8 + 5)) 640 $g_operator 2399 mkdev ${name}${unit}g b $blk $(($unit * 8 + 6)) 640 $g_operator 2400 mkdev ${name}${unit}h b $blk $(($unit * 8 + 7)) 640 $g_operator 2401 mkdev ${name}${unit}i b $blk $(($unit * 8 + $ho + 8)) 640 $g_operator 2402 mkdev ${name}${unit}j b $blk $(($unit * 8 + $ho + 9)) 640 $g_operator 2403 mkdev ${name}${unit}k b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator 2404 mkdev ${name}${unit}l b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator 2405 mkdev ${name}${unit}m b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator 2406 mkdev ${name}${unit}n b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator 2407 mkdev ${name}${unit}o b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator 2408 mkdev ${name}${unit}p b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator 2409 mkdev r${name}${unit}a c $chr $(($unit * 8 + 0)) 640 $g_operator 2410 mkdev r${name}${unit}b c $chr $(($unit * 8 + 1)) 640 $g_operator 2411 mkdev r${name}${unit}c c $chr $(($unit * 8 + 2)) 640 $g_operator 2412 mkdev r${name}${unit}d c $chr $(($unit * 8 + 3)) 640 $g_operator 2413 mkdev r${name}${unit}e c $chr $(($unit * 8 + 4)) 640 $g_operator 2414 mkdev r${name}${unit}f c $chr $(($unit * 8 + 5)) 640 $g_operator 2415 mkdev r${name}${unit}g c $chr $(($unit * 8 + 6)) 640 $g_operator 2416 mkdev r${name}${unit}h c $chr $(($unit * 8 + 7)) 640 $g_operator 2417 mkdev r${name}${unit}i c $chr $(($unit * 8 + $ho + 8)) 640 $g_operator 2418 mkdev r${name}${unit}j c $chr $(($unit * 8 + $ho + 9)) 640 $g_operator 2419 mkdev r${name}${unit}k c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator 2420 mkdev r${name}${unit}l c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator 2421 mkdev r${name}${unit}m c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator 2422 mkdev r${name}${unit}n c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator 2423 mkdev r${name}${unit}o c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator 2424 mkdev r${name}${unit}p c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator 2425} 2426 2427# make only the very few basic disk device nodes - 'a' partition 2428# and raw partition 2429makedisk_minimal() 2430{ 2431 name=$1; unit=$2; blk=$3; chr=$4 2432 doff=%DISKMINOROFFSET% 2433 ro=%RAWDISK_OFF% 2434 rn=%RAWDISK_NAME% 2435 2436 mkdev ${name}${unit} b $blk $(($unit * $doff + $ro)) 640 $g_operator 2437 mkdev r${name}${unit} c $chr $(($unit * $doff + $ro)) 640 $g_operator 2438 2439 mkdev ${name}${unit}a b $blk $(($unit * $doff + 0)) 640 $g_operator 2440 mkdev ${name}${unit}$rn b $blk $(($unit * $doff + $ro)) 640 $g_operator 2441 mkdev r${name}${unit}a c $chr $(($unit * $doff + 0)) 640 $g_operator 2442 mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator 2443} 2444 2445# create_mfs_dev nodes 2446# Create a memory file system for a given number of device nodes, 2447# and mount it. Attempts to use mount_tmpfs, or falls back to 2448# mount_mfs. 2449# 2450# If do_redirect, then also redirect output to the console. 2451# 2452create_mfs_dev() 2453{ 2454 ndevnodes=${1-1200} 2455 dev_mountpoint=${PWD:-/dev} 2456 2457 # Number of inodes is the specified number of device nodes, plus 2458 # a margin to allow for extra device nodes created later. 2459 ninode=$((ndevnodes * 11 / 10)) 2460 # Add 2 reserved inodes (needed for both mfs and tmpfs), and round 2461 # up to a multiple of 32 (needed for mfs, not needed for tmpfs). 2462 ninode=$(( (ninode + 2 + 31) / 32 * 32 )) 2463 # Try tmpfs; if that fails try mfs. 2464 # 2465 # For tmpfs, allocate 16KB and 512 byte per node. 2466 # Actual requirements are much lower, but the size limit 2467 # is only intended to avoid accidental writing to /dev. 2468 fs_bytes=$((16384 + ninode * 512)) 2469 if mount_tmpfs -s $fs_bytes -n $ninode -m 0755 \ 2470 -o union tmpfs "$dev_mountpoint" 2471 then 2472 fstype=tmpfs 2473 else 2474 # This file system size calculation is exact for mount_mfs(8) 2475 # with 512-byte sectors. 40960 bytes (80 blocks) is the 2476 # minimum size allowed by mount_mfs. 2477 fs_bytes=$((8192 + 2 * 8192 + 4096 + ninode*512 + 8192)) 2478 [ "$fs_bytes" -lt 40960 ] && fs_bytes=40960 2479 fs_blocks=$((fs_bytes/512)) 2480 if mount_mfs -b 4096 -f 512 -s $fs_blocks -n $ninode -p 0755 \ 2481 -o union swap "$dev_mountpoint" 2482 then 2483 fstype=mfs 2484 else 2485 die "Failed to create memory file system" 2486 fi 2487 fi 2488 2489 # Our current directory was in the lower file system; change it to 2490 # the newly mounted upper file system. 2491 cd "$dev_mountpoint" 2492 2493 if $do_redirect; then 2494 # Redirect stdout and stderr to console 2495 ${MKNOD} -m 600 -g 0 -u 0 temp_console c %CONSOLE_CMAJOR% 0 2496 exec >temp_console 2>&1 2497 rm temp_console 2498 fi 2499 2500 echo "Created $fstype $dev_mountpoint" \ 2501 "($fs_bytes byte, $ninode inodes)" 2502} 2503 2504# 2505# MAIN: If MAKEDEV_AS_LIBRARY is set, then we are being used as a 2506# function library, so just return. Otherwise, do all the real work. 2507# 2508[ -n "${MAKEDEV_AS_LIBRARY}" ] && return 2509makedev_main makedev ${1+"$@"} 2510