Devices

無法使用 hwclock 的busybox實現

  • March 28, 2014

我有一個 buildroot 生成的核心(3.6.11)和在 x86 設備上執行的根文件系統。它使用busybox,我正在嘗試使用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

我可以解釋一些症狀,但不能告訴你如何去hwclock上班。

在 unix 上下文中,設備一詞的含義經常存在一些混淆。這可能意味著:

  • 字元設備或塊設備類型的文件系統條目。
  • 該文件系統節點後面的核心實體。
  • 連接到硬體匯流排的邏輯實體。
  • 物理上獨立的硬體組件。

在消息“沒有這樣的設備”中,設備一詞指的是核心實體。似乎沒有已註冊該設備的核心實體/dev/rtc。給定 dmesg 輸出,CMOS RTC 驅動程序存在於核心中,並找到了一個 RTC 並將其編號為 0。

設備(同樣,在核心實體的意義上)是通過設備文件(上面的第一個意義上)訪問的,設備文件由它們的類型(字元或設備)、它們的主要編號和次要編號標識。該名稱與核心無關,因此只要找到正確的文件, /dev/rtcvs就不是問題。檢查是否有正確的設備號:/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