最近のNetBSD
システムクロックのお話。
今やってる製品は設定をブラウザを通して行うようになっているのですが、その中に時刻とタイムゾーンの設定があるのです。これらが設定された時には当然NetBSDにも反映させなきゃいけない訳ですが、この辺をどうやったらいいモンかといろいろ調べていたら<b>gettimeofday()</b>および、<b>settimeofday()</b><font color=#dcdcdc>だったよな(^^;</font>なんてのを使うんだなぁってな所まではたどり着いたものの、この関数で使うtimezoneと言う構造体は実はobsoluteだったと言う・・・(@_@;) NetBSD的にはタイムゾーンは<b>/etc/localtime</b>で管理している訳でこれとの辻褄合わせも必要になる訳ですが、この辺どうやったらいいもんかな、と・・・ まぁ設定のウェブページ自体が日本語だから日本語版って事で勝手にJSTにしてしまって、内部的に関してしまおうってことも出来なくも無い訳で、検討の余地はあるものの<font color=SeaGreen size=+1>まぁどうって事はない話。</font>
時刻の方はどうやってるかと調べていたら、設定された時に<b>sh_rtc_set()[sh3/clock.c]</b>でSH4内臓のRTCに保存し、起動時には<b>sh_rtc_get()[sh3/clock.c]</b>で再度読み込んでいる事が判明。<font color=SeaGreen>なんだこのままでいいじゃん</font>と一瞬安堵したものの、考えてみたらこのRTC。
<font color=FireBrick size=+1>電源切ったら止まっちゃうじゃん!(__)</font>
幸いな事に今回のハードではSRAMに電池バックアップ付きのRTCが内蔵されているので、こっちを使うようにソースを修正。再コンパイルして動作確認し、事無きを得ました(^^;
あ、注意事項として、RTCにはGMTでセットされるので、タイムゾーンを考慮してゴニョゴニョやってあげないと時刻がずれてしまいます。
もう一つ懸案事項だったMACアドレスの取得方法は<b>ifconfig</b>のソースを眺めていたら何となく発見(^^; <b>address:</b>を表示しているところから逆にたどって行けば必然的に必要な処理が見えてくるので、そこを抜き出してうまい事やればなんとかなりそうな雰囲気。