S3C2410 RTC驱动实现解析

需积分: 9 2 下载量 141 浏览量 更新于2024-10-13 收藏 79KB DOC 举报
"s3c2410的rtc驱动实现文档详细介绍了如何为这款处理器编写RTC(实时时钟)驱动程序。文档指出,RTC驱动是一个理解硬件驱动编写基础的典型案例,涉及硬中断、软中断等底层机制。s3c2410的RTC驱动采用两层结构设计,上层是arm common的公共层,提供标准接口,下层是针对具体芯片和功能的实现。文件树展示了驱动在Linux内核源码中的组织结构,涉及的关键文件包括devs.c、rtctime.c、time.c以及s3c2410-rtc.c。 在Linux内核2.6.14.6版本中,RTC驱动的实现主要分布在以下几个路径: 1. `arch/arm/mach-s3c2410/devs.c`:这部分代码包含了对硬件资源的分配和定义,你可以在这里找到RTC的资源信息。 2. `arch/arm/common/rtctime.c`:这是一个针对ARM平台的RTC通用函数层,隐藏了不同SoC(System on Chip)RTC驱动的差异,向上提供了一致的接口。 3. `arch/arm/kernel/time.c`:内核的初始化函数`time_init()`会调用此文件中的RTC相关函数,并定义了全局自旋锁`rtc_lock`以确保多CPU环境下的RTC操作同步。 4. `drivers/char/s3c2410-rtc.c`:这个文件是专门为s3c2410处理器编写的RTC芯片驱动实现,如果要在其他ARM平台上实现RTC驱动,可以参考这个文件进行修改。 s3c2410 RTC驱动的实现细节可能包括以下部分: - 初始化和注册:驱动程序需要初始化RTC控制器,设置必要的寄存器,并在内核中注册RTC设备。 - 时间读取与设置:驱动必须提供方法来读取和设置系统时间,这通常通过I/O端口操作RTC控制器的特定寄存器完成。 - 中断处理:RTC可能有中断功能,用于通知系统时间更新或报警事件,驱动需要处理这些中断。 - 能耗优化:RTC在系统待机或休眠时仍然运行,因此驱动可能需要考虑低功耗模式。 - 锁定机制:由于RTC是共享资源,驱动需要确保其访问是线程安全的,这里使用了全局自旋锁`rtc_lock`。 RTC驱动的编写不仅要理解硬件的特性,还要熟悉Linux内核驱动模型,包括设备注册、中断处理、I/O操作以及电源管理等方面的知识。s3c2410的RTC驱动实现是一个很好的学习实例,可以帮助开发者深入理解嵌入式系统中驱动程序的开发过程。
2016-12-31 上传
linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools-3.2.2.tar.bz2 | `-- modutils-2.4.5-1.src.rpm |-- 04 | |-- 内核模块参数范例 | | `-- book.c | |-- 内核模块导出符号 | | `-- export_symb.c | `-- 最简单的内核模块 | `-- hello.c |-- 05 | `-- udev源代码 | `-- udev-114.tar.gz |-- 06 | |-- globalmem驱动 | | `-- globalmem.c | `-- 包含2个globalmem设备的驱动 | `-- globalmem_two.c |-- 07 | `-- 含并发控制的globalmem驱动 | `-- globalmem_lock.c |-- 08 | |-- globalfifo驱动 | | `-- globalfifo.c | `-- poll应用程序范例 | `-- pollmonitor.c |-- 09 | |-- 异步通知应用程序范例 | | `-- asyncmonitor.c | `-- 支持异步通知的globalfifo | `-- globalfifo_async.c |-- 10 | |-- S3C2410实时钟驱动 | | `-- s3c2410-rtc.c | `-- 秒设备驱动与应用程序 | |-- second.c | `-- second_test.c |-- 11 | |-- DMA范例 | | |-- 3c505.c | | |-- 3c505.h | | `-- dma.h | `-- 静态映射范例 | `-- mach-smdk2440.c |-- 12 | |-- NVRAM驱动 | | `-- generic_nvram.c | |-- 触摸屏驱动 | | |-- 作为input设备 | | | |-- s3c2410_ts.c | | | `-- s3c2410_ts.h | | `-- 作为普通字符设备 | | `-- s3c2410-ts.c | |-- 看门狗驱动 | | `-- s3c2410_wdt.c | `-- 平台设备 | `-- devs.c |-- 13 | |-- IDE驱动 | | |-- ide-disk.c | | `-- ide-h8300.c | `-- RAMDISK驱动 | `-- rd.c |-- 14 | |-- S3C2410串口驱动 | | |-- regs-gpio.h | | |-- regs-serial.h | | `-- s3c2410.c | `-- 串口核心层 | |-- serial_core.c | `-- serial_core.h |-- 15 | |-- S3C2410 I2C主机驱动 | | |-- i2c-s3c2410.c | | |-- iic.h | | |-- regs-gpio.h | | `-- regs-iic.h | `-- SAA711x I2C设备驱动 | `-- saa711x.c |-- 16 | `-- CS8900以太网设备驱动 | |-- cs89x0.c | `-- cs89x0.h |-- 17 | |-- ALSA工具及库 | | |-- alsa-driver-1.0.15.tar.bz2 | | |-- alsa-firmware-1.0.15.tar.bz2 | | |-- alsa-lib-1.0.15.tar.bz2 | | |-- alsa-oss-1.0.15.tar.bz2 | | |-- alsa-tools-1.0.15.tar.bz2 | | |-- alsa-utils-1.0.13.tar.bz2 | | `-- pyalsa-1.0.15.tar.bz2 | |-- ALSA驱动范例 | | |-- sa11xx-uda1341.c | | `-- uda1341.h | |-- ALSA应用程序范例 | | |-- pcm.c | | `-- pcm_min.c | |-- OSS驱动范例 | | `-- s3c2410-uda1341.c | `-- OSS应用程序范例 | |-- mixer.c | `-- sound.c |-- 18 | |-- FRAMEBUFFER应用程序范例 | | `-- fb_display | | |-- fb_display.c | | |-- fb_display.h | | |-- Makefile | | |-- README | | `-- test.c | `-- S3C2410 LCD驱动 | |-- s3c2410fb.c | `-- s3c2410fb.h |-- 19 | |-- busybox源代码 | | `-- busybox-1.2.1.tar.bz2 | |-- MTD工具 | | `-- mtd-utils-1.0.0.tar.gz | |-- nand驱动范例 | | `-- s3c2410.c | |-- nor驱动范例 | | `-- s3c2410nor.c | `-- yaffs&yaffs2源代码 | |-- yaffs.tar.gz | `-- yaffs2.tar.gz |-- 20 | |-- USB串口驱动 | | |-- usb-serial.c | | `-- usb-serial.h | |-- USB工具 | | `-- usbview-1.0.tar.tar | |-- USB骨架程序 | | `-- usb-skeleton.c | |-- USB键盘驱动 | | |-- input.h | | |-- usb_input.h | | `-- usbkbd.c | `-- usb主机控制器驱动范例 | |-- ohci-s3c2410.c | `-- usb-control.h |-- 21 | |-- PCI骨架程序 | | `-- pci-skeleton.c | `-- PCI驱动范例 | `-- i810_audio.c `-- 22 |-- 范例代码 | |-- oops范例 | | |-- oops_example.asm | | `-- oops_example.c | `-- proc范例 | `-- sim_proc.c `-- 内核调试工具 |-- ddd-3.3.11.tar.gz |-- gdbmod-2.4.bz2 |-- kdb-v4.4-2.6.15-rc5-common-1.bz2 |-- kdb-v4.4-2.6.15-rc5-common-2.bz2 |-- kdb-v4.4-2.6.15-rc5-i386-1.bz2 `-- linux-2.6.15.5-kgdb-2.4.tar.tar 73 directories, 91 files