| 
 Ура!
 На своём тронсмарте (AmLogic S905, Android 5.1.1) сделал автозапуск GPS и перезапуск при отключении/подключении ресивера, также сделал синхронизацию времени с GPS (в приставке отсутствует батарейка, поэтому при каждом запуске время ставится 01.01.2015; при проводном подключении время синхронизируется с ntp-серером в сети, а при наличии только Wi-Fi приставка не подключается к сети из-за слишком большой разницы во времени).  
Автозапуск работает только из  
install-recovery-2.sh
 
	Код: 
 #!/system/bin/sh
 /system/etc/init.gps.sh
 /system/etc/init.date.sh
 init.gps.sh
 
	Код: 
 #!/system/bin/sh
 # gps device settings
 GPSTTYdefault="ttyACM0"
 SPEEDdefault="9600"
 # time zone shift:  3 for MSK
 TimeZone=3
 # ################################################ #
 # set 1 for logging, 0 for work
 LOG=0
 # path to log file
 LOGFILE=/sdcard/gps.init.log.txt
 # ################################################ #
 
 GPSinit() {
 FOUND=""
 SLEEPTIME=1
 while [ 1 = 1 ]
 do
 if [ -c /dev/$GPSTTY ];
 then
 SET666=$(ls /dev/$GPSTTY -l | grep rw-rw-rw)
 if [[ $FOUND = "" ]] || [[ $SET666 = "" ]]
 then
 log "$GPSTTY found!"
 chown root:system /dev/$GPSTTY
 chmod 666 /dev/$GPSTTY
 busybox stty -F /dev/$GPSTTY ispeed $SPEED
 FOUND="found"
 SLEEPTIME=10
 GPStimesync
 fi
 else
 log "... no $GPSTTY found for one more second ..."
 FOUND=""
 SLEEPTIME=1
 fi
 sleep $SLEEPTIME
 done
 }
 
 GPStimesync() {
 sleep 2
 # wait for full RMC packet (no matter if it is V or A)
 log "... GPS $GPSTTY time sync started"
 GPRMC=$(cat /dev/$GPSTTY | grep -m 1 -e '$GPRMC,[0-9]\{6\}.[0-9]*,\(.*,\)\{7\}[0-9]\{6\}')
 log "... GPRMC=$GPRMC"
 D=$(echo $GPRMC | cut -d , -f 10)
 T=$(echo $GPRMC | cut -d , -f 2)
 Dy=$(expr substr $D 5 2)
 Dm=$(expr substr $D 3 2)
 Dd=$(expr substr $D 1 2)
 T=$(expr substr $T 1 6)
 log "... time to set 20$Dy$Dm$Dd.$T"
 date -s 20$Dy$Dm$Dd.$T
 T0=$(date +%s)
 # add double time shift for local time
 TZ=$(($T0+2*TimeZone*3600))
 date -u $TZ
 }
 
 log() {
 # LOG: 1 = logging on
 # LOGFILE: log file name
 # no parameters: clear log file
 if [ "$LOG" = 1 ]
 then
 if [ "$1" ]
 then
 echo $1 >> $LOGFILE
 else
 echo Start logging > $LOGFILE
 fi
 fi
 }
 
 log
 log "Start logging $GPSTTY init"
 
 GPSTTY=$(getprop ro.kernel.android.gps)
 SPEED=$(getprop ro.kernel.android.gps.speed)
 if [ "$GPSTTY" == "" ];
 then
 GPSTTY=$GPSTTYdefault
 SPEED=$SPEEDdefault
 setprop  ro.kernel.android.gps $GPSTTY
 setprop ro.kernel.android.gps.speed $SPEED
 fi
 GPSinit &
 exit
 init.date.sh
 
	Код: 
 #!/system/bin/sh
 # reads last known date (LKD) from saved file, sets it as current date, updates every hour
 
 SaveDateEveryHour() {
 while [ 1 = 1 ]
 do
 sleep 600
 date +%Y%m%d.%H%M%S > /sdcard/lastdate.txt
 sleep 3000
 done
 }
 
 if [ -f  /sdcard/lastdate.txt ]
 then
 LKD=$(cat /sdcard/lastdate.txt)
 date -s $LKD
 else
 date -s 20160701.010101
 fi;
 
 SaveDateEveryHour &
 exit
 По окончании загрузки оба скрипта продолжают выполняться в фоновом режиме. 
init.gps каждые 10 секунд определяет наличие и доступность устройства /dev/ttyACM0 (или что там прописано в ро.кернел.адроид.гпс). Если устройство отсутствует, задержка опроса уменьшается до 1 секунды. Как только устройство появляется, на него повторно раздаются права, и оно становится опять доступно программам навигации. Таким образом, при отключении и повторном подключении ресивера он станет доступен не более, чем через 10 секунд. При каждой инициализации GPS (автозапуск или перезапуск) скрипт ожидает первый пакет GPRMC, в котором полностью заполнены поля даты и времени, и выставляет соответствующее время с учётом пояса. 
За процессом загрузки можно проследить в логфайле (LOG=1) 
Начальная установка времени делается следующим образом: 
init.date.sh при запуске считывает содержимое файла с /sdcard/ и устанавливает время из него, а затем через 10 минут и потом каждый час обновляет файл. Т.о. при отсутствии синхронизации при следующем запуске будет установлено время незадолго перед последним отключением. Т.е. сразу после загрузки - 01.01.2015, через несколько секунд - время перед последним выключением, затем, после получения пакета GPRMC с GPS, - точное время. |