驱动之RTC分析
总览
- 嵌入式linux学习目录
- 驱动之input子系统
- 驱动之platform概念
- 驱动之RTC分析
- 驱动之LCD驱动框架和实现
- 驱动之触摸屏驱动框架和实现
- 驱动之USB基础概念和框架
- 驱动之USB设备驱动程序
本文使用 linux-2.6.22.6 内核, 使用jz2440开发板.
字符设备驱动另一种写法
在 驱动之字符设备-框架 里, 使用的是函数 register_chrdev
进行注册的.
其缺点是, 默认调用了 __register_chrdev_region(major, 0, 256, name);
, 也就是会把256个次设备号全部注册掉.
为了合理使用次设备号, 就需要另外一种写法.
static int major; // 确定主设备号 |
本质上, 就是自己实现一遍 register_chrdev
函数里的内容, 来控制子设备号个数.
博客里 驱动之基于LinK+设计按键驱动 这些内容都是由 LinK+
自动实现的.
RTC源码分析
这里以RTC源码为例进行分析, 用于熟悉字符设备的写法和分离分层即platform的概念
/drivers/rtc/rtc-dev.c
提供了所有的RTC驱动层读写函数.
里面进一步调用了 /drivers/rtc/class.c
的一些函数.
这两个文件是linux内核RTC驱动设备的软件抽象核心.
显然的, 后面的很多文件是芯片厂商提供的硬件相关的RTC部分. 譬如 rtc-s3c.c
.
也可以通过分析 rtc-dev.c
里的 rtc_dev_add_device
倒过来找到这些文件.
下面, 我们从底层硬件(rtc-s3c.c
)往上层进行分析, 看看rtc字符设备的整个注册过程.
// subsys_initcall(rtc_init), 系统初始化时调用 |
RTC 测试
前面的分析源码说过, s3c_device_rtc
没有被调用, 因此当前的系统也无法使用rtc.
这里就加入rtc功能, 并测试.
# Ubuntu 主机端 |
原创于 DRA&PHO