RTC驱动
2015-08-14 15:58
225 查看
从RTC设备驱动看所有驱动的写法:
1,所有驱动第一步是注册“驱动程序”
2,注册“设备”
3,系统在初始化时,会调用驱动程序的probe函数,完成基本硬件的初始化和设备的注册
RP4412RTC体系结构解释:http://blog.csdn.net/tianxiawuzhei/article/details/7582390
xxx_driver_register先把个新话的东西写完然后进行driver_register
驱动开发人员写的有:
定义平台设备结构体s3c_device_rtc:/arch/arm/plat-samsung/dev-rtc.c;
板文件里注册平台设备(s3c_device_rtc加入smdk4x12_devices[]):/arch/arm/mach-exynos/mach-smdk4x12.c;
定义物理层的平台驱动s3c_rtc_driver:drivers/rtc/rtc-s3c.c
注册物理层的驱动s3c_rtc_driver:drivers/rtc/rtc-s3c.c模块加载时注册
platform_add_devices
为什么定好平台设备的结构体后,要写上到相应的板文件?
答:因为板子初始化的时候,要调用platform_add_devices,注册各种各样的设备,把各种设备都加到平台总线上去。(平台设备的结构体.id等于-1,表明设备只有一个 )
里面会依次调用各个设备的proc函数,探测设备物理上是否存在,存在则进行充分的初始化。
写驱动程序,一定要区分driver和device, 前者是设备所对应的驱动程序,device是设备本身。两者都需要注册,注册前者的目的,是告诉系统,在总线上面有这个驱动程序可以用了。
注册device目的,是让内核知道插入了这样一些设备了。
platform_driver_register的理解:
答:先驱动,都要注册。平台驱动的注册(让系统能找到它),是使用platform_driver_register,是对driver_register进行了封装,
主要是注册了prob等函数,另外就是增加了字节的platform_type 。 平台驱动和其他总线(如USB总线)上的驱动不同,不同体现在(分量上)
int platform_driver_register(struct platform_driver *drv)
{
drv->driver.bus = &platform_bus_type;
if (drv->probe)
drv->driver.probe = platform_drv_probe;
if (drv->remove)
drv->driver.remove = platform_drv_remove;
if (drv->shutdown)
drv->driver.shutdown = platform_drv_shutdown;
return driver_register(&drv->driver);
}
平台驱动的prob函数的作业是什么?
答:两点,一是探测有没有这个设备;二是如果有这个设备,则进行充分的初始化。所以说prob函数是平台驱动的入口. (和模块的入口并不一样,先调用模块入口,在后面某个时刻,再调用Prob函数)
int driver_register(struct device_driver *drv)的作用是什么
为了在内核中对驱动程序进行注册,加到总线类别上面,让当有设备挂载上去时候内核能感知到
1,所有驱动第一步是注册“驱动程序”
2,注册“设备”
3,系统在初始化时,会调用驱动程序的probe函数,完成基本硬件的初始化和设备的注册
RP4412RTC体系结构解释:http://blog.csdn.net/tianxiawuzhei/article/details/7582390
xxx_driver_register先把个新话的东西写完然后进行driver_register
驱动开发人员写的有:
定义平台设备结构体s3c_device_rtc:/arch/arm/plat-samsung/dev-rtc.c;
板文件里注册平台设备(s3c_device_rtc加入smdk4x12_devices[]):/arch/arm/mach-exynos/mach-smdk4x12.c;
定义物理层的平台驱动s3c_rtc_driver:drivers/rtc/rtc-s3c.c
注册物理层的驱动s3c_rtc_driver:drivers/rtc/rtc-s3c.c模块加载时注册
platform_add_devices
为什么定好平台设备的结构体后,要写上到相应的板文件?
答:因为板子初始化的时候,要调用platform_add_devices,注册各种各样的设备,把各种设备都加到平台总线上去。(平台设备的结构体.id等于-1,表明设备只有一个 )
里面会依次调用各个设备的proc函数,探测设备物理上是否存在,存在则进行充分的初始化。
写驱动程序,一定要区分driver和device, 前者是设备所对应的驱动程序,device是设备本身。两者都需要注册,注册前者的目的,是告诉系统,在总线上面有这个驱动程序可以用了。
注册device目的,是让内核知道插入了这样一些设备了。
platform_driver_register的理解:
答:先驱动,都要注册。平台驱动的注册(让系统能找到它),是使用platform_driver_register,是对driver_register进行了封装,
主要是注册了prob等函数,另外就是增加了字节的platform_type 。 平台驱动和其他总线(如USB总线)上的驱动不同,不同体现在(分量上)
int platform_driver_register(struct platform_driver *drv)
{
drv->driver.bus = &platform_bus_type;
if (drv->probe)
drv->driver.probe = platform_drv_probe;
if (drv->remove)
drv->driver.remove = platform_drv_remove;
if (drv->shutdown)
drv->driver.shutdown = platform_drv_shutdown;
return driver_register(&drv->driver);
}
平台驱动的prob函数的作业是什么?
答:两点,一是探测有没有这个设备;二是如果有这个设备,则进行充分的初始化。所以说prob函数是平台驱动的入口. (和模块的入口并不一样,先调用模块入口,在后面某个时刻,再调用Prob函数)
int driver_register(struct device_driver *drv)的作用是什么
为了在内核中对驱动程序进行注册,加到总线类别上面,让当有设备挂载上去时候内核能感知到
相关文章推荐
- 获取SQLSERVER 表结构信息
- 16位或32位或64位编程各数据类型占的字节数
- LeetCode Add Two Numbers 空头节点
- 2015.08.14这一天,canopen 从站终于porting 有突破,可以与主站正常连接!!
- codeforces 204(Div.1 A) Little Elephant and Interval(贪心)
- android-smart-image-view源码分析
- C#使用 System.Net.Mail发送邮件功能
- SimpleDateFormat解析的时候字符串过长问题
- 手机充电器
- MongoDB 3.05集群分片配置
- sas vname 返回最大值对应的变量名
- cmake 生成 CodeBlocks 配置
- 详解Javascript 中的this指针
- Codeforces Round #316 (Div. 2) D. Tree Requests(DFS+状态压缩)
- Codeforces Round #316 (Div. 2)(ABCD)
- Spring注解@Component、@Repository、@Service、@Controller区别
- 前端设计之输入框提示列表的效果
- LeetCode: Copy List with Random Pointer
- JAVA生成图片验证码
- Linux中yum和apt-get用法及区别