Хотите поблагодарить автора блога - жмите здесь !
1 2 0
1 2 0

Нажмите на рекламный баннер выше, если хотите поблагодарить автора блога !
Написание каждой статьи заняло в сотни раз больше времени, чем один клик.

пятница, июля 12, 2013

Точная синхронизация времени на Android для ускореня холодного старта GPS, ну и просто точное время

Этого вопроса я уже касался ранее, в заметке Android калибровка GPS, ускорение захвата спутников после холодного старта, повышение точности GPS по сути до возможного предела "железа". Повторюсь коротко. Методы, которые использует Android для синхронизации времени, или очень неточны (по сети оператора - в лучшем случае ошибка будет несколько секунд, что даст замедление старта GPS в 2-3 раза), или малоприемлемы - по GPS спутникам, это колоссальный расход энергии, да и не будет работать нигде, кроме как на улице. Первым вариантом решения вопроса была программа ClockSync (см пункт 1 заметки, ссылка на которую выше). Но можно получить еще более высокую точность, и обойтись без установки дополнительных программ, если у Вас рутованный телефон и на нем установлена BusyBox.

Решением проблемы станет "родной" линуховый ntpd. К сожалению в BusyBox входит очень упрощенный его вариант (родной линуховый позволил бы обеспечить точность в десятки миллисекунд в сутки даже когда нет возможности сделать синхронизацию по сети, за счет "коррекции дрифта"), так что будем использовать что есть.

 Запускаем root explorer. Заходим с его помощью в каталог /system/etc/init.d (если у Вас init.d каталог еще не создан - создайте, и не забудьте нажать кнопочку справа сверху, разрешающую запись - иначе ничего не выйдет).
Создаем новый файл, и называем его 07userini.
Меняем его разрешения, через меню root explorer, вызываемое "по долгому клику" на файл (по короткому будет вызвано другое - оно нам не нужно). Ставим галочки "чтение" для всех, "запись" оставляем только для владельца, и "выполнение" тоже для всех.
Снова по длинному клику вызываем меню, и выбираем "Открыть в текстовом редакторе".
Теперь вписываем само содержание файла запуска:
----------
#!/system/bin/sh
/system/bin/logwrapper  /system/bin/ntpd -N -p 92.249.120.2 -p 78.152.160.1

----------

Жмем кнопку меню, потом "Записать и выйти".
Удалите образовавшийся файл с тем же именем, но с расширением .bak

Теперь можно проверить что все сделали правильно. (а если уверены что все сделали правильно - можете не проверять). Для проверки нам понадобится терминал. Запускаем его, заходим в каталог cd /etc/system/init.d, запускаем комманду ./07userini
Она должна отработать, не выдав никаких сообщений об ошибках.
Теперь набираем комманду "ps | grep ntp", enter.
В ответ должны увидеть строку, в конце которой будет: /system/xbin/ntpd

Все готово - можно перезагружаться. 

Да, с ядром ThunderZap, после перезагрузки, может возникнуть завис. Подождите минутки 3, если само не уйдет в повторную перезагрузку - выньте батарею, и снова включите. Оно снова запустится, потом подумает с минуту, перезагрузится. После этого все точно готово. Указанные приколы с "зависом" - особенности ThunderZap с включенным SWAPом,  могут возникать после любого редактирования системных параметров и перезагрузки, и не имеют никакого отношения к данному конкретному вопросу.

*Предложенный метод запуска подходит только если у Вас "кастомное" ядро, поддерживающее init.d. Если у Вас стоковое - найдите на Маркете какое нить приложение, которое запускает произвольные программы после старта системы, и используйте его для запуска демона.

PS Циферки в конце комманды, после комманды -p, в моем случае -p 92.249.120.2 -p 78.152.160.1 - это IP адреса ближайших NTP серверов. Можно вписать пул, чтобы система сама выбирала, но тогда точность упадет. Как выбрать подходящий конкретно для Вашей страны и региона NTP сервер, я описал ранее в заметке http://vyacheslav.blogspot.com/2013/07/android-gps-gps.html#more, см П1. Те что использовал я, дают наилучший результат для Киева.

 PPS Эта программа займет в памяти гдето 150 килобайт, или 0,15 мегабайта. Для сравнения, типичная программа "Android" зангимает от 10ти мегабайт и выше. Так что этим можно вообще пренебречь. Время когда проверять, программа выбирает автоматически, исходя из статистики предидущих коррекций, и вычисляя какой уход часов конкретно у Вашего аппарата, и исходя из этого меняя частоту синхронизации. Паеты махонькие, так что трафика будет брать совсем немного.

PPPS Впечатление от работы ntpd. очень положительные. Если ранее, при использовании ClockSync, я изредка, обнаруживал что расхождение достигает 250 миллисекунд, и это через 20 минут после проведенной ClockSync синхронизации, то сейчас количество таких "казусов" снизилось раз в 10. Плюс отсутствие периодического запуска "нативной Андроидной" ClockSync, "кушающей" мегабайты памяти.

Комментариев нет:

Отправить комментарий

Закрыть окно X
Пожалуйста, потратьте несколько секунд на поддержку блога и его автора
Нажмите на рекламную ссылку: Рекламная ссылка для поддержки блога, или на баннер вверху справа страницы.