Linux驱动: rtc子系统

  1. 说明

    本文分析代码基于3.10内核,硬件平台为嵌入式ARM平台.

2.  rtc子系统相关文件

drivers/rtc/class.c
drivers/rtc/interface.c
drivers/rtc/rtc-core.h
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-lib.c
drivers/rtc/rtc-proc.c
drivers/rtc/rtc-sysfs.c
drivers/rtc/hctosys.c
drivers/rtc/rtc-xxx.c

class.c    : 管理rtc sys class;

interface.c: 主要作用是间接rtc驱动接口;

rtc-dev.c  : rtc设备用户接口;

rtc-lib.c  : rtc辅助函数,主要用于rtc时间转换,计算;

rtc-proc   : rtc proc fs(用户)接口;

rtc-sysfs  : rtc sys fs(用户)接口;

hctosys.c  : 用于在系统启动时从rtc读取时间,并设置为系统时间;

rtc-xxx.c  : rtc硬件芯片驱动,如rtc-wm8350.c,rtc-hym8563.c等.

3. rtc子系统框图

上图是基于新的rtc子系统框架,该框架能更好的适应嵌入式开发环境,嵌入式环境可能带多个rtc芯

片.

老的rtc驱动就是一个简单的字符设备驱动,是适应于PC平台的,对应有一个/dev/rtc设备文件.

在新的rtc子系统框架下,应用程序通过/dev/rtc[0-N]设备来完成对rtc芯片的访问.这些访问通过

rtc-dev.c提供的接口间接访问rtc-xxx.c提供的rtc芯片驱动.常见的操作有读取/设置时间的操作,

这个每个rtc芯片都必须支持的操作.

当然,访问/dev/rtc[0-N]设备文件不是访问rtc芯片的唯一途径,还可以通过rtc提供的proc,sys fs

接口来访问rtc.

4. 系统时间来源:rtc设备制定

Device Drivers --->

[*] Real Time Clock --->

(rtc0) RTC used to set system time

...

*** RTC interfaces ***

...

*** I2C RTC drivers ***

...

*** SPI RTC drivers ***

...

*** on-CPU RTC drivers ***

...

注: 红色字样是指定作为系统时间来源的rtc设备.

时间: 2025-02-01 10:06:16

Linux驱动: rtc子系统的相关文章

ARM Linux 驱动Input子系统之按键驱动测试

上一篇已经谈过,在现内核的中引入设备树之后对于内核驱动的编写,主要集中在硬件接口的配置上了即xxxx.dts文件的编写. 在自己的开发板上移植按键驱动: 1.根据开发板的原理图 确定按键的硬件接口为:GPIO2_2.GPIO2_3.GPIO2_5.GPIO0_30. 修改dts文件使其与原理图的按键接口一致. gpio_buttons: [email protected]0 { compatible = "gpio-keys"; #address-cells = <1>;

arm Linux 驱动LED子系统 测试

Linux内核在3.0以上引入了设备树概念(具体哪个版本不清楚)在编译内核后需要将与之对应的dtb文件也下载人板子上才能使内核与硬件关联起来. dtb文件是有dts文件编译后生成的:例如 /* * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ * * This program is free software; you can redistribute it and/or modify * it un

linux驱动之i2c子系统device注册driver注册简单分析

Linux 驱动设计主要是根据分层分离思想,i2c子系统分为i2cocre.adapter.及device_driver层,其实adapter也是个device,只不过是我们主控芯片的I2C控制接口而已,我们的主控芯片有几个I2C接口就有几个adapter; i2ccore这一层linux已经帮我们实现,主要的工做是类似platform总线的作用,负责drvier及设备的注册,相比platform多了个adapter的注册管理工作,以及i2c的数据发送接收等等算法,说算法有点夸大,其实就是按照i

Linux驱动之输入子系统框架

    好记性不如烂笔头,整理一下笔记~ Linux驱动之输入子系统框架 输入子系统将该类驱动划分为3部分 1.核心层 input.c 2.设备层 Gpio_keys.c ... 3.事件处理层 Evdev.c 事件处理层为纯软件的东西,设备层涉及底层硬件,它们通过核心层建立联系,对外提供open write等接口. 1.我们首先来看,核心层 input.c如何向外界提供接口 在 input_init 中注册了字符设备驱动 register_chrdev(INPUT_MAJOR, "input&

Linux kernel中断子系统之(五):驱动申请中断API

一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threaded interrupt handler)的基础知识,这些在第二章描述.第三章主要描述了驱动申请 interrupt line接口API request_threaded_irq的规格.第四章是进入request_threaded_irq的实现细节,分析整个代码的执行过程. 二.和中断相关的lin

Linux驱动架构之pinctrl子系统分析(一)

1.前言在嵌入式系统中,许多SoC的内部都包含了pin控制器,通过芯片内部的pin控制器,我们可以配置一个或者一组引脚的状态和功能特性,Linux内核为了统一各SoC厂商的引脚管理,提供了pinctrl子系统. 2.引脚功能分类嵌入式芯片手册往往有一个GPIO控制的章节来描述SoC的引脚如何进行配置,该描述具有大量的寄存器操作,但是通过配置这些寄存器实现的功能基本有三类,如下: (1)通过设置pin controller硬件的控制单元,可以实现 (1.1)引脚的功能配置,例如设定I/O引脚是普通

Linux驱动开发之输入子系统

2020-02-15 关键字: Linux 中输入设备大致可分以下几种: 1.按键/键盘(keyboard) 2.鼠标(mouse) 3.触摸屏(touchscreen) 4.游戏杆(joystick) 输入子系统的目的是为了屏蔽众多输入设备在硬件上的差异化,使得在开发输入设备的程序时能更简单统一.输入子系统屏蔽差异的方式就是为各种输入设备与上层应用提供统一的编程接口. Linux 输入子系统是一种编程框架,它可以自上而下分为以下几种层次: 1.应用层 2.input handler层:数据处理

Linux 内核无线子系统

Linux 内核无线子系统 浅谈 Linux 内核无线子系统 Table of Contents 1. 全局概览 2. 模块间接口 3. 数据路径与管理路径 4. 数据包是如何被发送? 5. 谈谈管理路径 6. 数据包又是如何被接收? 7. 总结一下 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样的方式被发送和接收呢?刚开始工作接触 Linux 无线网络时,我曾迷失在浩瀚的基础代码中,寻找具有介绍性的材料来回答如上面提到的那些高层次的问题.跟踪探索了一段时间的源代码后,我写下了这篇总

linux驱动面试题整理

资料来自网上,简单整理,答案后续补充...... 1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也叫手动创建设备文件.还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后.那么在系统启动期间还有devfs创建了设备文件.一共有三种方式可