[Armadillo:04461] Re: Armadillo-9のDebianの起動について
Yasushi SHOJI
email@hidden
2009年 8月 4日 (火) 15:31:41 JST
At Mon, 27 Jul 2009 14:28:05 +0900,
suzuki wrote:
>
> >> mke2fs -O -filetype /dev/hdc1
> >>
> >> を、
> >>
> >> mke2fs -j /dev/hdc1
> >>
> >> にし、ext3にする事で、問題なく起動しました。
> >
> > mke2fs -O -filetype /dev/hdc1
> >
> > 上記コマンドでフォーマットをやり直しても問題があったために、ext3にした
> > ということでしょうか? もしそうであれば教えてください。
>
> そうです。
調べてみました。
結論から言うと、armadillo-9の RTCが現在時間ではなく、ドライバの初期化
時間である 2000年にセットされていませんか? または、時間を正しくセット
して howto を手順通りに行なうと、エラーにならないと思いますが、どうで
すか?
ファイルシステムは、たぶん PCで作成されていると思います。そこで作成さ
れたファイルシステムは、PCのシステム時間、つまり現在時間が書き込まれま
す。しかし、armadillo-9に CFを接続して起動すると、fsckの下記のコードの
部分でチェックが動きます。
最近の新しい e2fsckは下記のようになっていますが、
} else if (fs->super->s_checkinterval &&
((ctx->now - lastcheck) >=
((time_t) fs->super->s_checkinterval))) {
reason = _(" has gone %u days without being checked");
reason_arg = (ctx->now - fs->super->s_lastcheck)/(3600*24);
if (batt && ((ctx->now - fs->super->s_lastcheck) <
fs->super->s_checkinterval*2))
reason = 0;
}
Armadilloが現在採用している Debian etchに入っている e2fsck は、
e2fsprogs 1.40相当なので
http://git.kernel.org/?p=fs/ext2/e2fsprogs.git;a=commitdiff;h=2acad6b4895a0e218f9d9eece1ade23c2cf4ffc7#patch5
にある変更が入っていないようです。そのため
} else if (fs->super->s_checkinterval &&
((ctx->now - fs->super->s_lastcheck) >=
fs->super->s_checkinterval)) {
reason = _(" has gone %u days without being checked");
reason_arg = (ctx->now - fs->super->s_lastcheck)/(3600*24);
if (batt && ((ctx->now - fs->super->s_lastcheck) <
fs->super->s_checkinterval*2))
reason = 0;
}
となっています。ソースコードは↓にあります
http://ftp.de.debian.org/debian/pool/main/e/e2fsprogs/e2fsprogs_1.39+1.40-WIP-2006.11.14+dfsg.orig.tar.gz
http://ftp.de.debian.org/debian/pool/main/e/e2fsprogs/e2fsprogs_1.39+1.40-WIP-2006.11.14+dfsg-2etch1.diff.gz
ここで、ctx->now が s_lastcheckより古いと 「マイナスの signed int >=
プラスの UNSIGNED int」という比較になってしまいます。(time_t は、
signed intです) このため、unsigned による比較になり、本来であれば小さ
いはずの「マイナスの signed int」が「プラスの UNSIGNED int」より大きい
と判断され、間違ったコードパスに入るようです。
なにか勘違いしているところがあれば、ツッコミお願いします。
--
yashi
armadillo メーリングリストの案内