2013-07-23 140 views
7

"hwclock"シェルコマンドではなく、CコードでRTCからの読み取りを通信したいと思います。i2cdetectは組み込みLinuxのRTCで常にUUを返します

私はi2cdetectを使用する場合しかし、それは(私のRTCのスレーブ・アドレスである)0x68を示しては意味し、状況"UU"を持っている「プロービングこのアドレスがドライバによって現在使用されているので、スキップされました」。そして、私がi2cgetを試した後、そのアドレスが "0x68:デバイスまたはリソースがビジーである"にアドレスを設定することができました。

Linuxカーネルに何か問題がある場合は、RTCから常に読み込むようにするか、その他の理由が考えられます。

おかげ

+0

'lsmod'の出力は何ですか? – microMolvi

答えて

7

私はあなたがDS-1307(理由は0x68スレーブアドレスの)RTC、またはその変種のいずれかを使用していると仮定しています。そのドライバがによってロードされているか確認してください:あなたは(このような - >rtc_ds1307 17394 0)rtc_ds1307のエントリ、見られた場合は

$ lsmod | grep rtc 

上記のコマンドの出力では、このドライバは、そのアドレスのホールドにあるかもしれません。

ドライバがシステムにロードされている場合は、

$ rmmod rtc-ds1307 

EDITを使用して、それをアンロード:

(OPのフィードバックを踏まえて、)次

1)cat /sys/bus/i2c/devices/3-0068/modaliasを行ってください。これにより、このデバイスをビジー状態にしているカーネルドライバの名前が表示されます。コロンの後にドライバ名をコピーします(:)コマンドの OPの出力がそのDS1337

2ことを教えてくれる)DS1337は、ドライバの別名であるかどうかをチェックし、あなたがうまくいけば、

grep ds1337 /lib/modules/`uname -r`/modules.alias 

を使用して次の出力

alias i2c:ds1337 rtc_ds1307 

を取得しますこれはrtc_ds1307は、I2Cアドレス0x68のホールドでInfactはドライバーであることを私たちの前提を確認します。

3)rmmod rtc_ds1307を使用してドライバをアンロードします。 注:/モジュール化無効になっているドライバで再びカーネルを再コンパイルする必要がありますその場合

ERROR: Module rtc_ds1307 does not exist in /proc/modules 

:ドライバがロード可能なカーネルモジュールである場合にのみそれ以外の場合は次のエラーが表示され、動作します。

+0

コマンドlsmodの出力はありません。 grep rtc。 – henryyao

+0

hmm .. 'ls/sys/bus/i2c/devices'の出力を与えることができます – microMolvi

+1

lsコマンドは3-0068(3はバス番号)と他のデバイスを与えます。そしてbtw、私は私のCコードからioctl()関数を使ってRTCから読み込むことができます。 i2ctoolsが読むことができないので変です。 – henryyao

0

0x68がドライバによって使用されています。 そのドライバをカーネルソースコードで無効にし、ソースコードを再コンパイルします。

関連する問題