linux2.6.32.2 mini2440平臺移植-- 激活 RTC 驅動

RTC的英文全稱是Real-Time Clock,翻譯過來是實時時鐘芯片. RTC是PC主板上的晶振及相關電路組成的時鐘電路的生成脈衝,RTC經過8254電路的變頻產生一個頻率較低一點的OS(系統)時鐘TSC,系統時鐘每一個cpu週期加一,每次系統時鐘在系統初起時通過RTC初始化。8254本身工作也需要有自己的驅動時鐘(PIT)。

 

1.2.1  在初始化文件中加入 RTC 設備結構

 

Linux-2.6.32.2 內核對 2440  RTC 驅動已經十分完善了,但並未在 mach-mini2440.c 中的設備集中加入它,因此並沒有被激活,加入 RTC 結構體如下紅色字體:

; mini2440 設備集中加入 RTC 結構體

static struct platform_device *mini2440_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_rtc,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c0,

&s3c_device_iis,

&mini2440_device_eth,

&s3c_device_nand,

};

 

1.2.2  在內核中配置 RTC

 

接下來重新配置內核,以加入 RTC 的驅動支持,依次選擇如下菜單項:

Device Drivers    --->

<*> Real Time Clock    --->

可以看到這裏缺省配置已經選擇了 RTC 相關的選項,這裏特別要注意的是該配置菜單最下方的<*>       Samsung  S3C  series  SoC  RTC 選項支持,因爲這裏纔是內核中真正的 2440 RTC 驅動配置項。

 

1.2.3  測試 RTC

[root@localhost linux-2.6.32.2]# make zImage

編譯生成zImage之後,將其燒寫到開發板上。

[root@mini2440 /]#ls -l dev/rtc*
crw-rw----    1 root     root     254,   0 Jan  1 00:00 dev/rtc0
[root@mini2440 /]#

在Linux中有硬件時鐘與系統時鐘兩種時鐘。硬件時鐘是指主機板上的時鐘設備,也就是通常可在 BIOS畫面設定的時鐘。系統時鐘則是指kernel中的 時鐘。當Linux啓動時,系統時鐘會去讀取硬件時鐘的設定,之後系統時鐘即獨立運作。所有Linux相關指令與函數都是讀取系統時鐘的設定。 hwclock實現了BIOS和linux的時間同步

既然Linux有兩個時鐘系統,那麼大家所使用的Linux默認使用哪種時鐘系統呢?會不回出現兩種系統時鐘衝突的情況呢?這些疑問和擔心不無道理。首先,Linux並沒有默認哪個時鐘系統。當Linux啓動時,硬件時鐘會去讀取系統時鐘的設置,然後系統時鐘就會獨立於硬件運作。

從Linux啓動過程來看,系統時鐘和硬件時鐘不會發生衝突,但Linux中的所有命令(包括函數) 都是採用的系統時鐘設置。不僅如此,系統時鐘和硬件時鐘還可以採用異步方式,即系統時間和硬件時間可以不同。這樣做的好處對於普通用戶意義不大,但對於 Linux網絡管理員卻有很大的用處。例如,要將一個很大的網絡中(跨越若干時區)的服務器同步,假如位於美國紐約的Linux服務器和北京的Linux 服務器,其中一臺服務器無須改變硬件時鐘而只需臨時設置一個系統時間,如要將北京服務器上的時間設置爲紐約時間,兩臺服務器完成文件的同步後,再與原來的時鐘同步一下即可。這樣系統和硬件時鐘就提供了更爲靈活的操作。

Linux 中更改時間的方法一般使用date 命令,爲了把S3C2440 內部帶的時鐘與linux 系統時鐘同步,一般使用hwclock 命令,下面是它們的使用方法:
(1) date -s 062016192011 #設置時間爲 2011-06-20 16:19

[root@mini2440 /]#date -s 062016202011
Mon Jun 20 16:20:00 UTC 2011
[root@mini2440 /]#
(2) hwclock -w #把剛剛設置的時間存入S3C2440 內部的RTC

[root@mini2440 /]#hwclock -w
[root@mini2440 /]#
(3).開機時使用hwclock -s 命令可以恢復 linux 系統時鐘爲RTC, 一般把該語句放入/etc/init.d/rcS 文件自動執行。

 [root@mini2440 /]#vi etc/init.d/rcS

在打開的編輯界面中加入下面內容

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
echo "----------munt all----------------"
mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo "*************************************************"
echo "************booting to mini2440 *****************"
echo "Kernel version:linux-2.6.32.2"
echo "the fans:singleboy"
echo "Date:2011.5.30"
echo "*************************************************"
/bin/hostname -F /etc/sysconfig/HOSTNAME
echo "update the time from RTC"
hwclock -s
#show the current system time
date

~
~
~
I etc/init.d/rcS [Modified] 18/19 94%
然後保存退出。

下面是啓動信息

----------munt all----------------
*************************************************
************booting to mini2440 *****************
Kernel version:linux-2.6.32.2
the fans:singleboy
Date:2011.5.30
*************************************************
update the time from RTC
Mon Jun 20 21:19:49 UTC 2011

Please press Enter to activate this console.

然而,在有時啓動時發現:

... ...

mice: PS/2 mouse device common for all mice
S3C24XX RTC, (c) 2004,2006 Simtec Electronics
s3c2410-rtc s3c2410-rtc: rtc disabled, re-enabling
s3c2410-rtc s3c2410-rtc: rtc core: registered s3c as rtc0
i2c /dev entries driver

... ...

NET: Registered protocol family 17
s3c2410-rtc s3c2410-rtc: hctosys: invalid date/time
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1

... ...

----------munt all----------------
*************************************************
************booting to mini2440 *****************
Kernel version:linux-2.6.32.2
the fans:singleboy
Date:2011.5.30
*************************************************
update the time from RTC
hwclock: settimeofday() failed: Invalid argument
Thu Jan  1 00:00:08 UTC 1970

Please press Enter to activate this console.

網上給出的答案:這個是正常的,原因是你沒有同步硬件時鐘。第一次啓動,沒有正確設置 RTC 日期。啓動文件系統後執行Data命令設置系統時間後,再使用hwclock -w將系統時間同步到RTC即可避免這個錯誤提示。
現在明白了,上面的錯誤信息是重新編譯內核後纔出現的。現在可以按照開始時的辦法重新設置。
[root@mini2440 /]#date -s 062110092011.00
Tue Jun 21 10:09:00 UTC 2011
[root@mini2440 /]#hwclock -w
[root@mini2440 /]#date
Tue Jun 21 10:09:36 UTC 2011
[root@mini2440 /]#
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章