.Linux-2.6.32.2內核在mini2440上的移植(五)---激活RTC驅動

 

移植環境(紅色粗字體字修改後內容,藍色粗體字爲特別注意內容)

1,主機環境:VMare下CentOS 5.5 ,1G內存。

2,集成開發環境:Elipse IDE

3,編譯編譯環境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。

4,開發板:mini2440,2M nor flash,128M nand flash。

5,u-boot版本:u-boot-2009.08

6,linux 版本:linux-2.6.32.2

7,參考文章:

嵌入式linux應用開發完全手冊,韋東山,編著。

Mini2440 之Linux 移植開發實戰指南

 【1】在初始化文件中加入RTC 設備結構

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

打開/arch/arm/mach-s3c2440/mach-mini2440.c,定位到249行附近,修改如下

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,
 &s3c_device_nand, //;把nand flash 設備添加到開發板的設備列表結構
 &mini2440_device_eth,//;把網卡平臺設備添加到開發板的設備列表結構
};

【2】在內核中配置RTC

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

Device Drivers --->
<*> Real Time Clock --->

  <*>   Samsung S3C series SoC RTC   //這裏纔是內核中真正的2440 之RTC 驅動配置項。

確認完畢後,退出。

【3】測試RTC

[root@localhost linux-2.6.32.2]# make uImage

編譯生成uImage之後,將其複製到/nfsboot目錄下,因爲現在內核還是被放在此位置啓動。然後重啓開發板。

[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 /]#
 

接下來,將進行LCD相關移植

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章