s3c2410 RTC驱动框架linux内核源码分析

 懒了很长时间了,以导致最近变本加厉,现在得到了惩罚,这个月快要结卡时竟然欠了13.5个小时的工作时间,mY god...
连续3天了,晚上不得不在公司加班补时间,该看的电影都看完了,在公司也不能上网打游戏虐人,实在无聊中就将原来的一些东西整理了一下,自己是个记性不好的人,隔断时间整理自己,同时也希望可以方便他人。

----------------------------------------------------------------------------------------------------------------------------------------

/*********************************************************************************************************
*  @Description:s3c2410的rtc驱动的实现,rtc(real time clock)实时时钟的驱动是个很好的
*    理解如果编写驱动的硬件,它包括了最基本的硬中断,软中断的底层机制;
*    s3c2410的RTC驱动的实现个人认为更是对linux设备驱动一个很好的例子,他是通过二层结构来
*    实现的一个驱动,上层是一个arm common的公共层,对上提供标准的通用的RTC操作接口,下层由
*    我们来实现针对自己的chip和自己要提供的功能来实现的一层驱动;
*
*  @FileTree:
**********************************************************************************************************
linux-2.6.14.6
|
|--arch
|    |
|    |--arm
|    |    |--mach-s3c2410
|    |    |    |-devs.c        //包含了对各个部件的resource的分配和定义,在这看rtc的资源;
|    |    |--common
|    |    |    |-rtctime.c        //一个arm平台的通用rtc函数层,它对上隐藏了各种soc的rtc driver的区别;
|    |    |--kernel
|    |    |    |-time.c        //内核的初始化例程time_init()会调用的xxx_cmos_xxx函数的实现;定义了全局自旋锁rtc_lock用来串行化所有CPU对RTC的操作
|
|--drivers
|    |--char
|    |    |-s3c2410-rtc.c            //具体的s3c2410上的rtc chip的驱动实现,如果需要在arm平台的
|    |                    板子上实现一个驱动,改写它就ok了。
|
|--include
|    |--asm-arm
|    |    |--arch-s3c2410
|    |    |    |-regs-rtc.h    //S3C2410 Internal RTC register definition refer to datasheet;
|    |    |-rtc.h                //arm平台rtc操作抽象层rtctime.c对应的.h
|    |--linux
|    |    |-time.h            //mktime的实现;
|    |    |-rtc.h                //公用RTC .h
*
*[小结]
*1)提供给user的接口,在arch/arm/common/rtctime.c,include/asm-arm/rtc.h中实现,调用操作硬件驱动在drivers/char/s3c2410-rtc.c,include/asm-arm/arch-s3c2410/regs-rtc.h实现;
*2)提供给kernel的接口,在arch/arm/kernel/time.c,include/linux/time.h中实现,调用操作硬件驱动在drivers/char/s3c2410-rtc.c,include/asm-arm/arch-s3c2410/regs-rtc.h实现;
**********************************************************************************************************
*
*  @Author:    [email protected]         
*                                
*  @Function    List:    <Functions>
*
*                        <Static functions>
*
*    
*    @Changelog:
*    2007-06-24    LiYang    First version
*
*    @FQA:
*    [50%]Q1.在驱动中要将设备注册到总线,必须将设备封装成struct device_driver;调查这个结构体中的每个成员.
*    [0%]Q2.在板子(什么类型)上什么样的设备要用总线(什么类型)注册?
*    [90%]Q3.
*        struct device            --总线设备
*        struct device_driver    --总线设备驱动
*        struct platform_device    --平台设备
*        struct resource            --平台资源
*        
*    [!0%]Q4.初始化rtc register的函数的后面的flag具体控制什么? (在s2s65a里是否可以用它控制是softReset or hardwareReset)
*
*    [0%]Q5.什么时候调用suspend, resume?
*********************************************************************************************************
*/


/*****************************************************************************
 * Structures & Unions & Enums (#typedef)
 
*/

/*[include/linux/device.h] 
 *总线设备驱动结构体,将它注册到板子的总线上 
 
*/

static   struct  device_driver s3c2410_rtcdrv  =   {
    .name        
= "s3c2410-rtc",
    .owner        
= THIS_MODULE,
    .bus        
= &platform_bus_type,    //总线类型,貌似不用管
    .probe        = s3c2410_rtc_probe,    //自检->初始化REG->注册到上一层
    .remove        = s3c2410_rtc_remove,    //注销
    .suspend    = s3c2410_rtc_suspend,    //[挂起???]
    .resume        = s3c2410_rtc_resume,    //[重起???]
}
;

/*[/include/asm-arm/rtc.h] 
 *底层特别操作集,将他注册到上层的arm common操作层 
 
*/

static   struct  rtc_ops s3c2410_rtcops  =   {            
    .owner        
= THIS_MODULE,
    .open        
= s3c2410_rtc_open,
    .release    
= s3c2410_rtc_release,
    .ioctl        
= s3c2410_rtc_ioctl,
    .read_time    
= s3c2410_rtc_gettime,
    .set_time    
= s3c2410_rtc_settime,
    .read_alarm    
= s3c2410_rtc_getalarm,
    .set_alarm    
= s3c2410_rtc_setalarm,
    .proc        
= s3c2410_rtc_proc,
}
;


/*****************************************************************************
 * Global Variables
 
*/

 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值