zoukankan      html  css  js  c++  java
  • RTC驱动程序分析


    drivers tc tc-s3c.c



    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




    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_open
    app:    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. 修改archarmplat-s3c24xxcommon-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,


    在 smdk_machine_init(void) 里添加设备 platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));   也就是把数组smdk_devs里的设备,注册到设备链表里。    方便以后与注册的驱动链表匹配。


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


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



    注:韦老师总结,我添加了一点东西

  • 相关阅读:
    吉特日化MES-电子批记录普通样本
    吉特日化配料系统-关于25针串口转接
    吉特仓储管理系统--元宵送开发者一份礼物-开源2018年源码
    吉特日化MES-日化生产称料基本步骤
    吉特日化MES-日化行业原料仓库所见问题汇总
    网易数据中台建设实践
    【杭研大咖说】温正湖:6年,从不会写SQL到数据库专家
    从自动化到智能化,网易杭研的AIOps探索与实践
    特征选择之经典三刀
    【杭研大咖说】王新勇:死磕云原生的“懒人”
  • 原文地址:https://www.cnblogs.com/alan666/p/8312086.html
Copyright © 2011-2022 走看看