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.
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
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
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)
56 # ut* UNIBUS TU45 emulations (e.g. si 9700)
57 # uu* TU58 cassettes on DL11 controller
60 # ccd* concatenated disk devices
61 # cd* SCSI or ATAPI CD-ROM
62 # cgd* cryptographic disk devices
63 # raid* RAIDframe disk devices
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
73 # ld* Logical disk devices (e.g., hardware RAID)
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
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
89 # wsmouse* wscons mouse events
90 # lms* Logitech bus mouse
91 # mms* Microsoft bus mouse
92 # qms* "quadrature mouse"
94 # mouse mouse (provides events, for X11)
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"
107 # ttyCY? Cyclom-Y multiport serial boards. Each "unit" makes
109 # ttye* ITE bitmapped consoles
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)
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)
156 # dz* UNIBUS DZ11 and DZ32
157 # scc* 82530 serial interface
160 # dn* UNIBUS DN11 and emulations (e.g. Able Quadracall)
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
169 # arcpp* Archimedes parallel port
171 # lpa* interruptless lp
172 # par* Amiga motherboard parallel port
173 # cpi* Macintosh Nubus CSI parallel printer card
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
183 # ttyY* USB serial adapters
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
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
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
226 # bthub Bluetooth Device Hub control interface
227 # cfs* Coda file system device
228 # ch* SCSI media changer
230 # clockctl clock control for non root users
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
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
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
268 # satlink* PlanetConnect satellite receiver driver
269 # scsibus* SCSI busses
271 # ses* SES/SAF-TE SCSI Devices
272 # speaker PC speaker (XXX - installed)
273 # sram battery backuped memory (x68k)
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
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.
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]
323 # zeropad width number
324 # display number with a zero (`0') padding of width digits.
328 case $
(($1 - ${#2})) in
335 *) die
"bad padding" ;;
340 # display (base10) number as hexadecimal
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
354 # linecount multiline_string
355 # count the number of lines in the string
360 ' # just a newline, no other white space between the quotes
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".
377 local flags
="$1" ; shift
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" ;;
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.
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.
404 echo ". type=dir optional" | nooutput
-12 "${mtree}" -e -U
408 # Parse command line arguments, exit on error.
409 # Callers should shift $((OPTIND - 1)) afterwards.
413 PATH
=/sbin
:/usr
/sbin
:/bin
:/usr
/bin
:/rescue
415 : ${TOOL_MKNOD:=mknod}
416 : ${TOOL_MTREE:=mtree}
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.
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
439 m
) TOOL_MKNOD
=${OPTARG}
441 opts
="${opts} -m ${OPTARG}"
443 p
) TOOL_PAX
="${OPTARG}"
444 if check_pax
"${TOOL_PAX}"; then
446 # do not add this to $opts; we will later
449 warn
"Ignored -p option:" \
450 "${TOOL_PAX} is missing or broken"
457 t
) TOOL_MTREE
="${OPTARG}"
458 if check_mtree
"${TOOL_MTREE}"; then
460 # do not add this to $opts; we will later
463 warn
"Ignored -t option:" \
464 "${TOOL_MTREE} is missing or broken"
472 shift $
((${OPTIND} - 1))
473 [ $# -gt 0 ] || usage
479 g_operator
="%gid_operator%"
480 g_wheel
="%gid_wheel%"
485 # only allow read&write for owner by default
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.
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
;;
516 # do_force requires mknod
518 if $do_mtree ||
$do_pax ||
$do_specfile; then
519 die
"-f option works only with mknod"
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
538 if ! ( $do_mtree ||
$do_pax ||
$do_mknod ||
$do_specfile ); then
539 if check_mtree
"${TOOL_MTREE}"; then
541 elif check_pax
"${TOOL_PAX}"; then
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) ))
555 *) die
"-m, -p, -s, and -t options are mutually exclusive" ;;
558 # If we are using mknod, then decide what options to pass it.
560 MKNOD
="${TOOL_MKNOD:-mknod} -F netbsd"
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
576 # wrap_makedev makedev_name ...
577 # Invoke a makedev-like function, with additional processing
578 # as appropriate for use from the outer level.
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"
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.
600 local makedev
="$1" ; shift
602 # Parse command line args
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.
611 create_mfs_dev
$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.
619 wrap_makedev
$makedev ${1+"$@"} \
620 | nooutput
-1 "${TOOL_MTREE}" -e -U
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
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 ..
635 cd ..
# back to where we started
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
651 # create a symlink from src to target
654 # create directory with appropriate mode
659 if [ -n "$count_nodes" ]; then
660 count_nodes
=$
((count_nodes
+ 1))
663 if $do_specfile; then
668 echo "./$1 type=${type} device=netbsd,$3,$4 mode=${5:-600} gid=${6:-$g_wheel} uid=${7:-$u_root}"
670 ${MKNOD} -m ${5:-600} -g \#${6:-$g_wheel} -u \#${7:-$u_root} $1 $2 $3 $4
676 if [ -n "$count_nodes" ]; then
677 count_nodes
=$
((count_nodes
+ 1))
680 if $do_specfile; then
681 echo "./$2 type=link link=$1 mode=0700 gid=$g_wheel uid=$u_root"
689 if [ -n "$count_nodes" ]; then
690 count_nodes
=$
((count_nodes
+ 1))
693 if $do_specfile; then
694 echo "./$1 type=dir mode=$2 gid=$g_wheel uid=$u_root"
712 # makedev special [...]
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
732 makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7
733 makedev vnd0 vnd1 vnd2 vnd3
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
749 makedev
local # do this last
753 # unless overridden by MD entry, this is equal to 'all'
759 makedev audio0 audio1 audio2 audio3
760 makedev hdaudio0 hdaudio1 hdaudio2 hdaudio3
764 lndev audioctl0 audioctl
768 makedev gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7
773 makedev pad0 pad1 pad2 pad3
778 makedev radio0 radio1
783 makedev video0 video1 video2 video3
787 makedev altmem0 altmem1
795 makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7
796 makedev uhid0 uhid1 uhid2 uhid3
801 makedev uscanner0 uscanner1
802 makedev utoppy0 utoppy1
807 makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdnteld0 isdnteld1 isdntrc0 isdntrc1
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
829 mkdev usb c
%usb_chr
% 255 444
835 mkdev usb
$unit c
%usb_chr
% $unit
840 mkdev uhid
$unit c
%uhid_chr
% $unit 666
845 mkdev ulpt
$unit c
%ulpt_chr
% $unit
846 mkdev ulpn
$unit c
%ulpt_chr
% $
(($unit + 64))
851 mkdev urio
$unit c
%urio_chr
% $unit 666
856 mkdev uscanner
$unit c
%uscanner_chr
% $unit
861 mkdev utoppy
$unit c
%utoppy_chr
% $unit
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
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
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}))
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
897 mkdev wsmouse c
%wsmux_chr
% 0
901 mkdev wskbd c
%wsmux_chr
% 1
906 mkdev wsmux
$unit c
%wsmux_chr
% $unit
907 mkdev wsmuxctl
$unit c
%wsmux_chr
% $
(($unit + 128)) 200
911 mkdev xenevt c
%xenevt_chr
% 0
915 mkdev xsd_kva c
%xenevt_chr
% 1
919 mkdev xencons c
%xencons_chr
% 0
923 mkdev ttyEstat c
%wsdisplay_chr
% 254
927 mkdev ttyEcfg c
%wsdisplay_chr
% 255
932 mkdev ttyE
$unit c
%wsdisplay_chr
% $unit
937 mkdev wsmouse
$unit c
%wsmouse_chr
% $unit
942 mkdev wskbd
$unit c
%wskbd_chr
% $unit
946 if ! $fdesc_mounted; then
951 mkdev fd
/$n c
%filedesc_chr
% $n 666
959 wt
*) name
=wt
; unit
=${i#wt}; chr
=%wt_chr
%; blk
=%wt_blk
%;;
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
971 makedisk_minimal md
${i#md} %md_blk
% %md_chr
%
976 fss
*) name
=fss
; unit
=${i#fss}; blk
=%fss_blk
%; chr
=%fss_chr
%
978 mkdev
$name$unit b
$blk $unit 660 $g_operator
979 mkdev r
$name$unit c
$chr $unit 660 $g_operator
984 ss
*) name
=ss
; unit
=${i#ss}; chr
=%ss_chr
%;;
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
*)
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
%;;
998 %MKDISK
% $name $unit $blk $chr
1002 name
=sd
; unit
=${i#sd}; blk
=%sd_blk
%; chr
=%sd_chr
%
1003 %MKDISK
% $name $unit $blk $chr
1007 name
=wd
; unit
=${i#wd}; blk
=%wd_blk
%; chr
=%wd_chr
%
1008 %MKDISK
% $name $unit $blk $chr
1012 name
=fd
; unit
=${i#fd}; blk
=%fd_blk
%; chr
=%fd_chr
%
1013 %MKDISK
% $name $unit $blk $chr
1017 name
=ld
; unit
=${i#ld}; blk
=%ld_blk
%; chr
=%ld_chr
%
1018 %MKDISK
% $name $unit $blk $chr
1022 name
=altmem
; unit
=${i#altmem}; blk
=%altmem_blk
%; chr
=%altmem_chr
%
1023 %MKDISK
% $name $unit $blk $chr
1027 mkdev bio c
%bio_chr
% 0
1031 name
=ed
; unit
=${i#ed}; blk
=%ed_blk
%; chr
=%ed_chr
%
1032 %MKDISK
% $name $unit $blk $chr
1036 name
=ofdisk
; unit
=${i#ofdisk}; blk
=%ofdisk_blk
%; chr
=%ofdisk_chr
%
1037 %MKDISK
% $name $unit $blk $chr
1041 name
=xbd
; unit
=${i#xbd}; blk
=%xbd_blk
%; chr
=%xbd_chr
%
1042 %MKDISK
% $name $unit $blk $chr
1046 name
=dk
; unit
=${i#dk}; blk
=%dk_blk
%; chr
=%dk_chr
%
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))
1057 name
=tyCY
; chr
=%cy_chr
%; off
=32
1059 minor
=$
(($unit * $off))
1060 eminor
=$
(($minor + $off))
1061 while [ $minor -lt $eminor ]
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))
1072 name
=tyCZ
; chr
=%cz_chr
%; off
=64
1074 minor
=$
(($unit * $off))
1075 eminor
=$
(($minor + $off))
1076 while [ $minor -lt $eminor ]
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))
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
1094 lndev ttyZ
$unit tty0
${unit}
1095 lndev dtyZ
$unit dty0
${unit}
1098 tty0
*|tty1
*|tty
[0-9])
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
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
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
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
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
1132 for j
in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1143 mkdev ttyp
$j c
%pts_chr
% $jn 666
1144 mkdev ptyp
$j c
%ptc_chr
% $jn 666
1150 d1
="p q r s t u v w x y z P Q R S T"
1151 if [ "$class" -ge 64 ]
1153 warn
"$i: pty unit must be between 0 and 63"
1155 elif [ "$class" -lt 16 ]
1159 d2
="0 1 2 3 4 5 6 7 8 9 a b c d e f"
1161 class
=$
(($class - 16))
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))
1169 s1
=$
(($start / $nt))
1173 if [ "$t1" = v
]; then
1174 warn
"$i: pty unit conflicts with console ttyv0 device"
1177 s2
=$
(($start % ($nt - $s1 * $mult)))
1181 unit
=$
(($start + $offset - $s1 * $mult))
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
1199 mkdev stic
$unit c
%stic_chr
% $unit
1204 st
*) name
=st
; unit
=${i#st}; chr
=%st_chr
%; blk
=%st_blk
%;;
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
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
%;;
1222 mkdev
$name$unit c
$chr $unit 640 $g_operator
1226 makedisk_minimal
cd ${i#cd} %cd_blk
% %cd_chr
%
1230 makedisk_minimal mcd
${i#mcd} %mcd_blk
% %mcd_chr
%
1234 makedisk_minimal gdrom
${i#gdrom} %gdrom_blk
% %gdrom_chr
%
1239 lpt
*) name
=lpt
; unit
=${i#lpt}; chr
=%lpt_chr
%; flags
=0;;
1240 lpa
*) name
=lpa
; unit
=${i#lpa}; chr
=%lpt_chr
%; flags
=128;;
1242 mkdev
$name$unit c
$chr $
(($unit + $flags))
1243 mkdev lpt
${unit}ctl c
$chr $
(($unit + 256))
1247 mkdev bpf c
%bpf_chr
% 0
1252 mkdev bthub c
%bthub_chr
% 0
1257 mkdev tun
$unit c
%tun_chr
% $unit
1262 mkdev joy
$unit c
%joy_chr
% $unit
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
1280 mkdev crypto c
%crypto_chr
% 0 666
1284 mkdev cmos c
%cmos_chr
% 0 644
1288 mkdev speaker c
%spkr_chr
% 0
1292 mkdev lockstat c
%lockstat_chr
% 0
1296 mkdev cpuctl c
%cpuctl_chr
% 0 666
1304 audioctl
=audioctl
$unit
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
1314 mkdev hdaudio
$unit c
%hdaudio_chr
% $unit 644
1319 mkdev gpio
$unit c
%gpio_chr
% $unit 644
1324 mkdev rmidi
$unit c
%midi_chr
% $unit 666
1330 mkdev music
$unit c
%sequencer_chr
% $
(($unit + 0)) 666
1331 mkdev sequencer
$unit c
%sequencer_chr
% $
(($unit + 128)) 666
1337 mkdev radio
$unit c
%radio_chr
% $unit 666
1343 mkdev video
$unit c
%video_chr
% $unit 666
1348 mkdev amr
$unit c
%amr_chr
% $unit
1352 mkdev apm c
%apm_chr
% 0 644
1353 mkdev apmctl c
%apm_chr
% 8 644
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
1364 mkdev satlink
$unit c
%satlink_chr
% $unit 444
1368 mkdev random c
%rnd_chr
% 0 444
1369 mkdev urandom c
%rnd_chr
% 1 644
1378 mkdev cfs
$unit c
%vcoda_chr
% $unit
1382 mkdev sysmon c
%sysmon_chr
% 0 644
1383 mkdev watchdog c
%sysmon_chr
% 1 644
1384 mkdev power c
%sysmon_chr
% 2 640
1389 mkdev scsibus
$unit c
%scsibus_chr
% $unit 644
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
1412 mkdev iop
$unit c
%iop_chr
% $unit
1417 mkdev mlx
$unit c
%mlx_chr
% $unit
1422 mkdev mly
$unit c
%mly_chr
% $unit
1427 mkdev twa
$unit c
%twa_chr
% $unit
1432 mkdev twe
$unit c
%twe_chr
% $unit
1437 mkdev icp
$unit c
%icp_chr
% $unit
1442 mkdev agp
$unit c
%agp_chr
% $unit 644
1443 if [ "$unit" = "0" ]; then
1444 lndev agp
$unit agpgart
1450 mkdev pci
$unit c
%pci_chr
% $unit 644
1455 mkdev dpti
$unit c
%dpti_chr
% $unit
1460 mkdev dpt
$unit c
%dpt_chr
% $unit
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
1474 mkdev isdn c
%isdn_chr
% 0
1478 mkdev isdnctl c
%isdnctl_chr
% 0
1483 mkdev isdnbchan
$unit c
%isdnbchan_chr
% $unit
1488 mkdev isdnteld
$unit c
%isdntel_chr
% $
(($unit + 64))
1493 mkdev isdntel
$unit c
%isdntel_chr
% $unit
1498 mkdev isdntrc
$unit c
%isdntrc_chr
% $unit
1502 makedev vmegen0 vmegen1 vmegen2 vmegen3
1507 mkdev vmegen
$unit c
%vmegeneric_chr
% $
(($unit * 16 + 0))
1511 mkdev wsfont c
%wsfont_chr
% 0
1516 mkdev cir
$unit c
%cir_chr
% $unit 666
1521 mkdev irframe
$unit c
%irframe_chr
% $unit
1526 mkdev fcom
$unit c
%fcom_chr
% $unit "" "" $u_uucp
1530 mkdev openfirm c
%openfirm_chr
% 0 444
1535 mkdev pad
$unit c
%pad_chr
% $unit 444
1539 mkdev nvram c
%nvram_chr
% 0 644
1543 mkdev rtc c
%rtc_chr
% 0 644
1547 mkdev clockctl c
%clockctl_chr
% 0 660 $g_ntpd
1551 makedev nsmb0 nsmb1 nsmb2 nsmb3
1556 mkdev nsmb
$unit c
%nsmb_chr
% $unit 644
1560 mkdev kttcp c
%kttcp_chr
% 0
1564 mkdev dmoverio c
%dmoverio_chr
% 0 644
1568 mkdev veriexec c
%veriexec_chr
% 0 600
1573 mkdev ttyv
$unit c
%pc_chr
% $unit
1579 mkdev ttyv
$unit c
%physcon_chr
% $unit
1584 mkdev arcpp
$unit c
%arcpp_chr
% $unit
1591 mkdev par
$unit c
%par_chr
% $unit
1594 warn
"bad unit for par in: $i"
1601 mkdev cpi
$unit c
%cpi_chr
% $unit
1606 ite
*) unit
=${i#ite};;
1607 ttye
*) unit
=${i#ttye};;
1609 mkdev ttye
$unit c
%ite_chr
% $unit
1614 mkdev pms
$unit c
%opms_chr
% $unit
1619 mkdev qms
$unit c
%qms_chr
% $unit
1624 mkdev lms
$unit c
%lms_chr
% $unit
1629 mkdev mms
$unit c
%mms_chr
% $unit
1634 mouse-pms
*) name
=pms
;;
1635 mouse-qms
*) name
=qms
;;
1637 unit
=${i#mouse-${name}}
1638 lndev
$name$unit mouse
1642 mkdev kbd c
%kbd_chr
% 0
1646 mkdev kbdctl c
%kbd_chr
% 1
1650 mkdev vidcconsole0 c
%vidcconsole_chr
% 0 640
1655 mkdev view
$unit c
%view_chr
% $unit 666
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"
1674 mkdev panel0 c
%panel_chr
% 0 660
1678 mkdev tslcd0 c
%tslcd_chr
% 0 660
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
1690 mkdev ptmx c
%ptm_chr
% 0 666
1691 mkdev ptm c
%ptm_chr
% 1 666
1696 mkdev grf
$unit c
%grf_chr
% $unit 666
1700 mkdev etvme c
%et_chr
% 0
1705 mkdev leo
$unit c
%leo_chr
% $unit
1710 mkdev scif
$unit c
%scif_chr
% $
(($unit + $dialin )) "" "" $u_uucp
1711 mkdev dscif
$unit c
%scif_chr
% $
(($unit + $dialout)) "" "" $u_uucp
1716 mkdev sci
$unit c
%sci_chr
% $
(($unit + $dialin )) "" "" $u_uucp
1717 mkdev dsci
$unit c
%sci_chr
% $
(($unit + $dialout)) "" "" $u_uucp
1722 mapleA
*) name
="mapleA"; unit
=0;;
1723 mapleB
*) name
="mapleB"; unit
=1;;
1724 mapleC
*) name
="mapleC"; unit
=2;;
1725 mapleD
*) name
="mapleD"; unit
=3;;
1728 mkdev
$name$subunit c
%maple_chr
% $
(($unit * 8 + 0$subunit))
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
1744 for pt
in 0 # 1 2 3 4 ... 255
1746 mkdev mlcd
${unit}.
${pt} c
%mlcd_chr
% $
(($unit * 256 + $pt)) 640 $g_operator
1752 mkdev ixpcom
$unit c
%ixpcom_chr
% $unit "" "" $u_uucp
1757 mkdev epcom
$unit c
%epcom_chr
% $unit "" "" $u_uucp
1761 mkdev ucbsnd c
%ucbsnd_chr
% 0 666
1765 mkdev adb c
%aed_chr
% 0 666
1770 mkdev asc
$unit c
%asc_chr
% $unit 666
1775 mkdev bwtwo
$unit c
%bwtwo_chr
% $unit 666
1780 mkdev cgtwo
$unit c
%cgtwo_chr
% $unit 666
1785 mkdev cgthree
$unit c
%cgthree_chr
% $unit 666
1790 mkdev cgfour
$unit c
%cgfour_chr
% $unit 666
1795 mkdev cgsix
$unit c
%cgsix_chr
% $unit 666
1800 mkdev cgeight
$unit c
%cgeight_chr
% $unit 666
1805 mkdev tcx
$unit c
%tcx_chr
% $unit 666
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
%;;
1813 %MKDISK
% $name $unit $blk $chr
1818 if [ 0$unit -gt 3 ]; then
1819 warn
"bad unit for $i: $unit"
1822 for j
in 0 1 2 3 4 5 6 7 8 9 a b c d e f
1833 mkdev tty
$unit$j c
%mtty_chr
% $
(($unit * 64 + $jn))
1835 mkdev bpp
${unit}0 c
%mbpp_chr
% $
(($unit * 64 + 0))
1836 mkdev bpp
${unit}1 c
%mbpp_chr
% $
(($unit * 64 + 1))
1841 if [ 0$unit -gt 7 ]; then
1842 warn
"bad unit for $i: $unit"
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
1854 if [ 0$unit -gt 3 ]; then
1855 warn
"bad unit for $i: $unit"
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
1861 mkdev bppS
${unit}0 c
103 $
(($unit * 64 + 0))
1862 mkdev bppS
${unit}1 c
103 $
(($unit * 64 + 1))
1867 mkdev bpp
$unit c
%bpp_chr
% $
(($unit + 0))
1872 mkdev tctrl
$unit c
%tctrl_chr
% $unit 666
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
1884 mkdev sram c
%sram_chr
% 0 644
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"
1904 mkdev ttyS
$unit c
%sacom_chr
% $
(($unit + $dialin )) "" "" $u_uucp
1905 mkdev dtyS
$unit c
%sacom_chr
% $
(($unit + $dialout)) "" "" $u_uucp
1910 mkdev atabus
$unit c
%atabus_chr
% $unit 644
1916 mkdev dri
/card
$unit c
%drm_chr
% $unit 660
1920 mkdev drvctl c
%drvctl_chr
% 0 644
1924 mkdev isv c
%isv_chr
% 0 644
1931 mkdev tap
${unit} c
%tap_chr
% ${unit} 600
1934 mkdev tap c
%tap_chr
% 0xfffff 600
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}
1948 # create putter device and symlinks for all subsystems using it
1950 mkdev putter c
%putter_chr
% 0 600
1951 mkdev pud c
%putter_chr
% 1 600
1956 mkdev zfs c
%zfs_chr
% 0 600
1963 if [ -f "$0.local" ]; then
1965 if [ -n "$count_nodes" ]; then
1966 count_nodes
=$
((count_nodes
+ \
1967 $
(linecount
"$(sh "$0.
local" $opts -s all)") ))
1969 sh
"$0.local" $opts all
1976 warn
"$i: unknown device"
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
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
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
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
2092 name
=$1; unit
=$2; blk
=$3; chr
=$4
2093 doff
=%DISKMINOROFFSET
%
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
2108 # If do_redirect, then also redirect output to the console.
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"
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"
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
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+"$@"}