【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. UVa 11059 - Maximum Product 最大乘积【暴力】

    题目链接:https://vjudge.net/contest/210334#problem/B 题目大意:Given a sequence of integers S = {S1, S2, . . ...

  2. Win10 下 hadoop3.0.0 单机部署

    前言 因近期要做 hadoop 有关的项目,需配置 hadoop 环境,简单起见就准备进行单机部署,方便开发调试.顺便记录下采坑步骤,方便碰到同样问题的朋友们. 安装步骤 一.下载 hadoop-XX ...

  3. MySql:Table 'database.TABLE_ONE' doesn't exist

    1. 问题描述 由于最近使用本地的MySQL奔溃了,在修改管理员密码时,不慎修改错误,导致无法重新写会,甚至按照MySQL官网手册都无法修改正确,遂放弃修改root密码,直接将一个未有数据的纯净版My ...

  4. VB.NET 编程元素支持更改总结

    Visual Basic 2005 更改了它支持各种编程元素的方式,主要是为了提供与公共语言运行库的互操作性.许多 Visual Basic 6.0 元素被重新命名,重新分类或与 Visual Bas ...

  5. python-线程的暂停, 恢复, 退出

    我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...

  6. python魔法方法-单目运算及一般算数运算

    在比较的魔法方法中,我们讨论了魔法方法其实就是重载了操作符,例如>.<.==等.而这里,我们继续讨论有关于数值的魔法方法. 1.单目运算符或单目运算函数 __pos__(self) 实现一 ...

  7. Python3高级基础(2)

    1 Python3模拟数据结构 1.1 栈 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表.栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进 ...

  8. PHP类的继承

    每个子类(也叫派生类)都会在设置自己的属性前调用父类的构造方法.父类(也叫基类或超类)现在仅知道自己的数据,子类一般是父类的特例,要避免告诉父类任何关于子类的信息 以下为一个使用继承的实例: < ...

  9. json与xml数据输出类

    class Response { /** * 按json方式输出通信数据 * @param integer $code 状态码 * @param string $message 提示信息 * @par ...

  10. AngularJS中巧用ngModel的$asyncValidators属性写一个验证唯一性的Direcitve

    有这样的一个需求:添加用户的时候,根据主键判断当前添加用户的email是否已经被使用. 为此,我们需要把主键和email来传递给远程的一个API,让API返回结果,告之当前email是否被使用过. 写 ...