首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌入式Linux中,为什么i2cdetect总是在我的实时时钟上给UU?

在嵌入式Linux中,为什么i2cdetect总是在我的实时时钟上给UU?
EN

Stack Overflow用户
提问于 2013-07-24 05:04:56
回答 2查看 21.1K关注 0票数 9

我想用C代码而不是"hwclock"外壳命令来传递从我的实时时钟读取的信息。

然而,当我使用i2cdetect时,它显示0x68(这是我的实时时钟从地址)的状态为"UU",这意味着“探测被跳过了,因为这个地址当前正被驱动程序使用”。在我尝试了i2cget之后,它给出的结果是“可以将地址设置为0x68:设备或资源忙”。

所以我在想,如果我的Linux内核中有一些问题,会一直强制从我的RTC中读取,或者其他一些原因。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-07-24 22:17:56

我假设您使用的是DS-1307RTC或其变体之一(由于0x68从属地址)。检查其驱动程序是否通过以下方式加载:

代码语言:javascript
复制
$ lsmod | grep rtc

如果您在上述命令的输出中看到rtc_ds1307条目(如此-> rtc_ds1307 17394 0 ),则此驱动程序可能持有该地址。

如果驱动程序已加载到系统中,则使用以下命令卸载它

代码语言:javascript
复制
$ rmmod rtc-ds1307

编辑:

(根据OP的反馈)请执行以下操作

1) cat /sys/bus/i2c/devices/3-0068/modalias。这将为您提供使此设备繁忙的内核驱动程序的名称。在冒号(:)OP的命令输出告诉我们其ds1337之后,复制驱动程序名称

2)使用以下命令检查ds1337是否为驱动程序的别名

代码语言:javascript
复制
grep ds1337 /lib/modules/`uname -r`/modules.alias

希望您能得到以下输出

代码语言:javascript
复制
alias i2c:ds1337 rtc_ds1307

这证实了我们的假设,即rtc_ds1307实际上是持有I2C地址0x68的驱动程序。

3)使用rmmod rtc_ds1307卸载驱动。注意:只有当驱动程序是可加载的内核模块时,这才能起作用,否则您将看到以下错误:

代码语言:javascript
复制
ERROR: Module rtc_ds1307 does not exist in /proc/modules

在这种情况下,您将不得不在禁用/模块化驱动程序的情况下重新编译内核。

票数 10
EN

Stack Overflow用户

发布于 2016-10-17 20:15:07

0x68正被某些驱动程序使用,在内核源代码中禁用该驱动程序,然后重新编译源代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17821063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档