我在x86设备上运行了一个buildroot生成的内核(3.6.11)和根文件系统。它使用busybox,我正在尝试使用hwclock设置BIOS硬件时钟。每当我调用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 (Profsforrtc0)的选项。我也只有驱动程序PC风格的'CMOS‘平台RTC驱动程序选择。但是,在这里的“帮助”一节中,我阅读了以下内容:
在这里说“是”是为了直接支持在每个基于个人电脑或基于消费物价指数的系统中找到的实时时钟,以及其他一些板。特别是原来的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?
发布于 2013-09-24 23:09:59
我可以解释一些症状,但不告诉你如何让hwclock工作。
在unix上下文中,对于设备这个词的含义常常有些混淆。它可能意味着:
在消息“没有这样的设备”中,“设备”一词指的是内核实体。似乎没有注册设备/dev/rtc的内核实体。给定dmesg输出,CMOS RTC驱动程序出现在内核中,并找到了一个RTC,并给出了它的数字0。
设备(同样,在内核实体的意义上)是通过设备文件(上面的第一个含义)访问的,设备文件由它们的类型(字符或设备)、主号和次要号来标识。名称与内核无关,所以只要/dev/rtc与/dev/rtc0找到正确的文件,hwclock就不会有问题。检查/dev/rtc是否有正确的设备编号:
crw------- 1 root root 254, 0 Sep 24 13:29 /dev/rtc如果/dev/rtc是一个符号链接,那么它应该是一个指向rtc0的链接,该链接应该有设备编号(254,0),如下所示。
https://unix.stackexchange.com/questions/92169
复制相似问题