我想用C代码而不是"hwclock"外壳命令来传递从我的实时时钟读取的信息。
然而,当我使用i2cdetect时,它显示0x68(这是我的实时时钟从地址)的状态为"UU",这意味着“探测被跳过了,因为这个地址当前正被驱动程序使用”。在我尝试了i2cget之后,它给出的结果是“可以将地址设置为0x68:设备或资源忙”。
所以我在想,如果我的Linux内核中有一些问题,会一直强制从我的RTC中读取,或者其他一些原因。
谢谢
发布于 2013-07-24 22:17:56
我假设您使用的是DS-1307RTC或其变体之一(由于0x68从属地址)。检查其驱动程序是否通过以下方式加载:
$ lsmod | grep rtc如果您在上述命令的输出中看到rtc_ds1307条目(如此-> rtc_ds1307 17394 0 ),则此驱动程序可能持有该地址。
如果驱动程序已加载到系统中,则使用以下命令卸载它
$ rmmod rtc-ds1307编辑:
(根据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的驱动程序。
3)使用rmmod rtc_ds1307卸载驱动。注意:只有当驱动程序是可加载的内核模块时,这才能起作用,否则您将看到以下错误:
ERROR: Module rtc_ds1307 does not exist in /proc/modules在这种情况下,您将不得不在禁用/模块化驱动程序的情况下重新编译内核。
发布于 2016-10-17 20:15:07
0x68正被某些驱动程序使用,在内核源代码中禁用该驱动程序,然后重新编译源代码。
https://stackoverflow.com/questions/17821063
复制相似问题