【1.分层思想】

1.1 rtc-dev.c   //设备接口层,功能:给用户提供接口

subsys_initcall(rtc_init);   , RTC_DEV_MAX, "rtc");

1.2 rtc-s3c.c  //功能:操作硬件

module_init(s3c_rtc_init);
)

【为了能够读取到rtc的时间】

【一/添加驱动(driver/rtc)】

1.修改driver/rtc/目录下的Kconfig
    vi linux-2.6.35.5/driver/rtc/Kconfig

config RTC_DRV_S3C
         tristate "Samsung S3C series SoC RTC"
         depends on ARCH_S3C2410 || ARCH_S3C64XX || ARCH_S5PC100(添加的东西)
         help
           RTC (Realtime Clock) driver for the clock inbuilt into the
           Samsung S3C24XX series of SoCs. This can provide periodic
           interrupt rates from 1Hz to 64Hz for user programs, and
           wakeup from Alarm.
           The driver currently supports the common features on all the
           S3C24XX range, such as the S3C2410, S3C2412, S3C2413, S3C2440
           and S3C2442.
           This driver can also be build as a module. If so, the module
           will be called rtc-s3c.

2.配置内核
    make menuconfig

Device Drivers  --->
 <*> Real Time Clock  --->     //class.c rtc-dev.c
  <*>   Samsung S3C series SoC RTCs       //需要修改driver/rtc/Kconfig

3.资源添加
    vi arch/arm/mach-s5pc100/Kconfig

config MACH_SMDKC100
          bool "SMDKC100"
          select CPU_S5PC100
          select S3C_DEV_FB
          select S3C_DEV_I2C1
          select S3C_DEV_HSMMC
          select S3C_DEV_HSMMC1
          select S3C_DEV_HSMMC2
          select S5PC100_SETUP_FB_24BPP
          select S5PC100_SETUP_I2C1
          select S5PC100_SETUP_SDHCI
          select S3C_DEV_LED
          select S3C_DEV_RTC     //添加的代码

vi arch/arm/mach-s5pc100/mach-smdkc100.c

static struct platform_device *smdkc100_devices[] __initdata = {
         &s3c_device_i2c0,
         &s3c_device_i2c1,
         &s3c_device_fb,
         &s3c_device_hsmmc0,
         &s3c_device_hsmmc1,
         &s3c_device_hsmmc2,
         &smdkc100_lcd_powerdev,
         &s5pc100_device_iis0,
         &s5pc100_device_ac97,
 #ifdef  CONFIG_DM9000
         &s5pc100_device_dm9000,
 #endif
         &fsled_device,
         &s3c_device_rtc,
 };

4.修改linux-2.6.35.5/arch/arm/mach-s5pc100/includ/mach/map.h
    vi linux-2.6.35.5/arch/arm/mach-s5pc100/includ/mach/map.h
    在其中添加

#define S3C_PA_RTC  0xEA300000

5.重新编译内核

测试:

1.编写测试程序,见rtc_test.c
2.运行测试程序
./rtc_test

Current RTC date/time is 0-0-2000, 00:00:00.
    说明时间没有成功读取到.猜测:没有成功初始化硬件,导致不能成功读取到时间

<解决办法>
    使能rtc模块的时钟,在rtc-s3c.c文件的probe函数中,在使能RTC之前添加如下代码

/*开始rtc时钟,使能rtc模块的时钟*/
rtc_clk=clk_get(&pdev->dev, "rtc");
clk_enable(rtc_clk);

2.现象:一直读出来的数据位0,也设置不进去,
    原因:硬件问题.

【代码跟踪】

open

;   //s3c_rtc_open
rtc-s3c.c     s3c_rtc_open
         request_irq(s3c_rtc_alarmno, s3c_rtc_alarmirq,
          IRQF_DISABLED,  "s3c2410-rtc alarm", rtc_dev);
         request_irq(s3c_rtc_tickno, s3c_rtc_tickirq,
          IRQF_DISABLED,  "s3c2410-rtc tick", rtc_dev);

RTC_SET_TIME

app; 
        ) {
        dev_err(dev, ), base + S3C2410_RTCMON);
       writeb(bin2bcd(year), base + S3C2410_RTCYEAR);

RTC_RD_TIME

app, )
        ;
      rtc_tm;

【linux设备驱动之rtc驱动开发】

@成鹏致远(wwwlllll@126.com)

