首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BalenaOS使用Raspberry Pi计算模块4 IO板的实时时钟在容器内

BalenaOS使用Raspberry Pi计算模块4 IO板的实时时钟在容器内
EN

Stack Overflow用户
提问于 2022-04-05 17:35:11
回答 1查看 221关注 0票数 0

我试图使用CM4 IO板的实时时钟(RTC)从一个码头容器中保存日期时间更改,因此每当设备重新启动时,它都会记住新设置的日期时间。(默认情况下,它通过编年史同步。)我可以使用date --set="<datetime string>"更新系统的日期时间,但是在重新启动时,它会重新同步并重写以前设置的日期时间。

要启用OI板的RTC,您需要根据IO板的数据表设置BALENA_HOST_CONFIG_dtparam="i2c_vc=on":我已经完成了这一操作(添加了车队范围的配置),之后我还将i2c-tools添加到了要在其中使用的容器中,这允许使用i2cdetect命令。它可以使用以下命令检测RTC (插入错误的电池):i2cdetect -y 10 (RTC位于i2c-10上),该命令显示地址0x51上的RTC设备,如数据表所述:

代码语言:javascript
复制
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- 0c -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 2f 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

虽然在我看来,这是在1x51上,所以可能有问题吗?但是,这个地址似乎是正确的,因为我在运行i2cget -y 10 0x51时得到了以下结果:0x00。然而,当我运行i2cget -y 10 1x51时,我得到了:Error: Chip address is not a number!。为了完整起见,这就是我运行时得到的(使用中的其他i2c地址,不知道用于什么):

  • i2cget -y 10 0x0c0x5f
  • i2cget -y 10 0x2f0x00

这就是我在运行i2cdetect -l时得到的结果

代码语言:javascript
复制
i2c-10  i2c         i2c-22-mux (chan_id 1)              I2C adapter
i2c-0   i2c         i2c-22-mux (chan_id 0)              I2C adapter
i2c-22  i2c         bcm2835 (i2c@7e205000)              I2C adapter

在运行ls -hal /dev/i2c* (容器内和主机操作系统上相同的结果)时也反映了这一点:

代码语言:javascript
复制
crw-rw---- 1 root i2c 89,  0 Apr  5 12:49 /dev/i2c-0
crw-rw---- 1 root i2c 89, 10 Apr  5 12:49 /dev/i2c-10
crw-rw---- 1 root i2c 89, 22 Apr  5 12:49 /dev/i2c-22

这是我运行dmesg | grep -E '(i2c|rtc)' | head -50时的输出(容器内和主机操作系统上的结果相同):

代码语言:javascript
复制
[    6.492981] i2c i2c-22: Added multiplexed i2c bus 0
[    6.493115] i2c i2c-22: Added multiplexed i2c bus 10
[    9.378968] i2c /dev entries driver

到目前为止似乎还不错。

根据在Raspberry Pi论坛上的帖子,你还需要:

  1. echo pcf85063 0x51 >/sys/class/i2c-adapter/i2c-10/new_device
  2. modprobe rtc-pcf85063

我已经在我的对接设置中添加了这两种东西(并且还尝试了同一篇文章中列出的一些变体),但是我认为我甚至不需要这样做,因为我可以在设置_dtparam之后立即检测它。不管是做了还是不做,似乎都没有什么区别。

通常情况下,当一切正常工作时,您应该能够设置、更新、.RTC使用hwclock命令,但每当我运行该命令时,都会收到以下消息:

代码语言:javascript
复制
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.

这是我运行hwclock --verbose时的输出

代码语言:javascript
复制
hwclock from util-linux 2.36.1
System Time: 1649177573.560553
Trying to open: /dev/rtc0
Trying to open: /dev/rtc
Trying to open: /dev/misc/rtc
No usable clock interface found.
hwclock: Cannot access the Hardware Clock via any known method.

当我在主机操作系统上运行timedatectl时,我得到:

代码语言:javascript
复制
               Local time: Tue 2022-04-05 17:04:37 UTC
           Universal time: Tue 2022-04-05 17:04:37 UTC
                 RTC time: n/a
                Time zone: n/a (UTC, +0000)
System clock synchronized: yes
              NTP service: n/a
          RTC in local TZ: no

这似乎表明RTC不起作用。

当在容器本身内运行此命令时,我得到:

代码语言:javascript
复制
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

我错过了什么或者做错了什么?这是权限/用户组问题吗(因为我试图在容器中执行此操作)?是不是配置错误了?我是不是错过了一些额外的设置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-13 13:08:59

我还在巴莱纳论坛上发布了同样的问题,我所要做的就是简单地将BALENA_HOST_CONFIG_dtoverlay设置为"i2c-rtc,pcf85063a,i2c_csi_dsi,addr=0x51"

额外信息:在CM4 IO板数据表 (第2.13节)中,它表明您只需要将BALENA_HOST_CONFIG_dtparam设置为"i2c_vc=on",但在上面设置dtoverlay时不需要这样做。我已经测试过和没有这种测试,并没有发现任何区别。

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

https://stackoverflow.com/questions/71756089

复制
相关文章

相似问题

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