snj doesn't like my accent, so use proper English month names.
[netbsd-mini2440.git] / etc / MAKEDEV.tmpl
bloba404b53e59af9e3f247f9d12f4b1dacdf97ee007
1 #!/bin/sh -
2 # $NetBSD: MAKEDEV.tmpl,v 1.129 2009/09/24 14:53:36 christos Exp $
4 # Copyright (c) 2003,2007,2008 The NetBSD Foundation, Inc.
5 # All rights reserved.
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.
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.
29 ###########################################################################
31 # PLEASE RUN "cd ../share/man/man8 ; make makedevs"
32 # AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE!
34 ###########################################################################
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 # wscons make wscons devices
46 # usbs make USB devices
47 # isdns make ISDN devices
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
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")
69 # fss* Files system snapshot devices
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
84 # xbd* Xen virtual disks
85 # xd* Xylogic 753/7053 disks
86 # xy* Xylogic 450/451 disks
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)
96 # Keyboard devices:
97 # wskbd* wscons keyboard events
98 # kbd raw keyboard (provides events, for X11)
99 # kbdctl keyboard control
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
124 # epcom EP93xx COM ports
125 # ttyM? HP200/300 4 port serial mux interface (hp300)
126 # ttya "ttya" system console (luna68k)
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)
147 # xencons Xen virtual console
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
159 # Call units:
160 # dn* UNIBUS DN11 and emulations (e.g. Able Quadracall)
162 # Pseudo terminals:
163 # ptm pty multiplexor device, and pts directory
164 # pty* set of 16 master and slave pseudo terminals
165 # opty first 16 ptys, to save inodes on install media
166 # ipty first 2 ptys, for install media use only
168 # Printers:
169 # arcpp* Archimedes parallel port
170 # lpt* stock lp
171 # lpa* interruptless lp
172 # par* Amiga motherboard parallel port
173 # cpi* Macintosh Nubus CSI parallel printer card
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
183 # ttyY* USB serial adapters
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
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
200 # etvme Tseng et-compatible cards on VME (atari)
201 # ik* UNIBUS interface to Ikonas frame buffer
202 # leo Circad Leonardo VME-bus true color (atari)
203 # ps* UNIBUS interface to Picture System 2
204 # qv* QVSS (MicroVAX) display
205 # tcx* accelerated 8/24-bit color frame buffer
207 # Maple bus devices:
208 # maple Maple bus control devices
209 # mlcd* Maple bus LCD devices
210 # mmem* Maple bus storage devices
212 # IEEE1394 bus devices:
213 # fw* IEEE1394 bus generic node access devices
214 # fwmem* IEEE1394 bus physical memory of the remote node access devices
216 # Special purpose devices:
217 # ad* UNIBUS interface to Data Translation A/D converter
218 # agp* AGP GART devices
219 # altq ALTQ control interface
220 # amr* AMI MegaRaid control device
221 # apm power management device
222 # audio* audio devices
223 # bell* OPM bell device (x68k)
224 # bktr Brooktree 848/849/878/879 based TV cards
225 # bpf packet filter
226 # bthub Bluetooth Device Hub control interface
227 # cfs* Coda file system device
228 # ch* SCSI media changer
229 # cir* Consumer IR
230 # clockctl clock control for non root users
231 # cpuctl CPU control
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
236 # drm* Direct Rendering Manager interface
237 # fb* PMAX generic framebuffer pseudo-device
238 # fd file descriptors
239 # grf* graphics frame buffer device
240 # hdaudio* High Definition audio control device
241 # hil HP300 HIL input devices
242 # icp ICP-Vortex/Intel RAID control interface
243 # iic* IIC bus device
244 # io x86 IOPL access for COMPAT_10, COMPAT_FREEBSD
245 # iop* I2O IOP control interface
246 # ipl IP Filter
247 # irframe* IrDA physical frame
248 # ite* terminal emulator interface to HP300 graphics devices
249 # joy* joystick device
250 # kttcp kernel ttcp helper device
251 # lockstat kernel locking statistics
252 # magma* Magma multiport serial/parallel cards
253 # midi* MIDI
254 # mlx* Mylex DAC960 control interface
255 # mly* Mylex AcceleRAID/eXtremeRAID control interface
256 # np* UNIBUS Ethernet co-processor interface, for downloading.
257 # nsmb* SMB requester
258 # openfirm OpenFirmware accessor
259 # pad* Pseudo-audio device driver
260 # pci* PCI bus access devices
261 # pf PF packet filter
262 # pow* power management device (x68k)
263 # putter Pass-to-Userspace Transporter
264 # px* PixelStamp Xserver access
265 # radio* radio devices
266 # random Random number generator
267 # rtc* RealTimeClock
268 # satlink* PlanetConnect satellite receiver driver
269 # scsibus* SCSI busses
270 # se* SCSI Ethernet
271 # ses* SES/SAF-TE SCSI Devices
272 # speaker PC speaker (XXX - installed)
273 # sram battery backuped memory (x68k)
274 # ss* SCSI scanner
275 # stic* PixelStamp interface chip
276 # sysmon System Monitoring hardware
277 # tap* virtual Ethernet device
278 # tun* network tunnel driver
279 # twa 3ware Apache control interface
280 # twe 3ware Escalade control interface
281 # uk* unknown SCSI device
282 # veriexec Veriexec fingerprint loader
283 # video* video capture devices
284 # view* generic interface to graphic displays (Amiga)
285 # vmegen* generic VME access
286 # wsfont* console font control
287 # wsmux* wscons event multiplexor
288 # xenevt Xen event interface
292 # NOTE:
294 # * MAKEDEV is used both as a standalone script (via "sh ./MAKEDEV
295 # all" or similar), and as a function library for MAKEDEV.local (via
296 # "MAKEDEV_AS_LIBRARY=1 . MAKEDEV"). Because of this, the script
297 # should consist almost entirely of function definitions, apart from a
298 # few lines right at the end.
300 # * MAKEDEV may be executed in an environment that is missing some
301 # common commands. For example, it may be executed from a minimal
302 # system used during installation, or it may be executed early in the
303 # boot sequence before most file systems have been mounted. It may
304 # also be executed in a cross-build environment on a non-NetBSD host.
307 usage()
309 cat 1>&2 << _USAGE_
310 Usage: ${0##*/} [-fMs] [-m mknod] [-p pax] [-t mtree] special [...]
311 Create listed special devices. Options:
312 -f Force permissions to be updated on existing devices.
313 -M Create memory file system.
314 -m mknod Name of mknod(8) program. [\$TOOL_MKNOD or mknod]
315 -p pax Name of pax(1) program. [\$TOOL_PAX or pax]
316 -s Generate mtree(8) specfile instead of creating devices.
317 -t mtree Name of mtree(8) program. [\$TOOL_MTREE or mtree]
319 _USAGE_
320 exit 1
323 # zeropad width number
324 # display number with a zero (`0') padding of width digits.
326 zeropad()
328 case $(($1 - ${#2})) in
329 5) echo 00000$2;;
330 4) echo 0000$2;;
331 3) echo 000$2;;
332 2) echo 00$2;;
333 1) echo 0$2;;
334 0) echo $2;;
335 *) die "bad padding" ;;
336 esac
339 # hexprint number
340 # display (base10) number as hexadecimal
342 hexprint()
344 val="$(($1 + 0))"
345 hex=
346 set -- 0 1 2 3 4 5 6 7 8 9 a b c d e f
347 while [ "$val" -gt 0 ]; do
348 eval hex=\$$(($val % 16 + 1))\$hex
349 val="$(($val / 16))"
350 done
351 echo "${hex:-0}"
354 # linecount multiline_string
355 # count the number of lines in the string
357 linecount()
359 local IFS='
360 ' # just a newline, no other white space between the quotes
361 set -- $1
362 echo $#
365 # nooutput -12 cmd [args...]
366 # run a command with stdout and/or stderr ignored.
367 # "nooutput -1 cmd" is like "cmd >/dev/null";
368 # "nooutput -2 cmd" is like "{ cmd ; } 2>/dev/null";
369 # "nooutput -12 cmd" is like "{ cmd ; } >/dev/null 2>&1";
370 # except they should work even if /dev/null doesn't [yet] exist.
372 # The "{...}" wrapper used in cases where stderr is redirected
373 # serves to capture shell error messages such as "cmd: not found".
375 nooutput()
377 local flags="$1" ; shift
378 local junk
379 case "$flags" in
380 "-1") junk="$( "$@" )" ;;
381 "-2") exec 4>&1 ; junk="$( { "$@" ; } 2>&1 1>&4 )" ; exec 4>&- ;;
382 "-12") junk="$( { "$@" ; } 2>&1 )" ;;
383 *) warn "Incorrect use of nooutput" ;;
384 esac
387 # check_pax path_to_pax
388 # Check whether pax exists and supports the command line options
389 # and input format that we will want to use.
391 check_pax()
393 local pax="$1"
394 echo ". type=dir optional" | nooutput -12 "${pax}" -r -w -M -pe .
397 # check_mtree path_to_mtree
398 # Check whether mtree exists and supports the command line options
399 # and input format that we will want to use.
401 check_mtree()
403 local mtree="$1"
404 echo ". type=dir optional" | nooutput -12 "${mtree}" -e -U
407 # setup args...
408 # Parse command line arguments, exit on error.
409 # Callers should shift $((OPTIND - 1)) afterwards.
411 setup()
413 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/rescue
415 : ${TOOL_MKNOD:=mknod}
416 : ${TOOL_MTREE:=mtree}
417 : ${TOOL_PAX:=pax}
418 do_create_mfs=false
419 do_force=false
420 do_mknod=false
421 do_pax=false
422 do_mtree=false
423 do_redirect=false
424 do_specfile=false
425 opts=
426 while getopts Mfm:p:st: ch; do
427 # Note that $opts is only for options pased through to
428 # MAKEDEV.local, not for all options.
429 case ${ch} in
431 # "-M" sets do_create_mfs;
432 # "-M -M" is for use from init(8), and sets do_redirect
433 do_redirect=$do_create_mfs
434 do_create_mfs=true
436 f) do_force=true
437 opts="${opts} -f"
439 m) TOOL_MKNOD=${OPTARG}
440 do_mknod=true
441 opts="${opts} -m ${OPTARG}"
443 p) TOOL_PAX="${OPTARG}"
444 if check_pax "${TOOL_PAX}"; then
445 do_pax=true
446 # do not add this to $opts; we will later
447 # add "-s" instead.
448 else
449 warn "Ignored -p option:" \
450 "${TOOL_PAX} is missing or broken"
451 do_mknod=true
454 s) do_specfile=true
455 opts="${opts} -s"
457 t) TOOL_MTREE="${OPTARG}"
458 if check_mtree "${TOOL_MTREE}"; then
459 do_mtree=true
460 # do not add this to $opts; we will later
461 # add "-s" instead.
462 else
463 warn "Ignored -t option:" \
464 "${TOOL_MTREE} is missing or broken"
465 do_mknod=true
468 *) usage ;;
469 esac
470 done
472 shift $((${OPTIND} - 1))
473 [ $# -gt 0 ] || usage
475 u_root="%uid_root%"
476 u_uucp="%uid_uucp%"
477 g_kmem="%gid_kmem%"
478 g_ntpd="%gid_ntpd%"
479 g_operator="%gid_operator%"
480 g_wheel="%gid_wheel%"
481 dialin=0
482 dialout=524288
483 callunit=262144
485 # only allow read&write for owner by default
486 umask 077
488 # Set fdesc_mounted=true if the fdesc file system is mounted
489 # on the current directory (typically "/dev").
490 # Later, this will be used to suppress creation of device nodes
491 # that are supplied by the fdesc file system.
493 fdesc_mounted=false
494 if [ -d fd ]; then
495 # Parse the output from "mount -u -o nosuchoption .".
496 # We don't parse the output from df(1) because that's
497 # less likely to be available on install media.
499 # If the current directory is a mount point for the
500 # fdesc file system, then the expected output (whether
501 # or not the current user is root) is:
502 # mount_fdesc: -o suchoption: option not supported.
504 # If the current directory is not a mount point, then
505 # the expected output is:
506 # mount: .: unknown special file or file system.
508 # If we are not running on NetBSD, or mount(8) is not
509 # found, then we should get some other error message.
511 case "$({ LC_ALL=C mount -u -o nosuchoption . ; } 2>&1)" in
512 *mount_fdesc*) fdesc_mounted=true ;;
513 esac
516 # do_force requires mknod
517 if $do_force; then
518 if $do_mtree || $do_pax || $do_specfile; then
519 die "-f option works only with mknod"
521 do_mknod=true
524 # If no explicit method was specified on the command line or
525 # forced above, then use one of mtree, pax, or mknod, in that
526 # order of preference.
528 # mtree is preferred because it's fast and designed for the
529 # purpose. However, it's unlikely to be available early in the
530 # boot sequence, when init(8) may invoke MAKEDEV(8).
532 # pax is usually acceptable, and it's likely to be available
533 # early in the boot sequence. However, it's much slower than mtree.
535 # mknod is just very slow, because the shell has to fork for
536 # each device node.
538 if ! ( $do_mtree || $do_pax || $do_mknod || $do_specfile ); then
539 if check_mtree "${TOOL_MTREE}"; then
540 do_mtree=true
541 elif check_pax "${TOOL_PAX}"; then
542 do_pax=true
543 else
544 do_mknod=true
548 # Now we need exactly one node-creation method.
549 case $(( $($do_mtree && echo 1 || echo 0) + \
550 $($do_pax && echo 1 || echo 0) + \
551 $($do_mknod && echo 1 || echo 0) + \
552 $($do_specfile && echo 1 || echo 0) ))
554 1) : OK ;;
555 *) die "-m, -p, -s, and -t options are mutually exclusive" ;;
556 esac
558 # If we are using mknod, then decide what options to pass it.
559 if $do_mknod; then
560 MKNOD="${TOOL_MKNOD:-mknod} -F netbsd"
561 if $do_force; then
562 MKNOD="${MKNOD} -R"
563 else
564 MKNOD="${MKNOD} -r"
568 # do_mtree or do_pax internally implies do_specfile.
569 # This happens after checking for mutually-exclusive options.
570 if ($do_mtree || $do_pax) && ! $do_specfile; then
571 do_specfile=true
572 opts="${opts} -s"
576 # wrap_makedev makedev_name ...
577 # Invoke a makedev-like function, with additional processing
578 # as appropriate for use from the outer level.
580 wrap_makedev()
582 if $do_specfile; then
583 # "." must appear as the first line of the specfile.
584 # "optional" means do not create the directory itself.
585 echo ". type=dir optional"
587 "$@"
590 # makedev_main makedev_name args...
591 # Perform most of the work of the main program. makedev_name
592 # is typically "makedev", but may be the name of some other
593 # makedev-like function (if we are invoked from MAKEDEV.local or
594 # some other script). The other args to this function are the
595 # command line args with which the MAKEDEV (or MAKEDEV.local)
596 # script was invoked.
598 makedev_main()
600 local makedev="$1" ; shift
602 # Parse command line args
603 setup ${1+"$@"}
604 shift $((${OPTIND}-1))
606 if $do_create_mfs; then
607 # Count inodes and create mfs file system.
608 # The makedev call merely updates $count_nodes.
609 count_nodes=0
610 $makedev ${1+"$@"}
611 create_mfs_dev $count_nodes
612 unset count_nodes
615 # If using mtree or pax, then wrap_makedev should print an mtree
616 # specification, which we postprocess to create the device nodes.
617 # Otherwise, wrap_makedev should do all the work itself.
618 if $do_mtree ; then
619 wrap_makedev $makedev ${1+"$@"} \
620 | nooutput -1 "${TOOL_MTREE}" -e -U
621 elif $do_pax ; then
622 wrap_makedev $makedev ${1+"$@"} \
624 # Run pax in an empty directory, so it pays
625 # attention only to the specfile, without being
626 # confused by the existing contents of the target
627 # directory. Without this, pax would complain "file
628 # would overwrite itself" for already-existing
629 # device nodes.
630 tmpdir=./tmp.$$
631 mkdir "${tmpdir}" || die "can't create temporary directory"
632 cd "${tmpdir}" || die "can't cd to temporary directory"
633 "${TOOL_PAX}" -r -w -M -pe ..
634 status=$?
635 cd .. # back to where we started
636 rmdir "${tmpdir}"
637 exit $status
639 else
640 wrap_makedev $makedev ${1+"$@"}
645 # functions available to create nodes:
647 # mkdev name [b|c] major minor [mode{=600} [gid{=0} [uid{=0}]]]
648 # create device node `name' with the appropriate permissions
650 # lndev src target
651 # create a symlink from src to target
653 # makedir dir mode
654 # create directory with appropriate mode
657 mkdev()
659 if [ -n "$count_nodes" ]; then
660 count_nodes=$((count_nodes + 1))
661 return
663 if $do_specfile; then
664 case $2 in
665 b) type=block ;;
666 c) type=char ;;
667 esac
668 echo "./$1 type=${type} device=netbsd,$3,$4 mode=${5:-600} gid=${6:-$g_wheel} uid=${7:-$u_root}"
669 else
670 ${MKNOD} -m ${5:-600} -g \#${6:-$g_wheel} -u \#${7:-$u_root} $1 $2 $3 $4
674 lndev()
676 if [ -n "$count_nodes" ]; then
677 count_nodes=$((count_nodes + 1))
678 return
680 if $do_specfile; then
681 echo "./$2 type=link link=$1 mode=0700 gid=$g_wheel uid=$u_root"
682 else
683 ln -f -s $1 $2
687 makedir()
689 if [ -n "$count_nodes" ]; then
690 count_nodes=$((count_nodes + 1))
691 return
693 if $do_specfile; then
694 echo "./$1 type=dir mode=$2 gid=$g_wheel uid=$u_root"
695 else
696 nooutput -2 mkdir $1
697 chmod $2 $1
701 warn()
703 echo 1>&2 "$0: $*"
706 die()
708 echo 1>&2 "$0: $*"
709 exit 1
712 # makedev special [...]
713 # the main loop
715 makedev()
718 for i
721 case $i in
723 %MD_DEVICES%
725 all)
726 makedev all_md
727 makedev std fd ptm pty0 pty1 pty2 pty3
728 makedev ccd0 ccd1 ccd2 ccd3
729 makedev cgd0 cgd1 cgd2 cgd3
730 makedev fss0 fss1 fss2 fss3
731 makedev md0 md1
732 makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7
733 makedev vnd0 vnd1 vnd2 vnd3
734 makedev bpf
735 makedev tun0 tun1 tun2 tun3
736 makedev ipl pf crypto random
737 makedev lockstat clockctl cpuctl
738 makedev atabus0 atabus1 atabus2 atabus3
739 makedev tap tap0 tap1 tap2 tap3
740 makedev gpio gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7
741 makedev pad pad0 pad1 pad2 pad3
742 makedev bthub
743 makedev putter
744 makedev drvctl
745 makedev video
746 makedev drm0
747 makedev altmem
748 makedev zfs
749 makedev local # do this last
752 init)
753 # unless overridden by MD entry, this is equal to 'all'
754 makedev all
757 %MI_DEVICES_BEGIN%
758 audio)
759 makedev audio0 audio1 audio2 audio3
760 makedev hdaudio0 hdaudio1 hdaudio2 hdaudio3
761 lndev sound0 sound
762 lndev audio0 audio
763 lndev mixer0 mixer
764 lndev audioctl0 audioctl
767 gpio)
768 makedev gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7
769 lndev gpio0 gpio
772 pad)
773 makedev pad0 pad1 pad2 pad3
774 lndev pad0 pad
777 radio)
778 makedev radio0 radio1
779 lndev radio0 radio
782 video)
783 makedev video0 video1 video2 video3
786 altmem)
787 makedev altmem0 altmem1
790 ramdisk)
791 makedev floppy md0
794 usbs)
795 makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7
796 makedev uhid0 uhid1 uhid2 uhid3
797 makedev ulpt0 ulpt1
798 makedev ttyU0 ttyU1
799 makedev ttyY0 ttyY1
800 makedev urio0
801 makedev uscanner0 uscanner1
802 makedev utoppy0 utoppy1
803 makedev ugen0
806 isdns)
807 makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdnteld0 isdnteld1 isdntrc0 isdntrc1
810 std)
811 mkdev console c %cons_chr% 0 600
812 mkdev constty c %cons_chr% 1 600
813 mkdev drum c %swap_chr% 0 640 $g_kmem
814 mkdev kmem c %mem_chr% 1 640 $g_kmem
815 mkdev mem c %mem_chr% 0 640 $g_kmem
816 mkdev null c %mem_chr% 2 666
817 mkdev zero c %mem_chr% 12 666
818 mkdev klog c %log_chr% 0 600
819 mkdev ksyms c %ksyms_chr% 0 444
820 if ! $fdesc_mounted; then
821 mkdev tty c %ctty_chr% 0 666
822 mkdev stdin c %filedesc_chr% 0 666
823 mkdev stdout c %filedesc_chr% 1 666
824 mkdev stderr c %filedesc_chr% 2 666
828 usb)
829 mkdev usb c %usb_chr% 255 444
832 usb*)
833 unit=${i#usb}
834 usb=usb$unit
835 mkdev usb$unit c %usb_chr% $unit
838 uhid*)
839 unit=${i#uhid}
840 mkdev uhid$unit c %uhid_chr% $unit 666
843 ulpt*)
844 unit=${i#ulpt}
845 mkdev ulpt$unit c %ulpt_chr% $unit
846 mkdev ulpn$unit c %ulpt_chr% $(($unit + 64))
849 urio*)
850 unit=${i#urio}
851 mkdev urio$unit c %urio_chr% $unit 666
854 uscanner*)
855 unit=${i#uscanner}
856 mkdev uscanner$unit c %uscanner_chr% $unit
859 utoppy*)
860 unit=${i#utoppy}
861 mkdev utoppy$unit c %utoppy_chr% $unit
864 ttyY*)
865 unit=${i#ttyY}
866 mkdev ttyY$unit c %ucycom_chr% $(($unit + $dialin )) "" "" $u_uucp
867 mkdev dtyY$unit c %ucycom_chr% $(($unit + $dialout )) "" "" $u_uucp
868 mkdev ctyY$unit c %ucycom_chr% $(($unit + $callunit)) "" "" $u_uucp
871 ttyU*)
872 unit=${i#ttyU}
873 mkdev ttyU$unit c %ucom_chr% $(($unit + $dialin )) "" "" $u_uucp
874 mkdev dtyU$unit c %ucom_chr% $(($unit + $dialout )) "" "" $u_uucp
875 mkdev ctyU$unit c %ucom_chr% $(($unit + $callunit)) "" "" $u_uucp
878 ugen*)
879 unit=${i#ugen}
880 for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
882 mkdev ugen$unit.$j c %ugen_chr% $(($unit * 16 + ${j#0}))
883 done
886 wscons)
887 makedev ttyE0 ttyE1 ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7
888 makedev wsmouse0 wsmouse1 wsmouse2 wsmouse3
889 makedev wskbd0 wskbd1 wskbd2 wskbd3
890 makedev wsmux0 wsmux1 wsmux2 wsmux3
891 makedev wsmouse wskbd
892 makedev ttyEcfg ttyEstat
893 makedev wsfont
896 wsmouse)
897 mkdev wsmouse c %wsmux_chr% 0
900 wskbd)
901 mkdev wskbd c %wsmux_chr% 1
904 wsmux*)
905 unit=${i#wsmux}
906 mkdev wsmux$unit c %wsmux_chr% $unit
907 mkdev wsmuxctl$unit c %wsmux_chr% $(($unit + 128)) 200
910 xenevt)
911 mkdev xenevt c %xenevt_chr% 0
914 xsd_kva)
915 mkdev xsd_kva c %xenevt_chr% 1
918 xencons)
919 mkdev xencons c %xencons_chr% 0
922 ttyEstat)
923 mkdev ttyEstat c %wsdisplay_chr% 254
926 ttyEcfg)
927 mkdev ttyEcfg c %wsdisplay_chr% 255
930 ttyE*)
931 unit=${i#ttyE}
932 mkdev ttyE$unit c %wsdisplay_chr% $unit
935 wsmouse*)
936 unit=${i#wsmouse}
937 mkdev wsmouse$unit c %wsmouse_chr% $unit
940 wskbd*)
941 unit=${i#wskbd}
942 mkdev wskbd$unit c %wskbd_chr% $unit
946 if ! $fdesc_mounted; then
947 makedir fd 755
949 while [ $n -lt 64 ]
951 mkdev fd/$n c %filedesc_chr% $n 666
952 n=$(($n + 1))
953 done
957 wt*)
958 case $i in
959 wt*) name=wt; unit=${i#wt}; chr=%wt_chr%; blk=%wt_blk%;;
960 esac
961 for sub in $unit $(($unit+8)) $(($unit+16))
963 mkdev $name$sub b $blk $(($sub + 0)) 660 $g_operator
964 mkdev n$name$sub b $blk $(($sub + 4)) 660 $g_operator
965 mkdev r$name$sub c $chr $(($sub + 0)) 660 $g_operator
966 mkdev nr$name$sub c $chr $(($sub + 4)) 660 $g_operator
967 done
970 md*)
971 makedisk_minimal md ${i#md} %md_blk% %md_chr%
974 fss*)
975 case $i in
976 fss*) name=fss; unit=${i#fss}; blk=%fss_blk%; chr=%fss_chr%
977 esac
978 mkdev $name$unit b $blk $unit 660 $g_operator
979 mkdev r$name$unit c $chr $unit 660 $g_operator
982 ss*)
983 case $i in
984 ss*) name=ss; unit=${i#ss}; chr=%ss_chr%;;
985 esac
986 mkdev $name$unit c $chr $(($unit * 16 + 0)) 640 $g_operator
987 mkdev n$name$unit c $chr $(($unit * 16 + 1)) 640 $g_operator
988 mkdev en$name$unit c $chr $(($unit * 16 + 3)) 640 $g_operator
991 ccd*|cgd*|raid*|vnd*)
992 case $i in
993 ccd*) name=ccd; unit=${i#ccd}; blk=%ccd_blk%; chr=%ccd_chr%;;
994 cgd*) name=cgd; unit=${i#cgd}; blk=%cgd_blk%; chr=%cgd_chr%;;
995 raid*) name=raid; unit=${i#raid}; blk=%raid_blk%; chr=%raid_chr%;;
996 vnd*) name=vnd; unit=${i#vnd}; blk=%vnd_blk%; chr=%vnd_chr%;;
997 esac
998 %MKDISK% $name $unit $blk $chr
1001 sd*)
1002 name=sd; unit=${i#sd}; blk=%sd_blk%; chr=%sd_chr%
1003 %MKDISK% $name $unit $blk $chr
1006 wd*)
1007 name=wd; unit=${i#wd}; blk=%wd_blk%; chr=%wd_chr%
1008 %MKDISK% $name $unit $blk $chr
1011 fd*)
1012 name=fd; unit=${i#fd}; blk=%fd_blk%; chr=%fd_chr%
1013 %MKDISK% $name $unit $blk $chr
1016 ld*)
1017 name=ld; unit=${i#ld}; blk=%ld_blk%; chr=%ld_chr%
1018 %MKDISK% $name $unit $blk $chr
1021 altmem*)
1022 name=altmem; unit=${i#altmem}; blk=%altmem_blk%; chr=%altmem_chr%
1023 %MKDISK% $name $unit $blk $chr
1026 bio)
1027 mkdev bio c %bio_chr% 0
1030 ed*)
1031 name=ed; unit=${i#ed}; blk=%ed_blk%; chr=%ed_chr%
1032 %MKDISK% $name $unit $blk $chr
1035 ofdisk*)
1036 name=ofdisk; unit=${i#ofdisk}; blk=%ofdisk_blk%; chr=%ofdisk_chr%
1037 %MKDISK% $name $unit $blk $chr
1040 xbd*)
1041 name=xbd; unit=${i#xbd}; blk=%xbd_blk%; chr=%xbd_chr%
1042 %MKDISK% $name $unit $blk $chr
1045 dk*)
1046 name=dk; unit=${i#dk}; blk=%dk_blk%; chr=%dk_chr%
1047 minor=0
1048 while [ $minor -le ${i#dk} ]
1050 mkdev r$name$minor c $chr $minor 0640 $g_operator
1051 mkdev $name$minor b $blk $minor 0640 $g_operator
1052 minor=$(($minor + 1))
1053 done
1056 ttyCY*)
1057 name=tyCY; chr=%cy_chr%; off=32
1058 unit=${i#t${name}}
1059 minor=$(($unit * $off))
1060 eminor=$(($minor + $off))
1061 while [ $minor -lt $eminor ]
1063 nminor=000$minor
1064 nminor=${nminor#${nminor%???}}
1065 mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
1066 mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
1067 minor=$(($minor + 1))
1068 done
1071 ttyCZ*)
1072 name=tyCZ; chr=%cz_chr%; off=64
1073 unit=${i#t${name}}
1074 minor=$(($unit * $off))
1075 eminor=$(($minor + $off))
1076 while [ $minor -lt $eminor ]
1078 nminor=0000$minor
1079 nminor=${nminor#${nminor%????}}
1080 mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
1081 mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
1082 minor=$(($minor + 1))
1083 done
1087 tty[0-9]|tty0[0-9])
1088 # some archs have built-in zstty (major %zstty_chr%) instead
1089 # of NS16550; create ttyZ* and hardlink as [dt]ty0*; this
1090 # needs to be before com entry, for archs which have both
1091 unit=${i#tty}
1092 unit=$(($unit + 0))
1093 makedev ttyZ${unit}
1094 lndev ttyZ$unit tty0${unit}
1095 lndev dtyZ$unit dty0${unit}
1098 tty0*|tty1*|tty[0-9])
1099 unit=${i#tty}
1100 ounit=00$unit
1101 ounit=${ounit#${ounit%??}}
1102 mkdev tty$ounit c %com_chr% $(($unit + $dialin )) "" "" $u_uucp
1103 mkdev dty$ounit c %com_chr% $(($unit + $dialout)) "" "" $u_uucp
1106 ttyC*)
1107 # some archs call com_chr ttyC traditionally
1108 unit=${i#ttyC}; name=ttyC; dname=dtyC; chr=%com_chr%
1109 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
1110 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
1113 ttyh*)
1114 unit=${i#ttyh}; name=ttyh; dname=dtyh; chr=%sabtty_chr%
1115 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
1116 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
1119 ttyTX*)
1120 unit=${i#ttyTX}; name=ttyTX0; dname=dtyTX0; chr=%txcom_chr%
1121 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
1122 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
1125 ttyZ*)
1126 unit=${i#ttyZ}; name=ttyZ; dname=dtyZ; chr=%zstty_chr%
1127 mkdev $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
1128 mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
1131 opty)
1132 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1134 case $j in
1135 [0-9]) jn=$j ;;
1136 a) jn=10 ;;
1137 b) jn=11 ;;
1138 c) jn=12 ;;
1139 d) jn=13 ;;
1140 e) jn=14 ;;
1141 f) jn=15 ;;
1142 esac
1143 mkdev ttyp$j c %pts_chr% $jn 666
1144 mkdev ptyp$j c %ptc_chr% $jn 666
1145 done
1148 pty*)
1149 class=${i#pty}
1150 d1="p q r s t u v w x y z P Q R S T"
1151 if [ "$class" -ge 64 ]
1152 then
1153 warn "$i: pty unit must be between 0 and 63"
1154 continue
1155 elif [ "$class" -lt 16 ]
1156 then
1157 offset=0
1158 mult=0
1159 d2="0 1 2 3 4 5 6 7 8 9 a b c d e f"
1160 else
1161 class=$(($class - 16))
1162 offset=256
1163 mult=2
1164 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"
1166 start=$(($class * 16))
1167 set -- $d2
1168 nt=$#
1169 s1=$(($start / $nt))
1170 set -- $d1
1171 shift $s1
1172 t1=$1
1173 if [ "$t1" = v ]; then
1174 warn "$i: pty unit conflicts with console ttyv0 device"
1175 continue
1177 s2=$(($start % ($nt - $s1 * $mult)))
1178 set -- $d2
1179 shift $s2
1180 t2=$1
1181 unit=$(($start + $offset - $s1 * $mult))
1182 end=$(($unit + 16))
1183 while [ "$unit" -lt "$end" ]
1185 mkdev tty$t1$t2 c %pts_chr% $unit 666
1186 mkdev pty$t1$t2 c %ptc_chr% $unit 666
1187 shift
1188 t2=$1
1189 if [ -z "$t2" ]
1190 then
1191 break
1193 unit=$(($unit + 1))
1194 done
1197 stic*)
1198 unit=${i#stic}
1199 mkdev stic$unit c %stic_chr% $unit
1202 st*)
1203 case $i in
1204 st*) name=st; unit=${i#st}; chr=%st_chr%; blk=%st_blk%;;
1205 esac
1206 mkdev $name$unit b $blk $(($unit * 16 + 0)) 660 $g_operator
1207 mkdev n$name$unit b $blk $(($unit * 16 + 1)) 660 $g_operator
1208 mkdev e$name$unit b $blk $(($unit * 16 + 2)) 660 $g_operator
1209 mkdev en$name$unit b $blk $(($unit * 16 + 3)) 660 $g_operator
1210 mkdev r$name$unit c $chr $(($unit * 16 + 0)) 660 $g_operator
1211 mkdev nr$name$unit c $chr $(($unit * 16 + 1)) 660 $g_operator
1212 mkdev er$name$unit c $chr $(($unit * 16 + 2)) 660 $g_operator
1213 mkdev enr$name$unit c $chr $(($unit * 16 + 3)) 660 $g_operator
1216 ses*|ch*|uk*)
1217 case $i in
1218 ch*) name=ch; unit=${i#ch}; chr=%ch_chr%;;
1219 uk*) name=uk; unit=${i#uk}; chr=%uk_chr%;;
1220 ses*) name=ses; unit=${i#ses}; chr=%ses_chr%;;
1221 esac
1222 mkdev $name$unit c $chr $unit 640 $g_operator
1225 cd*)
1226 makedisk_minimal cd ${i#cd} %cd_blk% %cd_chr%
1229 mcd*)
1230 makedisk_minimal mcd ${i#mcd} %mcd_blk% %mcd_chr%
1233 gdrom*)
1234 makedisk_minimal gdrom ${i#gdrom} %gdrom_blk% %gdrom_chr%
1237 lpt*|lpa*)
1238 case $i in
1239 lpt*) name=lpt; unit=${i#lpt}; chr=%lpt_chr%; flags=0;;
1240 lpa*) name=lpa; unit=${i#lpa}; chr=%lpt_chr%; flags=128;;
1241 esac
1242 mkdev $name$unit c $chr $(($unit + $flags))
1243 mkdev lpt${unit}ctl c $chr $(($unit + 256))
1246 bpf)
1247 mkdev bpf c %bpf_chr% 0
1248 lndev bpf bpf0
1251 bthub)
1252 mkdev bthub c %bthub_chr% 0
1255 tun*)
1256 unit=${i#tun}
1257 mkdev tun$unit c %tun_chr% $unit
1260 joy*)
1261 unit=${i#joy}
1262 mkdev joy$unit c %joy_chr% $unit
1265 ipl)
1266 mkdev ipl c %ipl_chr% 0
1267 mkdev ipnat c %ipl_chr% 1
1268 mkdev ipstate c %ipl_chr% 2
1269 mkdev ipauth c %ipl_chr% 3
1270 mkdev ipsync c %ipl_chr% 4
1271 mkdev ipscan c %ipl_chr% 5
1272 mkdev iplookup c %ipl_chr% 6
1276 mkdev pf c %pf_chr% 0
1279 crypto)
1280 mkdev crypto c %crypto_chr% 0 666
1283 cmos)
1284 mkdev cmos c %cmos_chr% 0 644
1287 speaker)
1288 mkdev speaker c %spkr_chr% 0
1291 lockstat)
1292 mkdev lockstat c %lockstat_chr% 0
1295 cpuctl)
1296 mkdev cpuctl c %cpuctl_chr% 0 666
1299 audio*)
1300 unit=${i#audio}
1301 audio=audio$unit
1302 sound=sound$unit
1303 mixer=mixer$unit
1304 audioctl=audioctl$unit
1305 : ${unit:-0}
1306 mkdev $sound c %audio_chr% $(($unit + 0)) 666
1307 mkdev $audio c %audio_chr% $(($unit + 128)) 666
1308 mkdev $mixer c %audio_chr% $(($unit + 16)) 666
1309 mkdev $audioctl c %audio_chr% $(($unit + 192)) 666
1312 hdaudio*)
1313 unit=${i#hdaudio}
1314 mkdev hdaudio$unit c %hdaudio_chr% $unit 644
1317 gpio*)
1318 unit=${i#gpio}
1319 mkdev gpio$unit c %gpio_chr% $unit 644
1322 rmidi*)
1323 unit=${i#rmidi}
1324 mkdev rmidi$unit c %midi_chr% $unit 666
1327 music*)
1328 unit=${i#music}
1329 : ${unit:-0}
1330 mkdev music$unit c %sequencer_chr% $(($unit + 0)) 666
1331 mkdev sequencer$unit c %sequencer_chr% $(($unit + 128)) 666
1334 radio*)
1335 unit=${i#radio}
1336 : ${unit:-0}
1337 mkdev radio$unit c %radio_chr% $unit 666
1340 video*)
1341 unit=${i#video}
1342 : ${unit:-0}
1343 mkdev video$unit c %video_chr% $unit 666
1346 amr*)
1347 unit=${i#amr}
1348 mkdev amr$unit c %amr_chr% $unit
1351 apm)
1352 mkdev apm c %apm_chr% 0 644
1353 mkdev apmctl c %apm_chr% 8 644
1356 apm)
1357 # hpcmips uses `apmdev_chr' instead of `apm_chr'
1358 mkdev apm c %apmdev_chr% 0 644
1359 mkdev apmctl c %apmdev_chr% 8 644
1362 satlink*)
1363 unit=${i#satlink}
1364 mkdev satlink$unit c %satlink_chr% $unit 444
1367 random)
1368 mkdev random c %rnd_chr% 0 444
1369 mkdev urandom c %rnd_chr% 1 644
1372 cfs)
1373 makedev cfs0
1376 cfs*)
1377 unit=${i#cfs}
1378 mkdev cfs$unit c %vcoda_chr% $unit
1381 sysmon)
1382 mkdev sysmon c %sysmon_chr% 0 644
1383 mkdev watchdog c %sysmon_chr% 1 644
1384 mkdev power c %sysmon_chr% 2 640
1387 scsibus*)
1388 unit=${i#scsibus}
1389 mkdev scsibus$unit c %scsibus_chr% $unit 644
1392 bktr)
1393 makedev bktr0 bktr1
1394 lndev bktr0 bktr
1395 lndev tuner0 tuner
1396 lndev vbi0 vbi
1399 bktr*)
1400 unit=${i#bktr}
1401 mkdev bktr$unit c %bktr_chr% $(($unit + 0)) 444
1402 mkdev tuner$unit c %bktr_chr% $(($unit + 16)) 444
1403 mkdev vbi$unit c %bktr_chr% $(($unit + 32)) 444
1407 mkdev io c %mem_chr% 14 600
1410 iop*)
1411 unit=${i#iop}
1412 mkdev iop$unit c %iop_chr% $unit
1415 mlx*)
1416 unit=${i#mlx}
1417 mkdev mlx$unit c %mlx_chr% $unit
1420 mly*)
1421 unit=${i#mly}
1422 mkdev mly$unit c %mly_chr% $unit
1425 twa*)
1426 unit=${i#twa}
1427 mkdev twa$unit c %twa_chr% $unit
1430 twe*)
1431 unit=${i#twe}
1432 mkdev twe$unit c %twe_chr% $unit
1435 icp*)
1436 unit=${i#icp}
1437 mkdev icp$unit c %icp_chr% $unit
1440 agp*)
1441 unit=${i#agp}
1442 mkdev agp$unit c %agp_chr% $unit 644
1443 if [ "$unit" = "0" ]; then
1444 lndev agp$unit agpgart
1448 pci*)
1449 unit=${i#pci}
1450 mkdev pci$unit c %pci_chr% $unit 644
1453 dpti*)
1454 unit=${i#dpti}
1455 mkdev dpti$unit c %dpti_chr% $unit
1458 dpt*)
1459 unit=${i#dpt}
1460 mkdev dpt$unit c %dpt_chr% $unit
1463 altq)
1464 makedir altq 755
1465 unit=0
1466 for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq
1468 mkdev altq/$dev c %altq_chr% $unit 644
1469 unit=$(($unit + 1))
1470 done
1473 isdn)
1474 mkdev isdn c %isdn_chr% 0
1477 isdnctl)
1478 mkdev isdnctl c %isdnctl_chr% 0
1481 isdnbchan*)
1482 unit=${i#isdnbchan}
1483 mkdev isdnbchan$unit c %isdnbchan_chr% $unit
1486 isdnteld*)
1487 unit=${i#isdnteld}
1488 mkdev isdnteld$unit c %isdntel_chr% $(($unit + 64))
1491 isdntel*)
1492 unit=${i#isdntel}
1493 mkdev isdntel$unit c %isdntel_chr% $unit
1496 isdntrc*)
1497 unit=${i#isdntrc}
1498 mkdev isdntrc$unit c %isdntrc_chr% $unit
1501 vmegen)
1502 makedev vmegen0 vmegen1 vmegen2 vmegen3
1505 vmegen*)
1506 unit=${i#vmegen}
1507 mkdev vmegen$unit c %vmegeneric_chr% $(($unit * 16 + 0))
1510 wsfont)
1511 mkdev wsfont c %wsfont_chr% 0
1514 cir*)
1515 unit=${i#cir}
1516 mkdev cir$unit c %cir_chr% $unit 666
1519 irframe*)
1520 unit=${i#irframe}
1521 mkdev irframe$unit c %irframe_chr% $unit
1524 fcom*)
1525 unit=${i#fcom}
1526 mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp
1529 openfirm)
1530 mkdev openfirm c %openfirm_chr% 0 444
1533 pad*)
1534 unit=${i#pad}
1535 mkdev pad$unit c %pad_chr% $unit 444
1538 nvram)
1539 mkdev nvram c %nvram_chr% 0 644
1542 rtc)
1543 mkdev rtc c %rtc_chr% 0 644
1546 clockctl)
1547 mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd
1550 nsmb)
1551 makedev nsmb0 nsmb1 nsmb2 nsmb3
1554 nsmb*)
1555 unit=${i#nsmb}
1556 mkdev nsmb$unit c %nsmb_chr% $unit 644
1559 kttcp)
1560 mkdev kttcp c %kttcp_chr% 0
1563 dmoverio)
1564 mkdev dmoverio c %dmoverio_chr% 0 644
1567 veriexec)
1568 mkdev veriexec c %veriexec_chr% 0 600
1571 ttyv*)
1572 unit=${i#ttyv}
1573 mkdev ttyv$unit c %pc_chr% $unit
1576 # arm, acorn32
1577 ttyv*)
1578 unit=${i#ttyv}
1579 mkdev ttyv$unit c %physcon_chr% $unit
1582 arcpp*)
1583 unit=${i#arcpp}
1584 mkdev arcpp$unit c %arcpp_chr% $unit
1587 par*)
1588 unit=${i#par}
1589 case $unit in
1591 mkdev par$unit c %par_chr% $unit
1594 warn "bad unit for par in: $i"
1596 esac
1599 cpi*)
1600 unit=${i#cpi}
1601 mkdev cpi$unit c %cpi_chr% $unit
1604 ite*|ttye*)
1605 case $i in
1606 ite*) unit=${i#ite};;
1607 ttye*) unit=${i#ttye};;
1608 esac
1609 mkdev ttye$unit c %ite_chr% $unit
1612 pms*)
1613 unit=${i#pms}
1614 mkdev pms$unit c %opms_chr% $unit
1617 qms*)
1618 unit=${i#qms}
1619 mkdev qms$unit c %qms_chr% $unit
1622 lms*)
1623 unit=${i#lms}
1624 mkdev lms$unit c %lms_chr% $unit
1627 mms*)
1628 unit=${i#mms}
1629 mkdev mms$unit c %mms_chr% $unit
1632 mouse-*)
1633 case $i in
1634 mouse-pms*) name=pms ;;
1635 mouse-qms*) name=qms ;;
1636 esac
1637 unit=${i#mouse-${name}}
1638 lndev $name$unit mouse
1641 kbd)
1642 mkdev kbd c %kbd_chr% 0
1645 kbdctl)
1646 mkdev kbdctl c %kbd_chr% 1
1649 vidcconsole0)
1650 mkdev vidcconsole0 c %vidcconsole_chr% 0 640
1653 view*)
1654 unit=${i#view}
1655 mkdev view$unit c %view_chr% $unit 666
1658 mouse*)
1659 unit=${i#mouse}
1660 case $unit in
1661 0|1)
1662 mkdev mouse$unit c %ms_chr% $unit 666
1663 if [ $unit = 0 ]; then
1664 lndev mouse$unit mouse
1668 warn "bad unit for mouse in: $i"
1670 esac
1673 panel)
1674 mkdev panel0 c %panel_chr% 0 660
1677 tslcd)
1678 mkdev tslcd0 c %tslcd_chr% 0 660
1681 ipty)
1682 mkdev ttyp0 c %pts_chr% 0 666
1683 mkdev ttyp1 c %pts_chr% 1 666
1684 mkdev ptyp0 c %ptc_chr% 0 666
1685 mkdev ptyp1 c %ptc_chr% 1 666
1688 ptm)
1689 makedir pts 755
1690 mkdev ptmx c %ptm_chr% 0 666
1691 mkdev ptm c %ptm_chr% 1 666
1694 grf*)
1695 unit=${i#grf}
1696 mkdev grf$unit c %grf_chr% $unit 666
1699 etvme)
1700 mkdev etvme c %et_chr% 0
1703 leo*)
1704 unit=${i#leo}
1705 mkdev leo$unit c %leo_chr% $unit
1708 scif*)
1709 unit=${i#scif}
1710 mkdev scif$unit c %scif_chr% $(($unit + $dialin )) "" "" $u_uucp
1711 mkdev dscif$unit c %scif_chr% $(($unit + $dialout)) "" "" $u_uucp
1714 sci*)
1715 unit=${i#sci}
1716 mkdev sci$unit c %sci_chr% $(($unit + $dialin )) "" "" $u_uucp
1717 mkdev dsci$unit c %sci_chr% $(($unit + $dialout)) "" "" $u_uucp
1720 maple*)
1721 case $i in
1722 mapleA*) name="mapleA"; unit=0;;
1723 mapleB*) name="mapleB"; unit=1;;
1724 mapleC*) name="mapleC"; unit=2;;
1725 mapleD*) name="mapleD"; unit=3;;
1726 esac
1727 subunit=${i#$name}
1728 mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit))
1731 mmem*)
1732 unit=${i#mmem}
1733 for pt in 0 # 1 2 3 4 ... 255
1735 # mkdev mmem${unit}.${pt}a b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1736 mkdev mmem${unit}.${pt}c b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1737 # mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
1738 mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1739 done
1742 mlcd*)
1743 unit=${i#mlcd}
1744 for pt in 0 # 1 2 3 4 ... 255
1746 mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator
1747 done
1750 ixpcom*)
1751 unit=${i#ixpcom}
1752 mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp
1755 epcom*)
1756 unit=${i#epcom}
1757 mkdev epcom$unit c %epcom_chr% $unit "" "" $u_uucp
1760 ucbsnd)
1761 mkdev ucbsnd c %ucbsnd_chr% 0 666
1764 adb)
1765 mkdev adb c %aed_chr% 0 666
1768 asc*)
1769 unit=${i#asc}
1770 mkdev asc$unit c %asc_chr% $unit 666
1773 bwtwo*)
1774 unit=${i#bwtwo}
1775 mkdev bwtwo$unit c %bwtwo_chr% $unit 666
1778 cgtwo*)
1779 unit=${i#cgtwo}
1780 mkdev cgtwo$unit c %cgtwo_chr% $unit 666
1783 cgthree*)
1784 unit=${i#cgthree}
1785 mkdev cgthree$unit c %cgthree_chr% $unit 666
1788 cgfour*)
1789 unit=${i#cgfour}
1790 mkdev cgfour$unit c %cgfour_chr% $unit 666
1793 cgsix*)
1794 unit=${i#cgsix}
1795 mkdev cgsix$unit c %cgsix_chr% $unit 666
1798 cgeight*)
1799 unit=${i#cgeight}
1800 mkdev cgeight$unit c %cgeight_chr% $unit 666
1803 tcx*)
1804 unit=${i#tcx}
1805 mkdev tcx$unit c %tcx_chr% $unit 666
1808 xd*|xy*)
1809 case $i in
1810 xd*) name=xd; unit=${i#xd}; blk=%xd_blk%; chr=%xd_chr%;;
1811 xy*) name=xy; unit=${i#xy}; blk=%xy_blk%; chr=%xy_chr%;;
1812 esac
1813 %MKDISK% $name $unit $blk $chr
1816 magma*)
1817 unit=${i#magma}
1818 if [ 0$unit -gt 3 ]; then
1819 warn "bad unit for $i: $unit"
1820 break
1822 for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1824 case $j in
1825 [0-9]) jn=$j ;;
1826 a) jn=10 ;;
1827 b) jn=11 ;;
1828 c) jn=12 ;;
1829 d) jn=13 ;;
1830 e) jn=14 ;;
1831 f) jn=15 ;;
1832 esac
1833 mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn))
1834 done
1835 mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0))
1836 mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1))
1839 clcd*)
1840 unit=${i#clcd}
1841 if [ 0$unit -gt 7 ]; then
1842 warn "bad unit for $i: $unit"
1843 break
1845 for j in 0 1 2 3 4 5 6 7
1847 mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp
1848 mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp
1849 done
1852 spif*)
1853 unit=${i#spif}
1854 if [ 0$unit -gt 3 ]; then
1855 warn "bad unit for $i: $unit"
1856 break
1858 for j in 0 1 2 3 4 5 6 7; do
1859 mkdev ttyS$unit$j c 102 $(($unit * 64 + $j)) "" "" $u_uucp
1860 done
1861 mkdev bppS${unit}0 c 103 $(($unit * 64 + 0))
1862 mkdev bppS${unit}1 c 103 $(($unit * 64 + 1))
1865 bpp*)
1866 unit=${i#bpp}
1867 mkdev bpp$unit c %bpp_chr% $(($unit + 0))
1870 tctrl*)
1871 unit=${i#tctrl}
1872 mkdev tctrl$unit c %tctrl_chr% $unit 666
1875 bmd*)
1876 unit=${i#bmd}
1877 mkdev bmd${unit}a b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator
1878 mkdev bmd${unit}c b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator
1879 mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator
1880 mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator
1883 sram)
1884 mkdev sram c %sram_chr% 0 644
1887 pow*)
1888 unit=${i#pow}
1889 case $unit in
1890 0|1)
1891 mkdev pow${unit} c %pow_chr% ${unit} 644
1892 if [ $unit = 0 ]; then
1893 lndev pow${unit} pow
1897 warn "bad unit for pow in: $i"
1899 esac
1902 ttyS*)
1903 unit=${i#ttyS}
1904 mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp
1905 mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp
1908 atabus*)
1909 unit=${i#atabus}
1910 mkdev atabus$unit c %atabus_chr% $unit 644
1913 drm*)
1914 unit=${i#drm}
1915 makedir dri 755
1916 mkdev dri/card$unit c %drm_chr% $unit 660
1919 drvctl)
1920 mkdev drvctl c %drvctl_chr% 0 644
1923 isv)
1924 mkdev isv c %isv_chr% 0 644
1927 tap*)
1928 unit=${i#tap}
1929 case "$unit" in
1930 [0-9]*)
1931 mkdev tap${unit} c %tap_chr% ${unit} 600
1934 mkdev tap c %tap_chr% 0xfffff 600
1936 esac
1939 fw*)
1940 unit=${i#fw}
1941 for j in 0 1 2 3
1943 mkdev fw${unit}.${j} c %fw_chr% $((${unit} * 256 + ${j})) 660 ${g_operator}
1944 mkdev fwmem${unit}.${j} c %fw_chr% $((65536 + ${unit} * 256 + ${j})) 660 ${g_operator}
1945 done
1948 # create putter device and symlinks for all subsystems using it
1949 putter)
1950 mkdev putter c %putter_chr% 0 600
1951 mkdev pud c %putter_chr% 1 600
1952 lndev putter puffs
1955 zfs)
1956 mkdev zfs c %zfs_chr% 0 600
1957 makedir zpool 755
1960 midevend)
1961 %MI_DEVICES_END%
1962 local)
1963 if [ -f "$0.local" ]; then
1964 umask 0
1965 if [ -n "$count_nodes" ]; then
1966 count_nodes=$((count_nodes + \
1967 $(linecount "$(sh "$0.local" $opts -s all)") ))
1968 else
1969 sh "$0.local" $opts all
1971 umask 077
1976 warn "$i: unknown device"
1979 esac
1980 done
1985 # three variants of disk partitions - max 8, max 16, max 16 with highpartoffset
1986 # hack; only the one used by port is retained in final MAKEDEV script
1987 # routine is called as:
1988 # makedisk name unit blk chr
1989 makedisk_p8()
1991 name="$1"; unit="$2"; blk="$3"; chr="$4"
1993 mkdev ${name}${unit}a b $blk $(($unit * 8 + 0)) 640 $g_operator
1994 mkdev ${name}${unit}b b $blk $(($unit * 8 + 1)) 640 $g_operator
1995 mkdev ${name}${unit}c b $blk $(($unit * 8 + 2)) 640 $g_operator
1996 mkdev ${name}${unit}d b $blk $(($unit * 8 + 3)) 640 $g_operator
1997 mkdev ${name}${unit}e b $blk $(($unit * 8 + 4)) 640 $g_operator
1998 mkdev ${name}${unit}f b $blk $(($unit * 8 + 5)) 640 $g_operator
1999 mkdev ${name}${unit}g b $blk $(($unit * 8 + 6)) 640 $g_operator
2000 mkdev ${name}${unit}h b $blk $(($unit * 8 + 7)) 640 $g_operator
2001 mkdev r${name}${unit}a c $chr $(($unit * 8 + 0)) 640 $g_operator
2002 mkdev r${name}${unit}b c $chr $(($unit * 8 + 1)) 640 $g_operator
2003 mkdev r${name}${unit}c c $chr $(($unit * 8 + 2)) 640 $g_operator
2004 mkdev r${name}${unit}d c $chr $(($unit * 8 + 3)) 640 $g_operator
2005 mkdev r${name}${unit}e c $chr $(($unit * 8 + 4)) 640 $g_operator
2006 mkdev r${name}${unit}f c $chr $(($unit * 8 + 5)) 640 $g_operator
2007 mkdev r${name}${unit}g c $chr $(($unit * 8 + 6)) 640 $g_operator
2008 mkdev r${name}${unit}h c $chr $(($unit * 8 + 7)) 640 $g_operator
2011 makedisk_p16()
2013 name="$1"; unit="$2"; blk="$3"; chr="$4"
2015 mkdev ${name}${unit}a b $blk $(($unit * 16 + 0)) 640 $g_operator
2016 mkdev ${name}${unit}b b $blk $(($unit * 16 + 1)) 640 $g_operator
2017 mkdev ${name}${unit}c b $blk $(($unit * 16 + 2)) 640 $g_operator
2018 mkdev ${name}${unit}d b $blk $(($unit * 16 + 3)) 640 $g_operator
2019 mkdev ${name}${unit}e b $blk $(($unit * 16 + 4)) 640 $g_operator
2020 mkdev ${name}${unit}f b $blk $(($unit * 16 + 5)) 640 $g_operator
2021 mkdev ${name}${unit}g b $blk $(($unit * 16 + 6)) 640 $g_operator
2022 mkdev ${name}${unit}h b $blk $(($unit * 16 + 7)) 640 $g_operator
2023 mkdev ${name}${unit}i b $blk $(($unit * 16 + 8)) 640 $g_operator
2024 mkdev ${name}${unit}j b $blk $(($unit * 16 + 9)) 640 $g_operator
2025 mkdev ${name}${unit}k b $blk $(($unit * 16 + 10)) 640 $g_operator
2026 mkdev ${name}${unit}l b $blk $(($unit * 16 + 11)) 640 $g_operator
2027 mkdev ${name}${unit}m b $blk $(($unit * 16 + 12)) 640 $g_operator
2028 mkdev ${name}${unit}n b $blk $(($unit * 16 + 13)) 640 $g_operator
2029 mkdev ${name}${unit}o b $blk $(($unit * 16 + 14)) 640 $g_operator
2030 mkdev ${name}${unit}p b $blk $(($unit * 16 + 15)) 640 $g_operator
2031 mkdev r${name}${unit}a c $chr $(($unit * 16 + 0)) 640 $g_operator
2032 mkdev r${name}${unit}b c $chr $(($unit * 16 + 1)) 640 $g_operator
2033 mkdev r${name}${unit}c c $chr $(($unit * 16 + 2)) 640 $g_operator
2034 mkdev r${name}${unit}d c $chr $(($unit * 16 + 3)) 640 $g_operator
2035 mkdev r${name}${unit}e c $chr $(($unit * 16 + 4)) 640 $g_operator
2036 mkdev r${name}${unit}f c $chr $(($unit * 16 + 5)) 640 $g_operator
2037 mkdev r${name}${unit}g c $chr $(($unit * 16 + 6)) 640 $g_operator
2038 mkdev r${name}${unit}h c $chr $(($unit * 16 + 7)) 640 $g_operator
2039 mkdev r${name}${unit}i c $chr $(($unit * 16 + 8)) 640 $g_operator
2040 mkdev r${name}${unit}j c $chr $(($unit * 16 + 9)) 640 $g_operator
2041 mkdev r${name}${unit}k c $chr $(($unit * 16 + 10)) 640 $g_operator
2042 mkdev r${name}${unit}l c $chr $(($unit * 16 + 11)) 640 $g_operator
2043 mkdev r${name}${unit}m c $chr $(($unit * 16 + 12)) 640 $g_operator
2044 mkdev r${name}${unit}n c $chr $(($unit * 16 + 13)) 640 $g_operator
2045 mkdev r${name}${unit}o c $chr $(($unit * 16 + 14)) 640 $g_operator
2046 mkdev r${name}${unit}p c $chr $(($unit * 16 + 15)) 640 $g_operator
2049 makedisk_p16high()
2051 ho=524280 # offset for partition 9 to 16
2052 name="$1"; unit="$2"; blk="$3"; chr="$4"
2054 mkdev ${name}${unit}a b $blk $(($unit * 8 + 0)) 640 $g_operator
2055 mkdev ${name}${unit}b b $blk $(($unit * 8 + 1)) 640 $g_operator
2056 mkdev ${name}${unit}c b $blk $(($unit * 8 + 2)) 640 $g_operator
2057 mkdev ${name}${unit}d b $blk $(($unit * 8 + 3)) 640 $g_operator
2058 mkdev ${name}${unit}e b $blk $(($unit * 8 + 4)) 640 $g_operator
2059 mkdev ${name}${unit}f b $blk $(($unit * 8 + 5)) 640 $g_operator
2060 mkdev ${name}${unit}g b $blk $(($unit * 8 + 6)) 640 $g_operator
2061 mkdev ${name}${unit}h b $blk $(($unit * 8 + 7)) 640 $g_operator
2062 mkdev ${name}${unit}i b $blk $(($unit * 8 + $ho + 8)) 640 $g_operator
2063 mkdev ${name}${unit}j b $blk $(($unit * 8 + $ho + 9)) 640 $g_operator
2064 mkdev ${name}${unit}k b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator
2065 mkdev ${name}${unit}l b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator
2066 mkdev ${name}${unit}m b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator
2067 mkdev ${name}${unit}n b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator
2068 mkdev ${name}${unit}o b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator
2069 mkdev ${name}${unit}p b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator
2070 mkdev r${name}${unit}a c $chr $(($unit * 8 + 0)) 640 $g_operator
2071 mkdev r${name}${unit}b c $chr $(($unit * 8 + 1)) 640 $g_operator
2072 mkdev r${name}${unit}c c $chr $(($unit * 8 + 2)) 640 $g_operator
2073 mkdev r${name}${unit}d c $chr $(($unit * 8 + 3)) 640 $g_operator
2074 mkdev r${name}${unit}e c $chr $(($unit * 8 + 4)) 640 $g_operator
2075 mkdev r${name}${unit}f c $chr $(($unit * 8 + 5)) 640 $g_operator
2076 mkdev r${name}${unit}g c $chr $(($unit * 8 + 6)) 640 $g_operator
2077 mkdev r${name}${unit}h c $chr $(($unit * 8 + 7)) 640 $g_operator
2078 mkdev r${name}${unit}i c $chr $(($unit * 8 + $ho + 8)) 640 $g_operator
2079 mkdev r${name}${unit}j c $chr $(($unit * 8 + $ho + 9)) 640 $g_operator
2080 mkdev r${name}${unit}k c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator
2081 mkdev r${name}${unit}l c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator
2082 mkdev r${name}${unit}m c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator
2083 mkdev r${name}${unit}n c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator
2084 mkdev r${name}${unit}o c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator
2085 mkdev r${name}${unit}p c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator
2088 # make only the very few basic disk device nodes - 'a' partition
2089 # and raw partition
2090 makedisk_minimal()
2092 name=$1; unit=$2; blk=$3; chr=$4
2093 doff=%DISKMINOROFFSET%
2094 ro=%RAWDISK_OFF%
2095 rn=%RAWDISK_NAME%
2097 mkdev ${name}${unit}a b $blk $(($unit * $doff + 0)) 640 $g_operator
2098 mkdev ${name}${unit}$rn b $blk $(($unit * $doff + $ro)) 640 $g_operator
2099 mkdev r${name}${unit}a c $chr $(($unit * $doff + 0)) 640 $g_operator
2100 mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator
2103 # create_mfs_dev nodes
2104 # Create a memory file system for a given number of device nodes,
2105 # and mount it. Attempts to use mount_tmpfs, or falls back to
2106 # mount_mfs.
2108 # If do_redirect, then also redirect output to the console.
2110 create_mfs_dev()
2112 ndevnodes=${1-1200}
2113 dev_mountpoint=${PWD:-/dev}
2115 # Number of inodes is the specified number of device nodes, plus
2116 # a margin to allow for extra device nodes created later.
2117 ninode=$((ndevnodes * 11 / 10))
2118 # Add 2 reserved inodes (needed for both mfs and tmpfs), and round
2119 # up to a multiple of 32 (needed for mfs, not needed for tmpfs).
2120 ninode=$(( (ninode + 2 + 31) / 32 * 32 ))
2121 # Try tmpfs; if that fails try mfs.
2123 # For tmpfs, allocate 16KB and 512 byte per node.
2124 # Actual requirements are much lower, but the size limit
2125 # is only intended to avoid accidental writing to /dev.
2126 fs_bytes=$((16384 + ninode * 512))
2127 if mount_tmpfs -s $fs_bytes -n $ninode -m 0755 \
2128 -o union tmpfs "$dev_mountpoint"
2129 then
2130 fstype=tmpfs
2131 else
2132 # This file system size calculation is exact for mount_mfs(8)
2133 # with 512-byte sectors. 40960 bytes (80 blocks) is the
2134 # minimum size allowed by mount_mfs.
2135 fs_bytes=$((8192 + 2 * 8192 + 4096 + ninode*512 + 8192))
2136 [ "$fs_bytes" -lt 40960 ] && fs_bytes=40960
2137 fs_blocks=$((fs_bytes/512))
2138 if mount_mfs -b 4096 -f 512 -s $fs_blocks -n $ninode -p 0755 \
2139 -o union swap "$dev_mountpoint"
2140 then
2141 fstype=mfs
2142 else
2143 die "Failed to create memory file system"
2147 # Our current directory was in the lower file system; change it to
2148 # the newly mounted upper file system.
2149 cd "$dev_mountpoint"
2151 if $do_redirect; then
2152 # Redirect stdout and stderr to console
2153 mknod -m 600 -g 0 -u 0 temp_console c 0 0
2154 exec >temp_console 2>&1
2155 rm temp_console
2158 echo "Created $fstype $dev_mountpoint" \
2159 "($fs_bytes byte, $ninode inodes)"
2163 # MAIN: If MAKEDEV_AS_LIBRARY is set, then we are being used as a
2164 # function library, so just return. Otherwise, do all the real work.
2166 [ -n "${MAKEDEV_AS_LIBRARY}" ] && return
2167 makedev_main makedev ${1+"$@"}