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