我有一个 buildroot 生成的内核 (3.6.11) 和在 x86 设备上运行的根文件系统。它使用 busybox,我正在尝试使用 设置 BIOS 硬件时钟hwclock
。每当我调用时都会收到此错误hwclock
:
can't open '/dev/misc/rtc': No such file or directory
我理解这一点是因为我的系统上只有一个/dev/rtc
设备文件。但是,使用strace
我看到hwclock
已经尝试打开/dev/rtc
并失败并显示消息
open("/dev/rtc",O_READONLY|O_LARGEFILE) = -1 ENODEV (No such device)
/dev/rtcN
在检查内核配置的设备驱动程序部分下的实时时钟的内核配置后,我可以看到我已启用(字符设备)和/proc/driver/rtc
(rtc0 的 procfs)选项。我也只选择了 PC 风格“CMOS”平台 RTC 驱动程序。但是,在此处的帮助部分下,我阅读了以下内容:
在此选择“是”即可获得对每台 PC 或基于 ACPI 的系统以及其他一些主板中的实时时钟的直接支持。具体来说就是原来的MC146818,兼容PC南桥、DS12887或M48T86、一些多功能或LPC总线芯片等。
您的系统需要定义该驱动程序使用的平台设备,否则将无法访问它
我很困惑为什么我无法打开“/dev/rtc”文件。它存在并且当我调用时我得到输出
cat /proc/driver/rtc
我还需要做些什么来注册设备吗?我正在考虑也许将驱动程序更改为模块并进行insmod
启动后操作,但我不知道这是否是一个好主意。任何人都可以建议我如何解决此问题或获取有关问题所在的更多详细信息吗?
编辑通过在线阅读,我执行dmesg | grep -i rtc
并获得了以下输出:
[ ... ] RTC time: 16:01:07, date 09/24/13
[ ... ] rtc_cmos 00:02: RTC can wake from S4
[ ... ] rtc_cmos 00:02: rtc core: registered rtc_cmos as rtc0
[ ... ] rtc0: alarms up to one year, y3k, 114 bytes nvram
这让我想知道为什么我没有/dev/rtc0
.我正在使用静态设备表,buildroot
所以我是否可能需要更改它以提供/dev/rtc0
设备节点,因为我没有使用udev
?
答案1
我可以解释一些症状,但不能告诉您如何上班hwclock
。
对于这个词的含义常常存在一些混淆设备在 UNIX 环境中。它可能意味着:
- 字符设备或块设备类型的文件系统条目。
- 该文件系统节点背后的内核实体。
- 连接到硬件总线的逻辑实体。
- 物理上独立的硬件组件。
在消息“没有这样的设备”中,这个词设备指的是内核实体。似乎没有内核实体已注册该设备/dev/rtc
。根据 dmesg 输出,CMOS RTC 驱动程序存在于内核中,并且已找到 RTC 并将其编号为 0。
设备(同样,在内核实体的意义上)是通过设备文件(上面的第一种意义上)访问的,设备文件由它们的类型(字符或设备)、它们的主设备号和它们的次设备号来标识。该名称与内核无关,因此只要找到正确的文件,/dev/rtc
vs就不是问题。检查设备编号是否正确:/dev/rtc0
hwclock
/dev/rtc
crw------- 1 root root 254, 0 Sep 24 13:29 /dev/rtc
如果/dev/rtc
是符号链接,则它应该是到 的链接rtc0
,该链接应具有如上的设备号 (254,0)。