Linux下RTC驱动的简单分析

来源:互联网 发布:ubuntu怎么进入文件夹 编辑:程序博客网 时间:2024/05/21 17:16
详细查看文件:drivers\rtc\rtc-s3c.c


RTC驱动调用分析
s3c_rtc_init    platform_driver_register        s3c_rtc_probe            rtc_device_register("s3c", &pdev->dev, &s3c_rtcops, THIS_MODULE)                rtc_dev_prepare                    cdev_init(&rtc->char_dev, &rtc_dev_fops);                 rtc_dev_add_device                     cdev_add

当我们的应用程序进行open和ioctl操作时:

app:    open("/dev/rtc0");-------------------------------------------kernel: sys_open            rtc_dev_fops.open                rtc_dev_open                    // 根据次设备号找到以前用"rtc_device_register"注册的rtc_device                    struct rtc_device *rtc = container_of(inode->i_cdev,struct rtc_device, char_dev);                    const struct rtc_class_ops *ops = rtc->ops;                    err = ops->open ? ops->open(rtc->dev.parent) : 0;                                                s3c_rtc_openapp:    ioctl(fd, RTC_RD_TIME,...)-------------------------------------------kernel: sys_ioctl             rtc_dev_fops.ioctl                  rtc_dev_ioctl                          struct rtc_device *rtc = file->private_data;                          rtc_read_time(rtc, &tm);                              err = rtc->ops->read_time(rtc->dev.parent, tm);                                          s3c_rtc_gettime





测试RTC:
1. 修改arch\arm\plat-s3c24xx\common-smdk.c
static struct platform_device __initdata *smdk_devs[] = {
    &s3c_device_nand,
    &smdk_led4,
    &smdk_led5,
    &smdk_led6,
    &smdk_led7,
改为(在数组smdk_devs里加上s3c_device_rtc):
static struct platform_device __initdata *smdk_devs[] = {
    &s3c_device_nand,
    &smdk_led4,
    &smdk_led5,
    &smdk_led6,
    &smdk_led7,
    &s3c_device_rtc,

2. make uImage, 使用新内核启动

3. ls /dev/rtc* -l
   date /* 显示系统时间 */
   date 123015402011.30 /* 设置系统时间 date [MMDDhhmm[[CC]YY][.ss]] */
   hwclock -w           /* 把系统时间写入RTC */

   短电,重启,执行date





原创粉丝点击