This is local cache of http://www.yamasita.jp/cgi-bin/BBS/eztree.cgi?action=thread_view&view_thread=2090 at Sun Jan 16 18:57:12 JST 2005.

Link Station/玄箱 Hack BBS

[全部のスレッド一覧][新規投稿][記事の削除・変更] [Home Page]

返信投稿はタイトルのリンクをクリックして下さい
スレッド【No.2090】の中の記事をすべて表示しています

【No.2090】のスレッド
04/12/30(木) 21:37:51 投稿者[Junker] [No.2090]のスレッド内
【No.2090】 タイトル[時計の補正] この記事がスレッドの最初です
ntpd で synchronization lost しない様に adjtimex の
tick値を計算するスクリプトを見よう見まねで作ってみました。

再起動ごとに手作業で最適値を探したところ、decrementer freqency が
clock の設計値に対して 0.01% 近辺で tick値が 1 変動している様でした。

そこで、decrementer freqency のズレ分で、clock設計値時の tick値に
補正を掛ける様、以下の計算式にしました。(少数以下四捨五入)

int((( decrementer freqency / clock設計値 ) * 10076 ) + 0.5 )

当方では HG-LAN 黒箱 共に時間のズレがほぼ最小値になっています。
                    ( ntpd 非動作時 )
ntpd 動作時の lost は無くなりました。

スクリプトは次のコメントに記載します。

スクリプト実行時に、使用機種に合わせたパラメータが必要です。
  HG-LAN KURO-BOX/HG → HG
  H-LAN  KURO-BOX     → KURO

  起動例: /usr/sbin/adjtick.sh KURO

05/01/03(月) 02:40:25 投稿者[くんたん] [No.2090]のスレッド内
【No.2097】 タイトル[Re: 時計の補正] 【No.2090】に対する返信
こんにちは、

便利ですね、私のは玄箱ですが、一発でadjtimex のtick値が
決まります、この計算式を導き出すのは「至難の業」だったん
じゃないのでしょうか?

頭が、下がります。

わたしは、ずっと前のほうのスレッドに書いてあった、
サービスみたいに起動する方法のスクリプトに
組み込ませていただきました。

05/01/03(月) 20:23:55 投稿者[Junker] [No.2090]のスレッド内
【No.2100】 タイトル[Re: 時計の補正] 【No.2097】に対する返信
一番苦労したのは、補正率を算出するためのサンプリングですね。
tick 1個探すのに40〜60分。後半は30分くらいですが
サンプル数20個ほど。あとは計算だけですから。
計算式は3種類くらい作ったかな?

当初 tick_base は、計算から 10073 としたのですが、
たつやさんのページ http://linkstation.yi.org/ のBBSを参考に
10076 とする事でより正確になりました。 m(_ _)m

サービスの設定で一番簡単なのは、ntpdの起動スクリプトの
あたまに組み込んで実行してあげる事です。
ntpdを使えば freq の補正をしてくれるので、
もっと時計が正確になりますから。

04/12/30(木) 21:42:49 投稿者[Junker] [No.2090]のスレッド内
【No.2091】 タイトル[補正用スクリプト] 【No.2090】に対する返信
編集用のスペースが圧縮されて表示されるので、
見やすい様に編集して下さい。

#!/bin/sh
#
## name:adjtick.sh
##
## adjust tick for LinkStation & KURO-BOX
##
## warning: this script use "PPC" platform only
## Don't support HD-LAN series
## this script need "adjtimex"
##
## by Junker
#
#

case $1 in
"HG") tmp_freq_base=32.768000
tmp_tick_base=10076 ;;

"KURO") tmp_freq_base=24.576000
tmp_tick_base=10076 ;;

*) echo "SET type-code HG or KURO "
exit 0 ;;
esac


tmp_freq=`cat /var/log/dmesg | grep "decrementer frequency" | awk '{print $4}'`

tmp_tick=`awk < /dev/null 'END {t=int(((y/x)*z)+0.5);printf("%d\n",t);}' \
x=$tmp_freq_base y=$tmp_freq z=$tmp_tick_base`

echo " freq_base tick_base freq tick"
echo " " $tmp_freq_base " " $tmp_tick_base " " $tmp_freq " " $tmp_tick

adjtimex "-t" $tmp_tick

exit 0


05/01/15(土) 15:00:43 投稿者[よし ] [No.2090]のスレッド内
【No.2147】 タイトル[Re: 補正用スクリプト] 【No.2091】に対する返信
掲示板を拝見させて頂きました。

実は、補正スクリプトを使用して時計の補正を行おうとしましたが
「Command not found」になりました。

良かったら補正スクリプトの送付と導入方法など教えて頂けませんでしょうか?

まだまだ、初心者なので導入方法など詳しく教えて頂きたいです。
宜しくお願い致します。