将 Linux 配置从 32 位更改为 64 位会丢失 RTC

将 Linux 配置从 32 位更改为 64 位会丢失 RTC

我有一个 32 位 Linux 3.12.18 的配置,并尝试编译 64 位版本,其中大多数设置(如选定的驱动程序等)与 32 位版本相同。为此,我在源代码树中使用了make menuconfigwith .config,并检查了“64 位内核”。安装后,我用这个闪亮的新内核重新启动,一切正常......几乎一切。由于某种原因,我似乎没有/dev/rtc*32 位内核上存在的 ,当然hwclock实用程序无法工作,而它可以在 32 位上运行。

我花了一些时间试图弄清楚其中的区别,并发现CONFIG_RTC_CLASS32 位版本中没有提及其子项的整个内容.config,而设置为is not set64 位版本。所以看起来内核关于 RTC 的默认配置在 32 位和 64 位编译模式下是不同的。

为什么会有这样的差异?在现代 64 位系统上,PC RTC 通常会被其他东西取代,还是什么?

答案1

检查您的.config, CONFIG_RTC_DRV_CMOS=yCONFIG_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=yCONFIG_X86_64=y不会改变 的值CONFIG_RTC_CLASS

相关内容