저는 32비트 Linux 3.12.18 구성을 가지고 있으며 64비트 버전을 컴파일하려고 했습니다. 여기서 대부분의 설정(선택한 드라이버 등)은 32비트 버전과 동일합니다. 이를 위해 소스 트리에서 make menuconfig
with를 사용 .config
하고 "64비트 커널"을 확인했습니다. 설치 후 이 반짝이는 새 커널로 재부팅했는데 모든 것이 잘 작동했습니다. 거의 모든 것이 작동했습니다. 어떤 이유에서인지 32비트 커널에 있는 유틸리티가 없는 것 같습니다. /dev/rtc*
물론 hwclock
이 유틸리티는 32비트에서는 실행되지만 작동하지 않습니다.
차이점을 알아내려고 시간을 보냈더니 CONFIG_RTC_CLASS
32비트 버전에서는 하위 키가 포함된 전체 내용이 언급되지 않고 64비트 버전 .config
으로 설정되어 있다는 것을 알게 되었습니다. is not set
따라서 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