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