[Armadillo:08886] Re: flatfsd のバグ?
Yasuhisa Nakamura
email@hidden
2013年 6月 1日 (土) 04:09:44 JST
中村です。
ズレの大きさが違いますが、再現できました。
こんな感じで、(727-5)秒ずれました。
5: flatfsd -r ... flatfsd: restore fs+ from partition 0, tstamp=1
flatfsd: Created 2 configuration files (0 bytes)
real 12m 1.35s
user 0m 0.01s
sys 0m 0.01s
done (727: 0)
make config で、
CONFIG_USER_FLATFSD_HAS_RTC
をOFFにしてますね?
デフォルト(アットマークテクノ社提供状態)から変更された部分は、
質問時に動作(ビルド)条件として、教えていただかないと・・・
HAS_RTCでないとき、configフラッシュに時刻に関する
情報(保存時の現在時刻)を書き込んでおき、
flatfsd -r 実行時に保存されている値をシステム時計に
セットしてます。
#この仕組みが時刻保存と復帰のためにほんとに役に立つのか
#疑問ですが・・・
保存処理
int flat_savefs(int version)
{
...
#ifndef HAS_RTC
{
/* Create a special config file to store the current time. */
FILE *hfile;
if ((hfile = fopen(FLATFSD_CONFIG, "w")) == NULL)
return ERROR_CODE();
fprintf(hfile, "time %ld\n", time(NULL));
/* Ignore errors! */
fflush(hfile);
fclose(hfile);
}
#endif
...
}
読み出しとシステム時計設定処理
static int flat3_restorefsoffset(off_t offset, int dowrite)
{
...
if (strcmp(filename, FLATFSD_CONFIG) == 0) {
...
#ifndef HAS_RTC
if (dowrite)
parseconfig(confbuf);
#endif
...
}
#ifndef HAS_RTC
static void parseconfig(char *buf)
{
char *confline, *confdata;
confline = strtok(buf, "\n");
while (confline) {
confdata = strchr(confline, ' ');
if (confdata) {
*confdata = '\0';
confdata++;
if (!strcmp(confline, "time")) {
time_t t;
t = atol(confdata);
if (t > time(NULL))
stime(&t);
}
}
confline = strtok(NULL, "\n");
}
}
#endif
FLATFSD_CONFIGといのは".flatfsd"というファイルで、
このファイルはconfigフラッシュには存在しますが、
/etc/configにはコピーしないようになっています。
もし、このファイルを見えるようにしたいのならば、
ソース中の何か所かにある
if ((strcmp(dp->d_name, ".") == 0) ||
(strcmp(dp->d_name, "..") == 0) ||
(strcmp(dp->d_name, FLATFSD_CONFIG) == 0))
continue;
という部分をいじってあげればいいのではないかと思います。
--
なかむら
armadillo メーリングリストの案内