wz_init.sh 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. #!/bin/sh
  2. ###This file is run by switch_root, from the initramfs in the kernel.
  3. LOG_NAME=/opt/wz_mini/log/wz_init
  4. if [[ -e $LOG_NAME.log || -L $LOG_NAME.log ]] ; then
  5. i=0
  6. while [[ -e $LOG_NAME.log.$i || -L $LOG_NAME.log.$i ]] ; do
  7. let i++
  8. done
  9. mv $LOG_NAME.log $LOG_NAME.log.$i
  10. LOG_NAME=$LOG_NAME
  11. fi
  12. touch -- "$LOG_NAME".log
  13. exec 1> $LOG_NAME.log 2>&1
  14. export WZMINI_CFG=/opt/wz_mini/wz_mini.conf
  15. [ -f $WZMINI_CFG ] && source $WZMINI_CFG
  16. echo "welcome to wz_init.sh"
  17. echo "PID $$"
  18. echo '
  19. __ ________ __ __ _____ _ _ _____
  20. \ \ / |___ / | \/ |_ _| \ | |_ _|
  21. \ \ /\ / / / / | \ / | | | | \| | | |
  22. \ \/ \/ / / / | |\/| | | | | . ` | | |
  23. \ /\ / / /__ | | | |_| |_| |\ |_| |_
  24. \/ \/ /_____| |_| |_|_____|_| \_|_____|
  25. ______
  26. |______|
  27. '
  28. set -x
  29. echo "replace stock busybox"
  30. mount --bind /opt/wz_mini/bin/busybox /bin/busybox
  31. echo "replace stock fstab"
  32. mount --bind /opt/wz_mini/etc/fstab /etc/fstab
  33. echo "mount wz_mini tmpfs"
  34. mount -t tmpfs /opt/wz_mini/tmp
  35. echo "install busybox applets"
  36. mkdir /opt/wz_mini/tmp/.bin
  37. /opt/wz_mini/bin/busybox --install -s /opt/wz_mini/tmp/.bin
  38. ##DETECT CAMERA MODEL & PLATFORM TYPE
  39. #V2=WYZEC1-JZ
  40. #PANv1=WYZECP1_JEF
  41. #PANv2=HL_PAN2
  42. #V3=WYZE_CAKP2JFUS
  43. #DB3=WYZEDB3
  44. #V3C=ATOM_CamV3C
  45. #mtdblock9 only exists on the T20 platform, indicating V2 or PANv1
  46. if [ -b /dev/mtdblock9 ]; then
  47. mkdir /opt/wz_mini/tmp/params
  48. mount -t jffs2 /dev/mtdblock9 /opt/wz_mini/tmp/params
  49. touch /opt/wz_mini/tmp/.$(cat /opt/wz_mini/tmp/params/config/.product_config | grep PRODUCT_MODEL | sed -e 's#.*=\(\)#\1#')
  50. touch /opt/wz_mini/tmp/.T20
  51. umount /opt/wz_mini/tmp/params
  52. rm -rf /opt/wz_mini/tmp/params
  53. elif [ -b /dev/mtdblock6 ]; then
  54. mkdir /opt/wz_mini/tmp/configs
  55. mount -t jffs2 /dev/mtdblock6 /opt/wz_mini/tmp/configs
  56. touch /opt/wz_mini/tmp/.$(cat /opt/wz_mini/tmp/configs/.product_config | grep PRODUCT_MODEL | sed -e 's#.*=\(\)#\1#')
  57. touch /opt/wz_mini/tmp/.T31
  58. umount /opt/wz_mini/tmp/configs
  59. rm -rf /opt/wz_mini/tmp/configs
  60. fi
  61. #Set the correct GPIO for the audio driver (T31 only)
  62. if [ -f /opt/wz_mini/tmp/.HL_PAN2 ]; then
  63. GPIO=7
  64. elif [ -f /opt/wz_mini/tmp/.WYZE_CAKP2JFUS ]; then
  65. GPIO=63
  66. fi
  67. if [ -e /opt/wz_mini/etc/.first_boot ]; then
  68. echo "first boot already completed"
  69. else
  70. echo "first boot, initializing"
  71. if [ -f /opt/wz_mini/tmp/.T20 ]; then
  72. #May need different gpio for PANv1
  73. #We don't rmmod this module, as it is marked [permanent] by the kernel on T20
  74. insmod /opt/wz_mini/lib/modules/3.10.14/extra/audio.ko sign_mode=0
  75. LD_LIBRARY_PATH='/opt/wz_mini/lib' /opt/wz_mini/bin/audioplay_t20 /opt/wz_mini/usr/share/audio/init_v2.wav $AUDIO_PROMPT_VOLUME
  76. else
  77. insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/extra/audio.ko spk_gpio=$GPIO alc_mode=0 mic_gain=0
  78. /opt/wz_mini/bin/audioplay_t31 /opt/wz_mini/usr/share/audio/init.wav $AUDIO_PROMPT_VOLUME
  79. rmmod audio
  80. fi
  81. fi
  82. if [ -f /opt/wz_mini/etc/.first_boot ]; then
  83. echo "Not first_boot"
  84. else
  85. echo "Set first_boot"
  86. touch /opt/wz_mini/etc/.first_boot
  87. fi
  88. echo "replace stock inittab"
  89. mount --bind /opt/wz_mini/etc/inittab /etc/inittab
  90. echo "bind /etc/profile for local/ssh shells"
  91. mount --bind /opt/wz_mini/etc/profile /etc/profile
  92. echo "mounting global tmpfs"
  93. mount -t tmpfs /tmp
  94. echo "mount system to replace factorycheck with dummy, to prevent bind unmount"
  95. if [ -f /opt/wz_mini/tmp/.T31 ]; then
  96. mount /dev/mtdblock3 /system
  97. mount --bind /opt/wz_mini/bin/factorycheck /system/bin/factorycheck
  98. fi
  99. touch /tmp/usrflag
  100. echo "create workspace directory"
  101. mkdir /opt/wz_mini/tmp/.storage
  102. echo "copy stock rcS"
  103. cp /etc/init.d/rcS /opt/wz_mini/tmp/.storage/rcS
  104. echo "add wz_post inject to stock rcS"
  105. sed -i '/^".*/aset -x' /opt/wz_mini/tmp/.storage/rcS
  106. sed -i '/^# Run init script.*/i/opt/wz_mini/etc/init.d/wz_post.sh\n' /opt/wz_mini/tmp/.storage/rcS
  107. sed -i '/sbin:/s/$/:\/opt\/wz_mini\/bin/' /opt/wz_mini/tmp/.storage/rcS
  108. sed -i '/system\/\lib/s/$/:\/opt\/wz_mini\/lib/' /opt/wz_mini/tmp/.storage/rcS
  109. #Custom PATH hooks
  110. #sed -i '/^# Run init script.*/i#Hook Library PATH here\nexport LD_LIBRARY_PATH=/tmp/test/lib:$LD_LIBRARY_PATH\n' /opt/wz_mini/tmp/.storage/rcS
  111. #sed -i '/^# Run init script.*/i#Hook system PATH here\nexport PATH=/tmp/test/bin:$PATH\n' /opt/wz_mini/tmp/.storage/rcS
  112. if [ -f /opt/wz_mini/tmp/.T20 ]; then
  113. mount -t jffs2 /dev/mtdblock4 /system
  114. fi
  115. echo "Copy factory app_init.sh"
  116. cp /system/init/app_init.sh /opt/wz_mini/tmp/.storage/app_init.sh
  117. echo "Replace factory app_init.sh path"
  118. sed -i '/\/system\/init\/app_init.sh/,+4d' /opt/wz_mini/tmp/.storage/rcS
  119. sed -i '/Run init script.*/a /opt/wz_mini/tmp/.storage/app_init.sh\n' /opt/wz_mini/tmp/.storage/rcS
  120. sed -i '/\/system\/init\/app_init.sh/,+2d' /opt/wz_mini/tmp/.storage/rcS
  121. echo "replace stock password"
  122. cp /opt/wz_mini/etc/shadow /opt/wz_mini/tmp/.storage/shadow
  123. if [[ "$DEBUG_PASSWORD" == "true" ]]; then
  124. sed -i 's/:[^:]*/:/' /opt/wz_mini/tmp/.storage/shadow
  125. fi
  126. mount --bind /opt/wz_mini/tmp/.storage/shadow /etc/shadow
  127. chmod 400 /etc/shadow
  128. if [[ -e /opt/wz_mini/swap.gz ]]; then
  129. if [ -f /opt/wz_mini/tmp/.T20 ]; then
  130. LD_LIBRARY_PATH='/opt/wz_mini/lib' /opt/wz_mini/bin/audioplay_t20 /opt/wz_mini/usr/share/audio/swap_v2.wav $AUDIO_PROMPT_VOLUME
  131. else
  132. insmod /opt/wz_mini/lib/modules/3.10.14__isvp_swan_1.0__/extra/audio.ko spk_gpio=$GPIO alc_mode=0 mic_gain=0
  133. /opt/wz_mini/bin/audioplay_t31 /opt/wz_mini/usr/share/audio/swap.wav $AUDIO_PROMPT_VOLUME
  134. rmmod audio
  135. fi
  136. echo "swap archive present, extracting"
  137. gzip -d /opt/wz_mini/swap.gz
  138. mkswap /opt/wz_mini/swap
  139. sync;echo 3 > /proc/sys/vm/drop_caches
  140. else
  141. echo "swap archive missing, not extracting"
  142. fi
  143. if [ -d /opt/wz_mini/usr/share/terminfo ]; then
  144. echo "terminfo already present"
  145. else
  146. echo "terminfo not present, extract"
  147. tar xf /opt/wz_mini/usr/share/terminfo.tar -C /opt/wz_mini/usr/share/
  148. fi
  149. echo "Run dropbear ssh server"
  150. /opt/wz_mini/bin/dropbear -R -s -g
  151. if [[ "$DEBUG_ENABLED" == "true" ]]; then
  152. sed -i '/app_init.sh/,+4d' /opt/wz_mini/tmp/.storage/rcS
  153. sed -i '/^# Run init/i/bin/sh /etc/profile' /opt/wz_mini/tmp/.storage/rcS
  154. touch /tmp/dbgflag
  155. elif [[ "$WEB_CAM_ENABLE" == "true" ]]; then
  156. sed -i '/app_init.sh/,+4d' /opt/wz_mini/tmp/.storage/rcS
  157. sed -i '/^# Run init/i/opt/wz_mini/etc/init.d/wz_cam.sh &' /opt/wz_mini/tmp/.storage/rcS
  158. touch /tmp/dbgflag
  159. elif [[ -d /opt/Upgrade ]]; then
  160. sed -i '/app_init.sh/,+4d' /opt/wz_mini/tmp/.storage/rcS
  161. sed -i '/^# Run init/i/bin/sh /etc/profile' /opt/wz_mini/tmp/.storage/rcS
  162. sed -i '/^# Mount configs.*/i/opt/wz_mini/bin/upgrade-run.sh &\n' /opt/wz_mini/tmp/.storage/rcS
  163. touch /tmp/dbgflag
  164. fi
  165. /linuxrc