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