我有一个 32 位 Linux 3.12.18 的配置,并尝试编译 64 位版本,其中大多数设置(如选定的驱动程序等)与 32 位版本相同。为此,我在源代码树中使用了make menuconfig
with .config
,并检查了“64 位内核”。安装后,我用这个闪亮的新内核重新启动,一切正常......几乎一切。由于某种原因,我似乎没有/dev/rtc*
32 位内核上存在的 ,当然hwclock
实用程序无法工作,而它可以在 32 位上运行。
我花了一些时间试图弄清楚其中的区别,并发现CONFIG_RTC_CLASS
32 位版本中没有提及其子项的整个内容.config
,而设置为is not set
64 位版本。所以看起来内核关于 RTC 的默认配置在 32 位和 64 位编译模式下是不同的。
为什么会有这样的差异?在现代 64 位系统上,PC RTC 通常会被其他东西取代,还是什么?
答案1
检查您的.config
, CONFIG_RTC_DRV_CMOS=y
(CONFIG_RTC_INTF_DEV=y
创建 /dev/rtcN 设备)和CONFIG_RTC_CLASS=y
(其他两个设备所依赖的)。在 menuconfig 中,这些位于Device Drivers -> Real Time Clock
.
我不认为有任何差异默认 x86* 配置,两者都设定CONFIG_RTC_CLASS
。当从 git开始defconfig
使用x86_64
时:v3.12
mario@gamma ~/dev/linux (git)-[v3.12] % mv .config .config-orig && make defconfig && grep RTC .config | grep -v '^#'
*** Default configuration is based on 'x86_64_defconfig'
#
# configuration written to .config
#
CONFIG_HPET_EMULATE_RTC=y
CONFIG_PM_TRACE_RTC=y
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_SYSTOHC=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_DRV_CMOS=y
CONFIG_X86
(=y
对于 32 位和 64 位) 选择CONFIG_RTC_DRV_CMOS
(看这里)CONFIG_RTC_INTF_DEV
并由CONFIG_RTC_CLASS
(看这里)。
听起来你不是从空白开始的.config
。当从空白配置开始并配置每个配置时,您能重现该问题吗?据我所见,简单地切换CONFIG_X86_32=y
并CONFIG_X86_64=y
不会改变 的值CONFIG_RTC_CLASS
。