天天看点

Linux下RTC驱动的加载引言i2c驱动使能与验证rtc(pcf8563)驱动加载rtc(pcf8563)驱动验证指令实例:

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芯片驱动;

Linux下RTC驱动的加载引言i2c驱动使能与验证rtc(pcf8563)驱动加载rtc(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分钟后的时间相同
           

继续阅读