【Linux高级驱动】rtc驱动开发的更多相关文章

  1. Linux高级字符设备驱动

    转载:http://www.linuxidc.com/Linux/2012-05/60469p4.htm 1.什么是Poll方法,功能是什么? 2.Select系统调用(功能)      Select ...

  2. linux 高级字符设备驱动 ioctl操作介绍 例程分析实现【转】

    转自:http://my.oschina.net/u/274829/blog/285014 1,ioctl介绍 ioctl控制设备读写数据以及关闭等. 用户空间函数原型:int ioctl(int f ...

  3. Linux高级字符设备驱动 poll方法(select多路监控原理与实现)

    1.什么是Poll方法,功能是什么? 2.Select系统调用(功能)      Select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程.      int selec ...

  4. 【视频】 Linux高级程序设计01.2开发平台及Linux环境限制

    [课程笔记] Linux环境限制 遵循规范,使用现有资源,明确系统限制,增量开发. (1)规范问题 编码的规范,让程序更易读.Linux编码规范. “见着如意”:变量,函数命名等能够让人看到名称就知道 ...

  5. 【视频】Linux高级程序设计01.1开发工具及gcc gdb

    [课程笔记] Linux 下编辑调试工具,gcc,gdb. 把高级语言编译成二进制可执行代码的工具. 需要经历四个步骤: (1) 预处理:去掉注释,进行宏替换(#define相关),头文件(#incl ...

  6. 【Linux开发】如何查看Linux kernel的内置模块驱动列表和进程ID

    [Linux开发]如何查看Linux kernel的内置模块驱动列表和进程ID 标签:[Linux开发] 命令: cat /lib/modules/$(uname -r)/modules.builti ...

  7. linux RTC 驱动模型分析【转】

    转自:http://blog.csdn.net/yaozhenguo2006/article/details/6824970 RTC(real time clock)实时时钟,主要作用是给Linux系 ...

  8. Linux RTC驱动模型分析之rtc-sysfs.c【转】

    转自:https://blog.csdn.net/longwang155069/article/details/52353408 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...

  9. 【Linux高级驱动】linux设备驱动模型之平台设备驱动机制

    [1:引言: linux字符设备驱动的基本编程流程] 1.实现模块加载函数  a.申请主设备号    register_chrdev(major,name,file_operations);  b.创 ...

随机推荐

  1. java中函数传值和传地址的问题

    记录一下这个难过的双休,2019.3.16-2019.3.17,16号上午字节跳动笔试,四道题只做出1道半,输入输出搞的半死,第三题类似于leetcode上的分糖问题,数组初始化的时候全部赋为0了,要 ...

  2. Python库资源大全

    转载地址:https://zhuanlan.zhihu.com/p/27350980 本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQu ...

  3. HDU 2089 不要62 【数位dp】

    <题目链接> 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照 ...

  4. 001.HAProxy简介

    一 HAProxy简介 HAProxy是可提供高可用性.负载均衡以及基于TCP(从而可以反向代理mysql等应用)和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProx ...

  5. go语言爬虫 - TapTap用户都喜欢些什么游戏

    前面的废话 说到爬虫,首先想到的当然是python~ 它在机器学习.爬虫数据分析领域可谓是如日中天,十分热门.但我最近在学习go语言,所以就用go写了 TapTap社区 这是一个高品质的游戏分享社区, ...

  6. @ConfigurationProperties和@Value 注入

    我这里使用的Spring Boot 2.0.1 版本 配置文件是 yml 格式文件 @ConfigurationProperties 在yml配置文件中: 在实体类中: 重点是实体类上的两个注解: @ ...

  7. BZOJ.2707.[SDOI2012]走迷宫(期望 Tarjan 高斯消元)

    题目链接 一个点到达终点的期望步数 \(E_i=\sum_{(i,j)\in G}\frac{E_j+1}{out[i]}\),\(out[i]\)为点\(i\)的出度. 那么对于一个DAG可以直接在 ...

  8. winform 中 给DataGridView的表头添加CheckBox

    在C/S架构中,给DataGridView的表头添加CheckBox控件: 添加类:   /// <summary>       /// 给DataGridView添加全选       / ...

  9. ArcGIS教程:曲率

    摘要 计算栅格表面的曲率,包括剖面曲率和平面曲率. 用法 · 主要输出结果为每个像元的表面曲率,该值通过将该像元与八个相邻像元拟合而得.曲率是表面的二阶导数,或者可称之为坡度的坡度.可供选择的输出曲率 ...

  10. [web前端] yarn和npm命令使用

    原文地址: https://blog.csdn.net/mjzhang1993/article/details/70092902/ 最初接触 yarn 还是在 0.17.10 版本,由于各种各样的原因 ...