PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

commands/MAKEDEV/MAKEDEV.sh

http://www.minix3.org/
Shell | 287 lines | 243 code | 11 blank | 33 comment | 6 complexity | 509eb0e8953c09bbdaf5492a9c73f3c5 MD5 | raw file
Possible License(s): MIT, WTFPL, AGPL-1.0, BSD-3-Clause, GPL-3.0, LGPL-2.0, JSON, 0BSD
  1. #!/bin/sh
  2. #
  3. # MAKEDEV 3.3 - Make special devices. Author: Kees J. Bot
  4. case $1 in
  5. -n) e=echo; shift ;; # Just echo when -n is given.
  6. *) e=
  7. esac
  8. case $#:$1 in
  9. 1:std) # Standard devices.
  10. set -$- mem fd0 fd1 fd0p0 fd1p0 \
  11. c0d0 c0d0p0 c0d0p0s0 c0d1 c0d1p0 c0d1p0s0 \
  12. c0d2 c0d2p0 c0d2p0s0 c0d3 c0d3p0 c0d3p0s0 \
  13. c0d4 c0d4p0 c0d4p0s0 c0d5 c0d5p0 c0d5p0s0 \
  14. c0d6 c0d6p0 c0d6p0s0 c0d7 c0d7p0 c0d7p0s0 \
  15. c1d0 c1d0p0 c1d0p0s0 c1d1 c1d1p0 c1d1p0s0 \
  16. c1d2 c1d2p0 c1d2p0s0 c1d3 c1d3p0 c1d3p0s0 \
  17. c1d4 c1d4p0 c1d4p0s0 c1d5 c1d5p0 c1d5p0s0 \
  18. c1d6 c1d6p0 c1d6p0s0 c1d7 c1d7p0 c1d7p0s0 \
  19. tty ttyc1 ttyc2 ttyc3 tty00 tty01 tty02 tty03 \
  20. ttyp0 ttyp1 ttyp2 ttyp3 ttyp4 ttyp5 ttyp6 ttyp7 ttyp8 ttyp9 \
  21. ttypa ttypb ttypc ttypd ttype ttypf \
  22. ttyq0 ttyq1 ttyq2 ttyq3 ttyq4 ttyq5 ttyq6 ttyq7 ttyq8 ttyq9 \
  23. ttyqa ttyqb ttyqc ttyqd ttyqe ttyqf \
  24. eth klog random uds filter fbd hello
  25. ;;
  26. 0:|1:-\?)
  27. cat >&2 <<EOF
  28. Usage: $0 [-n] key ...
  29. Where key is one of the following:
  30. ram mem kmem null boot zero # One of these makes all these memory devices
  31. fd0 fd1 ... # Floppy devices for drive 0, 1, ...
  32. fd0p0 fd1p0 ... # Make floppy partitions fd0p[0-3], fd1p[0-3], ...
  33. c0d0 c0d1 ... # Make disks c0d0, c0d1, ...
  34. c0d0p0 c0d1p0 ... # Make partitions c0d0p[0-3], c0d1p[0-3], ...
  35. c0d0p0s0 c0d1p0s0 ... # Subparts c0d0p[0-3]s[0-3], c0d1p[0-3]s[0-3], ...
  36. c1d0(p0)(s0) # Likewise for controller 1
  37. c0t0 c0t1 c1t0 ... # Make tape devices c0t0, c0t0n, c0t1, ...
  38. console lp tty log # One of these makes all four
  39. ttyc1 ... ttyc7 # Virtual consoles
  40. tty00 ... tty03 # Make serial lines
  41. ttyp0 ... ttyq0 ... # Make tty, pty pairs
  42. eth ip tcp udp # One of these makes some TCP/IP devices
  43. audio mixer # Make audio devices
  44. klog # Make /dev/klog
  45. random # Make /dev/random, /dev/urandom
  46. uds # Make /dev/uds
  47. kbd # Make /dev/kbd
  48. kbdaux # Make /dev/kbdaux
  49. filter # Make /dev/filter
  50. fbd # Make /dev/fbd
  51. hello # Make /dev/hello
  52. video # Make /dev/video
  53. std # All standard devices
  54. EOF
  55. exit 1
  56. esac
  57. umask 077
  58. ex=0
  59. for dev
  60. do
  61. case $dev in # One of the controllers? Precompute major device nr.
  62. c0*) maj=3 ;;
  63. c1*) maj=8 ;;
  64. c2*) maj=10 ;;
  65. c3*) maj=12 ;;
  66. esac
  67. case $dev in
  68. ram|mem|kmem|null|boot|zero|imgrd)
  69. # Memory devices.
  70. #
  71. $e mknod ram b 1 0; $e chmod 600 ram
  72. $e mknod mem c 1 1; $e chmod 640 mem
  73. $e mknod kmem c 1 2; $e chmod 640 kmem
  74. $e mknod null c 1 3; $e chmod 666 null
  75. $e mknod boot b 1 4; $e chmod 600 ram
  76. $e mknod zero c 1 5; $e chmod 644 zero
  77. $e mknod imgrd b 1 6; $e chmod 644 zero
  78. for n in 0 1 2 3 4 5
  79. do $e mknod ram$n b 1 $((7+$n)); $e chmod 600 ram$n
  80. done
  81. $e chgrp kmem ram* mem kmem null boot zero imgrd
  82. ;;
  83. fd[0-3])
  84. # Floppy disk drive n.
  85. #
  86. d=`expr $dev : '.*\\(.\\)'` # Drive number.
  87. $e mknod $dev b 2 $d
  88. $e chmod 666 $dev
  89. ;;
  90. pc[0-3]|at[0-3]|qd[0-3]|ps[0-3]|pat[0-3]|qh[0-3]|PS[0-3])
  91. # Obsolete density locked floppy disk drive n.
  92. #
  93. d=`expr $dev : '.*\\(.\\)'` # Drive number.
  94. m=$d # Minor device number.
  95. $e mknod pc$d b 2 $m; m=`expr $m + 4`
  96. $e mknod at$d b 2 $m; m=`expr $m + 4`
  97. $e mknod qd$d b 2 $m; m=`expr $m + 4`
  98. $e mknod ps$d b 2 $m; m=`expr $m + 4`
  99. $e mknod pat$d b 2 $m; m=`expr $m + 4`
  100. $e mknod qh$d b 2 $m; m=`expr $m + 4`
  101. $e mknod PS$d b 2 $m; m=`expr $m + 4`
  102. $e chmod 666 pc$d at$d qd$d ps$d pat$d qh$d PS$d
  103. ;;
  104. fd[0-3]p[0-3])
  105. # Floppy disk partitions.
  106. #
  107. n=`expr $dev : '\\(.*\\)..'` # Name prefix.
  108. d=`expr $dev : '..\\(.\\)'` # Drive number.
  109. m=`expr 112 + $d` # Minor of partition 0.
  110. alldev=
  111. for p in 0 1 2 3
  112. do
  113. m=`expr 112 + $d + $p '*' 4` # Minor of partition $p.
  114. $e mknod ${n}p${p} b 2 $m # Make e.g. fd0p0 - fd0p3
  115. alldev="$alldev ${n}p${p}"
  116. done
  117. $e chmod 666 $alldev
  118. ;;
  119. c[0-3]d[0-7])
  120. # Whole disk devices.
  121. d=`expr $dev : '...\\(.\\)'` # Disk number.
  122. m=`expr $d '*' 5` # Minor device number.
  123. $e mknod $dev b $maj $m
  124. $e chmod 600 $dev
  125. ;;
  126. c[0-3]d[0-7]p[0-3])
  127. # Disk primary partitions.
  128. n=`expr $dev : '\\(.*\\).'` # Name prefix.
  129. d=`expr $dev : '...\\(.\\)'` # Disk number.
  130. alldev=
  131. for p in 0 1 2 3
  132. do
  133. m=`expr $d '*' 5 + 1 + $p` # Minor device number.
  134. $e mknod $n$p b $maj $m
  135. alldev="$alldev $n$p"
  136. done
  137. echo $alldev | xargs $e chmod 600
  138. ;;
  139. c[0-3]d[0-7]p[0-3]s[0-3])
  140. # Disk subpartition.
  141. n=`expr $dev : '\\(.*\\)...'` # Name prefix.
  142. d=`expr $dev : '...\\(.\\)'` # Disk number.
  143. alldev=
  144. for p in 0 1 2 3
  145. do
  146. for s in 0 1 2 3
  147. do
  148. m=`expr 128 + $d '*' 16 + $p '*' 4 + $s` # Minor device nr.
  149. $e mknod ${n}${p}s${s} b $maj $m
  150. alldev="$alldev ${n}${p}s${s}"
  151. done
  152. done
  153. echo $alldev | xargs $e chmod 600
  154. ;;
  155. c[0-3]t[0-7]|c[0-3]t[0-7]n)
  156. # Tape devices.
  157. n=`expr $dev : '\\(....\\)'` # Name prefix.
  158. t=`expr $dev : '...\\(.\\)'` # Tape number.
  159. m=`expr 64 + $t '*' 2` # Minor device number.
  160. $e mknod ${n}n c $maj $m
  161. $e mknod ${n} c $maj `expr $m + 1`
  162. $e chmod 660 ${n}n ${n}
  163. ;;
  164. console|lp|tty|log|kbd|kbdaux|video)
  165. # Console, line printer, anonymous tty, diagnostics device,
  166. # raw keyboard, ps/2 mouse, video.
  167. $e mknod console c 4 0
  168. $e chmod 600 console
  169. $e chgrp tty console
  170. $e mknod tty c 5 0
  171. $e chmod 666 tty
  172. $e mknod lp c 6 0
  173. $e chown daemon lp
  174. $e chgrp daemon lp
  175. $e chmod 200 lp
  176. $e mknod log c 4 15
  177. $e chmod 222 log
  178. $e mknod kbd c 4 127
  179. $e mknod kbdaux c 4 126
  180. $e chmod 660 kbd kbdaux
  181. $e chgrp operator kbd kbdaux
  182. $e mknod video c 4 125
  183. $e chmod 600 video
  184. $e chgrp operator video
  185. ;;
  186. ttyc[1-7])
  187. # Virtual consoles.
  188. #
  189. m=`expr $dev : '....\\(.*\\)'` # Minor device number.
  190. $e mknod $dev c 4 $m
  191. $e chgrp tty $dev
  192. $e chmod 600 $dev
  193. ;;
  194. tty0[0-3])
  195. # Serial lines.
  196. #
  197. n=`expr $dev : '.*\\(.\\)'`
  198. $e mknod $dev c 4 `expr $n + 16`
  199. $e chmod 666 $dev
  200. $e chgrp tty $dev
  201. ;;
  202. tty[p-s][0-9a-f]|pty[p-s][0-9a-f])
  203. # Pseudo ttys.
  204. #
  205. dev=`expr $dev : '...\\(..\\)'`
  206. g=`expr $dev : '\\(.\\)'` # Which group.
  207. g=`echo $g | tr 'pqrs' '0123'`
  208. n=`expr $dev : '.\\(.\\)'` # Which pty in the group.
  209. case $n in
  210. [a-f]) n=1`/bin/echo $n | tr 'abcdef' '012345'`
  211. esac
  212. $e mknod tty$dev c 4 `expr $g '*' 16 + $n + 128`
  213. $e mknod pty$dev c 4 `expr $g '*' 16 + $n + 192`
  214. $e chgrp tty tty$dev pty$dev
  215. $e chmod 666 tty$dev pty$dev
  216. ;;
  217. eth|ip|tcp|udp|eth0|ip0|tcp0|udp0)
  218. # TCP/IP devices.
  219. #
  220. $e mknod eth0 c 7 0 # Network 0 (Ethernet)
  221. $e mknod ip0 c 7 1
  222. $e mknod tcp0 c 7 2
  223. $e mknod udp0 c 7 3
  224. $e chmod 600 eth0 ip0
  225. $e chmod 666 tcp0 udp0
  226. $e ln -f eth0 eth # Default interface
  227. $e ln -f ip0 ip
  228. $e ln -f tcp0 tcp
  229. $e ln -f udp0 udp
  230. ;;
  231. audio|mixer)
  232. # Audio devices.
  233. #
  234. $e mknod audio c 13 0
  235. $e mknod mixer c 13 1
  236. $e chmod 666 audio mixer
  237. ;;
  238. random|urandom)
  239. # random data generator.
  240. $e mknod random c 16 0; $e chmod 644 random
  241. $e mknod urandom c 16 0; $e chmod 644 urandom
  242. $e chgrp operator random urandom
  243. ;;
  244. uds)
  245. # unix domain sockets device
  246. $e mknod uds c 18 0; $e chmod 644 random
  247. $e chgrp operator uds
  248. $e chmod 666 uds
  249. ;;
  250. klog)
  251. # logging device.
  252. $e mknod klog c 15 0
  253. $e chmod 600 klog
  254. ;;
  255. filter)
  256. # filter driver
  257. $e mknod filter b 11 0
  258. $e chmod 644 filter
  259. ;;
  260. fbd)
  261. # faulty block device driver
  262. $e mknod fbd b 14 0
  263. $e chmod 600 fbd
  264. ;;
  265. hello)
  266. # hello driver
  267. $e mknod hello c 17 0
  268. $e chmod 644 hello
  269. ;;
  270. *)
  271. echo "$0: don't know about $dev" >&2
  272. ex=1
  273. esac
  274. done
  275. exit $ex