pcf8563驅動的加載
- 引言
- i2c驅動使能與驗證
- rtc(pcf8563)驅動加載
- rtc(pcf8563)驅動驗證指令
- 執行個體:
引言
rtc驅動晶片為嵌入式linux系統提供系統時間,通過I2C接口挂載在開發闆裝置樹的i2c節點上。本文簡述pcf8563驅動的加載過程,其餘rtc晶片的加載過程類似,并驗證了rtc(pcf8563)驅動的加載。
waring:
rtc驅動本質上是一個字元裝置驅動,隻不過Linux核心在通用的字元裝置驅動接口上引入了RTC驅動架構(字元裝置驅動的封裝)。常用rtc晶片驅動已經存放在kerner/driver/rtc/ 下,編譯時通過make menuconfig 使能即可使用,其裝置樹下節點的配置方式可參考以下目錄檔案kernel/Documentation/devicetree/bindings/rtc/
i2c驅動使能與驗證
由于rtc晶片常使用i2c接口,故在挂載前,需先驗證i2c驅動是否能成功加載,使能裝置樹下的i2c節點,系統加載後可通過如下指令檢視i2c節點的使能情況:
# 1. 查詢可用的i2c裝置
# i2cdetect -l
i2c-3 i2c i2c3 I2C adapter
# 2. 檢視i2c總線下挂載的裝置,就算驅動rtc驅動沒使能,隻要在裝置樹下添加了該節點,即可查詢
ls /sys/bus/i2c/
# 3. 檢視pcf8563的加載
# cat /sys//bus/i2c/devices/2-0051/name
pcf8563
waring:
i2c-dev.c與SPI驅動中spidev.c類似,是核心層為使用者空間提供的一條讀寫i2c總線資料的标準接口,其應用空間的程式設計接口可參考核心文檔或者i2c-tools工具中的源碼程式。
// 核心中i2c裝置傳輸資料的接口主要有以下三個:
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
rtc(pcf8563)驅動加載
1. 部分晶片内部還有rtc,故需先通過 make menuconfig關閉晶片内部的rtc驅動;
2. 往裝置樹i2c節點中添加rtc節點
&i2c3 {
status = "okay";
pcf8563: [email protected] {
compatible = "nxp,pcf8563";
reg = <0x51>;
#clock-cells = <0>;
}
};
3. 通過 make menuconfig使能pcf8563晶片驅動;

rtc(pcf8563)驅動驗證指令
1. 指令簡介
# 顯示目前的系統時間
date
# 修改目前系統時間,為:date -s "2010-04-05 14:31:00"
# 顯示目前硬體 rtc的時間(預設為rtc0)
hwclock
# hwclock -s 将硬體時間同步到系統時間
# hwclock -w 将系統時間同步到硬體時間
# hwclock -f /dev/rtc1 讀取指定硬體 rtc 的時間
2. 當通過hwclock -r 指令能夠成功讀取rtc時,表面rtc驅動已成功加載
3. date -s 設定系統時間
4. hwclock -w 将系統時間同步到硬體時間,重新開機後date檢視系統時間
waring:
rtc驅動沒有加載成功時:
# hwclock -r
hwclock: can't open '/dev/misc/rtc': No such file or directory
執行個體:
闆子上電
#date -s "2010-04-05 14:31:00" //設定系統時鐘 2010 年 04 月 5 日 14:31:00 CST
#hwclock -w //将系統時鐘寫入硬體時鐘
#hwclock -r //看時間是否在變化
如果沒有出錯,就已經把2010 年 04 月 5 日 14:31:00 CST 寫入RTC chip了
為了使系統時間和RTC時間同步,可以在初始化檔案中添加指令
hwclock –s
使每次開機時讀取RTC時間,并同步給系統時間。
在根檔案系統:usr/etc/rc.local中添加
/sbin/hwclock -s
斷電
等2分鐘在上電
#hwclock -r //看時間是否同步,即使與2分鐘後的時間相同