RTC设备驱动

来源:互联网 发布:江南大学网络教育入口 编辑:程序博客网 时间:2024/06/05 04:45

从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)的作用是什么

为了在内核中对驱动程序进行注册,加到总线类别上面,让当有设备挂载上去时候内核能感知到

0 0
原创粉丝点击