大福ブログ

【大福ブログ】は、独断と思い込みで厳選?した商品や特ダネ情報などをご紹介いたします。
また、優良商品もご推薦しちゃいま〜す!
まっ見てやってください。

■エコ・ネット(ECO-NET)
ブログの編集機能が新しくなりました! 直接表示されるイメージを編集できます。
2008 年
09
 123456
78910111213
14151617181920
21222324252627
282930
=全てのカテゴリ=
  健康はまず食品から
  気の利いたグッズたち
  安心生活サポート隊
  お気に入りの逸品
  これからのアウトドア用品
  アフィリエイトネットワーク
  大福な日記
== 未分類 ==
*** 投稿メンバー選択***

■ソフト工房ポップキッズ

 2691889
     

もったいない不用品をリサイクル、掘り出し物があるかもしれないフリーマーケット「濱童夢フリーマーケット」
携帯から簡単予約管理ができるアイリス
※このブログのQRコード※

 大福な日記 - 2008.09.07 -
SH7706LANのshLinuxでのRTCについて
SH7706LAN上で稼動するshLinuxを使っていて、ソフトウェアクロックがハードウェアクロックとうまくシンクロが取れずマシン起動時にずれてしまう問題を何とかしようと奮闘してます。

要は、ソフトウェアクロックがハードウェアクロックの時間をうまくシンクロできればと簡単に考えていたら、結局RTCがkernelに実装されていないためにhwclockでシンクロできないことが解り、いろいろと奮闘する中rtcのドライバモジュールを作成してドライバとして組み込むこととなり、勉強もかねて作成してみました。

ドライバ名をa_rtcとして作成しました。
内容的には、以下のシンプル機能のみを実装してみました。
1.ドライバーのopen
2.read
  ハードウェアクロックの日時を取得してbufferに 2008/09/07 12:36:00 の文字列の形で返す。
3.write
  2008/09/07 12:36:00の形式の文字列を受け取りハードウェアクロックに設定し、クロックを再起動する。
4.init
5.remove
これだけ。

取り合えずソースは公開しましょう。
・A_RTC.LZHのソース

だらだらなソースですが、それほど大きくないので仕組みを勉強するには結構解りやすいかもしれません。

【コンパイル方法】
Makefile,a_rtc.cを任意のところに展開してmakeするだけです。
(※Makefileの中のKDIRは、開発ホスト環境のlinux-kernelの場所に合わせます。)

SH7706LANへの実装は、コンパイルで作成されたa_rtc.koを実機の/proc/a_rtc等のディレクトリを作成して、その中に入れます。

insmod /proc/a_rtc/a_rtc.ko
mknod /dev/a_rtc c 192 0
でドライバの登録をします。

【hwclockの代替コマンド】
また、hwclockの代わりにhwclkを作成してhwclock -w やhwclock -s の代わりになるようなコマンドを作成しました。
要は、シンクロが取れればいいのでこの機能のみです。

【実行結果】
取り合えず、時間のシンクロはうまく取れるようになりましたので、/usr/sbinの中に入れました。

私は、/etc/rc.d/rc.systemの中に
insmod /proc/a_rtc.ko
mknod /dev/a_rtc c 192 0
/usr/sbin/hwclk -s

として、ボード起動時にハードウェアクロックとシンクロさせるようにしました。


【課題】
hwclk -s を実行させてしばらくしてdateコマンドで確認すると、少しずつ時間がずれて行くことが解りました。
hwclkをオプションをつけないで実行すると現在のソフトウェクロック値のハードウェアクロック値を表示するようにして確認すると、ハードウェアクロックは正常にカウントしていることが解りました。


   
(0)   (0)   この記事にコメントを投稿します

[ 1 〜 1 の記事を表示 ( 1 記事中 ) ]