启动期间的 RaspberryPi 日期和时间

启动期间的 RaspberryPi 日期和时间

我目前想知道 Raspbian 在 RaspbianPI 上启动期间从哪里获取“当前”日期和时间。

系统有一个通过 I2C 连接的 RTC 设备。来自 RTC 的日期/时间在引导期间由 systemd 服务单元读取,从而产生正确的日期/时间。

此外,还配置了 NTP 客户端。

fake-hwclock软件包已安装但在 systemd 中停用。

当 Raspbian 启动时,它会生成/var/log/syslog带有日期/时间的日志消息Nov 3 ...。我期望它 - 正如 roaima 所写 -Jan 1 1970但事实并非如此......

示例消息位于/var/log/syslog

Nov  3 18:16:51 raspberrypi kernel: [    0.000000] Booting Linux on physical CPU 0xf00

当 systemd 到达运行 RTC 脚本的位置(RTC 设备通过 I2C 连接)时,它会正确设置日期和时间:

Oct 19 13:45:50 raspberrypi systemd[1]: Time has been changed

所以,问题是:那个奇怪的Nov 3日期存储在哪里?!它是否存储在文件中的某个位置?它是硬编码到内核中的吗?

答案1

Raspberry Pi 机器没有电池支持的 RTC,因此当它们通电时,时钟从零开始(UTC 时间 1970 年 1 月 1 日午夜)。

为了在启动时获得近似的真实时间,在访问任何外部时间源之前,该fake-hwclock软件包提供了一种将时钟设置为关机时保存的值的方法。在连接到 Internet 的计算机上,NTP 可以在设备启动后更快、更准确地设置时钟。

答案2

我也有过同样的经历,升级到 Stretch 后,带有 RTC 和运行 NTP 的 RPi 有时不使用正确的日期/时间。

不幸的是,我无法告诉你 Stretch 中的 3 Nov 2016 17:16:45 来自哪里,但我现在我想我知道在什么情况下会发生这种情况。

如果我比较好的和“重新启动后的错误日期/时间”情况,那么当 WLAN 连接可用时,2016 年 11 月 3 日 17:16:45 似乎没有纠正为正确的时间(来自 RTC 或 NTP), RPi 已连接,但由于某种原因无法访问互联网。

由于我对 Linux 东西很陌生,我不知道如何证明这一点。我知道我没有回答这个问题,但我觉得这可能有用。

答案3

我在 Raspberry Pi 4 设备上运行 Ubuntu 22.04,但我遇到了类似的行为(尽管预定义的日期与我的情况不同)。以下是我的发现:

  1. 如前所述,fake-hwclock这是 RTC 数据的第一个明显来源。

  2. 有名为 initramfs 的钩子fixrtc和相应的内核命令行参数。如果设置了该参数,则早期用户空间挂钩会检查根文件系统的最后安装和创建时间(通过获取dumpe2fs)。更大的时间用于设置时钟。

  3. 如果没有fixrtc脚本和/或未fixrtc设置参数。 Systemd 开始发挥作用,并使用它的构建时间戳来设置时钟。现代 Debian/Ubuntu 打包脚本从最新debian/changelog条目中提取此构建时间戳。

  4. 我无法找到使用构建的 systemd 二进制文件来显示此构建时间戳的方法。但是,可以使用自定义时间戳来覆盖嵌入的时间戳。做到这一点的方法是创建/触摸名为/usr/lib/clock-epoch.以防万一,文件的修改时间将作为 RTC 数据的来源。

相关内容