PageRenderTime 40ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/commands/MAKEDEV/MAKEDEV.sh

http://www.minix3.org/
Shell | 293 lines | 248 code | 11 blank | 34 comment | 6 complexity | 1971626a042cccdacef1ec8607c37ee9 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 fb0
  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. fb0 # Make /dev/fb0
  32. fd0 fd1 ... # Floppy devices for drive 0, 1, ...
  33. fd0p0 fd1p0 ... # Make floppy partitions fd0p[0-3], fd1p[0-3], ...
  34. c0d0 c0d1 ... # Make disks c0d0, c0d1, ...
  35. c0d0p0 c0d1p0 ... # Make partitions c0d0p[0-3], c0d1p[0-3], ...
  36. c0d0p0s0 c0d1p0s0 ... # Subparts c0d0p[0-3]s[0-3], c0d1p[0-3]s[0-3], ...
  37. c1d0(p0)(s0) # Likewise for controller 1
  38. c0t0 c0t1 c1t0 ... # Make tape devices c0t0, c0t0n, c0t1, ...
  39. console lp tty log # One of these makes all four
  40. ttyc1 ... ttyc7 # Virtual consoles
  41. tty00 ... tty03 # Make serial lines
  42. ttyp0 ... ttyq0 ... # Make tty, pty pairs
  43. eth ip tcp udp # One of these makes some TCP/IP devices
  44. audio mixer # Make audio devices
  45. klog # Make /dev/klog
  46. random # Make /dev/random, /dev/urandom
  47. uds # Make /dev/uds
  48. kbd # Make /dev/kbd
  49. kbdaux # Make /dev/kbdaux
  50. filter # Make /dev/filter
  51. fbd # Make /dev/fbd
  52. hello # Make /dev/hello
  53. video # Make /dev/video
  54. std # All standard devices
  55. EOF
  56. exit 1
  57. esac
  58. umask 077
  59. ex=0
  60. for dev
  61. do
  62. case $dev in # One of the controllers? Precompute major device nr.
  63. c0*) maj=3 ;;
  64. c1*) maj=8 ;;
  65. c2*) maj=10 ;;
  66. c3*) maj=12 ;;
  67. esac
  68. case $dev in
  69. ram|mem|kmem|null|boot|zero|imgrd)
  70. # Memory devices.
  71. #
  72. $e mknod ram b 1 0; $e chmod 600 ram
  73. $e mknod mem c 1 1; $e chmod 640 mem
  74. $e mknod kmem c 1 2; $e chmod 640 kmem
  75. $e mknod null c 1 3; $e chmod 666 null
  76. $e mknod boot b 1 4; $e chmod 600 ram
  77. $e mknod zero c 1 5; $e chmod 644 zero
  78. $e mknod imgrd b 1 6; $e chmod 644 zero
  79. for n in 0 1 2 3 4 5
  80. do $e mknod ram$n b 1 $((7+$n)); $e chmod 600 ram$n
  81. done
  82. $e chgrp kmem ram* mem kmem null boot zero imgrd
  83. ;;
  84. fd[0-3])
  85. # Floppy disk drive n.
  86. #
  87. d=`expr $dev : '.*\\(.\\)'` # Drive number.
  88. $e mknod $dev b 2 $d
  89. $e chmod 666 $dev
  90. ;;
  91. pc[0-3]|at[0-3]|qd[0-3]|ps[0-3]|pat[0-3]|qh[0-3]|PS[0-3])
  92. # Obsolete density locked floppy disk drive n.
  93. #
  94. d=`expr $dev : '.*\\(.\\)'` # Drive number.
  95. m=$d # Minor device number.
  96. $e mknod pc$d b 2 $m; m=`expr $m + 4`
  97. $e mknod at$d b 2 $m; m=`expr $m + 4`
  98. $e mknod qd$d b 2 $m; m=`expr $m + 4`
  99. $e mknod ps$d b 2 $m; m=`expr $m + 4`
  100. $e mknod pat$d b 2 $m; m=`expr $m + 4`
  101. $e mknod qh$d b 2 $m; m=`expr $m + 4`
  102. $e mknod PS$d b 2 $m; m=`expr $m + 4`
  103. $e chmod 666 pc$d at$d qd$d ps$d pat$d qh$d PS$d
  104. ;;
  105. fd[0-3]p[0-3])
  106. # Floppy disk partitions.
  107. #
  108. n=`expr $dev : '\\(.*\\)..'` # Name prefix.
  109. d=`expr $dev : '..\\(.\\)'` # Drive number.
  110. m=`expr 112 + $d` # Minor of partition 0.
  111. alldev=
  112. for p in 0 1 2 3
  113. do
  114. m=`expr 112 + $d + $p '*' 4` # Minor of partition $p.
  115. $e mknod ${n}p${p} b 2 $m # Make e.g. fd0p0 - fd0p3
  116. alldev="$alldev ${n}p${p}"
  117. done
  118. $e chmod 666 $alldev
  119. ;;
  120. c[0-3]d[0-7])
  121. # Whole disk devices.
  122. d=`expr $dev : '...\\(.\\)'` # Disk number.
  123. m=`expr $d '*' 5` # Minor device number.
  124. $e mknod $dev b $maj $m
  125. $e chmod 600 $dev
  126. ;;
  127. c[0-3]d[0-7]p[0-3])
  128. # Disk primary partitions.
  129. n=`expr $dev : '\\(.*\\).'` # Name prefix.
  130. d=`expr $dev : '...\\(.\\)'` # Disk number.
  131. alldev=
  132. for p in 0 1 2 3
  133. do
  134. m=`expr $d '*' 5 + 1 + $p` # Minor device number.
  135. $e mknod $n$p b $maj $m
  136. alldev="$alldev $n$p"
  137. done
  138. echo $alldev | xargs $e chmod 600
  139. ;;
  140. c[0-3]d[0-7]p[0-3]s[0-3])
  141. # Disk subpartition.
  142. n=`expr $dev : '\\(.*\\)...'` # Name prefix.
  143. d=`expr $dev : '...\\(.\\)'` # Disk number.
  144. alldev=
  145. for p in 0 1 2 3
  146. do
  147. for s in 0 1 2 3
  148. do
  149. m=`expr 128 + $d '*' 16 + $p '*' 4 + $s` # Minor device nr.
  150. $e mknod ${n}${p}s${s} b $maj $m
  151. alldev="$alldev ${n}${p}s${s}"
  152. done
  153. done
  154. echo $alldev | xargs $e chmod 600
  155. ;;
  156. c[0-3]t[0-7]|c[0-3]t[0-7]n)
  157. # Tape devices.
  158. n=`expr $dev : '\\(....\\)'` # Name prefix.
  159. t=`expr $dev : '...\\(.\\)'` # Tape number.
  160. m=`expr 64 + $t '*' 2` # Minor device number.
  161. $e mknod ${n}n c $maj $m
  162. $e mknod ${n} c $maj `expr $m + 1`
  163. $e chmod 660 ${n}n ${n}
  164. ;;
  165. console|lp|tty|log|kbd|kbdaux|video)
  166. # Console, line printer, anonymous tty, diagnostics device,
  167. # raw keyboard, ps/2 mouse, video.
  168. $e mknod console c 4 0
  169. $e chmod 600 console
  170. $e chgrp tty console
  171. $e mknod tty c 5 0
  172. $e chmod 666 tty
  173. $e mknod lp c 6 0
  174. $e chown daemon lp
  175. $e chgrp daemon lp
  176. $e chmod 200 lp
  177. $e mknod log c 4 15
  178. $e chmod 222 log
  179. $e mknod kbd c 4 127
  180. $e mknod kbdaux c 4 126
  181. $e chmod 660 kbd kbdaux
  182. $e chgrp operator kbd kbdaux
  183. $e mknod video c 4 125
  184. $e chmod 600 video
  185. $e chgrp operator video
  186. ;;
  187. ttyc[1-7])
  188. # Virtual consoles.
  189. #
  190. m=`expr $dev : '....\\(.*\\)'` # Minor device number.
  191. $e mknod $dev c 4 $m
  192. $e chgrp tty $dev
  193. $e chmod 600 $dev
  194. ;;
  195. tty0[0-3])
  196. # Serial lines.
  197. #
  198. n=`expr $dev : '.*\\(.\\)'`
  199. $e mknod $dev c 4 `expr $n + 16`
  200. $e chmod 666 $dev
  201. $e chgrp tty $dev
  202. ;;
  203. tty[p-s][0-9a-f]|pty[p-s][0-9a-f])
  204. # Pseudo ttys.
  205. #
  206. dev=`expr $dev : '...\\(..\\)'`
  207. g=`expr $dev : '\\(.\\)'` # Which group.
  208. g=`echo $g | tr 'pqrs' '0123'`
  209. n=`expr $dev : '.\\(.\\)'` # Which pty in the group.
  210. case $n in
  211. [a-f]) n=1`/bin/echo $n | tr 'abcdef' '012345'`
  212. esac
  213. $e mknod tty$dev c 4 `expr $g '*' 16 + $n + 128`
  214. $e mknod pty$dev c 4 `expr $g '*' 16 + $n + 192`
  215. $e chgrp tty tty$dev pty$dev
  216. $e chmod 666 tty$dev pty$dev
  217. ;;
  218. eth|ip|tcp|udp|eth0|ip0|tcp0|udp0)
  219. # TCP/IP devices.
  220. #
  221. $e mknod eth0 c 7 0 # Network 0 (Ethernet)
  222. $e mknod ip0 c 7 1
  223. $e mknod tcp0 c 7 2
  224. $e mknod udp0 c 7 3
  225. $e chmod 600 eth0 ip0
  226. $e chmod 666 tcp0 udp0
  227. $e ln -f eth0 eth # Default interface
  228. $e ln -f ip0 ip
  229. $e ln -f tcp0 tcp
  230. $e ln -f udp0 udp
  231. ;;
  232. audio|mixer)
  233. # Audio devices.
  234. #
  235. $e mknod audio c 13 0
  236. $e mknod mixer c 13 1
  237. $e chmod 666 audio mixer
  238. ;;
  239. random|urandom)
  240. # random data generator.
  241. $e mknod random c 16 0; $e chmod 644 random
  242. $e mknod urandom c 16 0; $e chmod 644 urandom
  243. $e chgrp operator random urandom
  244. ;;
  245. uds)
  246. # unix domain sockets device
  247. $e mknod uds c 18 0;
  248. $e chgrp operator uds
  249. $e chmod 666 uds
  250. ;;
  251. klog)
  252. # logging device.
  253. $e mknod klog c 15 0
  254. $e chmod 600 klog
  255. ;;
  256. filter)
  257. # filter driver
  258. $e mknod filter b 11 0
  259. $e chmod 600 filter
  260. ;;
  261. fbd)
  262. # faulty block device driver
  263. $e mknod fbd b 14 0
  264. $e chmod 600 fbd
  265. ;;
  266. hello)
  267. # hello driver
  268. $e mknod hello c 17 0
  269. $e chmod 644 hello
  270. ;;
  271. fb0)
  272. # framebuffer driver
  273. $e mknod fb0 c 19 0
  274. $e chmod 644 fb0
  275. ;;
  276. *)
  277. echo "$0: don't know about $dev" >&2
  278. ex=1
  279. esac
  280. done
  281. exit $ex