linux设备驱动简介一.ppt

linux设备驱动简介一.ppt

ID:48044463

大小:469.50 KB

页数:35页

时间:2020-01-13

linux设备驱动简介一.ppt_第1页
linux设备驱动简介一.ppt_第2页
linux设备驱动简介一.ppt_第3页
linux设备驱动简介一.ppt_第4页
linux设备驱动简介一.ppt_第5页
资源描述:

《linux设备驱动简介一.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux设备驱动简介2010-07-11Linux设备驱动简介(1)驱动入口函数平台设备驱动设备文件驱动入口函数驱动入口函数几乎每个linux驱动都会有个module_init(XXX_init),这个函数就是驱动的入口函数,负责驱动的加载。module_init定义在kernelincludelinuxinit.h根据模块是否动态加载被定义为两种形式驱动入口函数静态加载module此属性指定改变量将放在.initcall6.init区段。驱动入口函数在vmlinux.lds.S中指定了

2、驱动入口函数宏INITCALLS驱动入口函数其他初始化模块的宏定义根据不同的id号以保证模块加载的前后顺序,同一级别的模块,其顺序无法保证。驱动入口函数kernelinitmain.cstart_kernel->rest_init->kernel_init->do_basic_setup->do_initcallsdo_initcalls调用后,用moudle_init定义的驱动初始化函数即被执行。驱动入口函数驱动在初始化阶段如果有相互前后的依赖关系,需要加以区分,不能统一都是用modul

3、e_init初始化,例如:开机初始化系统时间的函数rtc_hctosys,其功能依赖RTC驱动,所以需要module_init(msmrtc_init);late_initcall(rtc_hctosys);I2C驱动由于会被众多I2C设备的驱动调用,所以需要subsys_initcall(msm_i2c_init_driver);module_init(bma150_init);驱动入口函数linuxkernel中有很大一部分代码是设备驱动代码,这些驱动代码都有初始化等函数,q且一般都只执行一

4、次,为了有更有效的利用内存,这些代码所占用的内存需要释放出来。对只需要初始化运行一次的函数都加上__init属性,这些函数将被放在(.init.text)段,使用后其空间将被释放。kernel_init->init_post->free_initmem驱动入口函数动态加载module(非编译到kernel的驱动程序)intinit_module(void)__attribute__((alias(#initfn)))用来告诉编译器将init_module作为initfn的别名alias替代ini

5、tfn这样可以不用显式的声明init_module,而是使用更具有模块化名字xxx_init来让人更容易理解的定义入口,之后insmod解析init_module入口执行之。平台设备驱动平台设备驱动从Linux2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。Linux中大部分的设备驱动,都可以使用这套机制,设备用Platform_device表示,驱动用Platform_driver进行注册.一般来说相对独立,拥有独自的资源都可以用平台设

6、备驱动来实现,例如LCD,usb,camera等等。Board-msm7x27.c中msm7x2x_init->platform_add_devices和platform_device_register即注册了大量的平台设备平台机制将设备本身的资源(设备的地址,中断号)注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platformdevice提供的标准接口进行申请并使用。提高了驱动和资源管理的独立性。平台设备驱动platform_device平台设备驱动以I2C为例,其平台设备及资源

7、定义为其中定义了两组资源,分别描述了MEM和IRQ类型的资源。在平台驱动中即可抽象的使用平台设备驱动平台设备驱动的初始化流程platformbus先被kenrel注册系统初始化过程中先platform_add_devices或者platform_device_register,将平台设备(platformdevices)注册到平台总线中(platformbus)平台驱动(platformdriver)与平台设备(platformdevice)的关联是在platform_driver_regist

8、er或者driver_register中实现的,一般这个函数在驱动的初始化过程调用通过这个三步,就将平台总线,设备,驱动关联起来。平台设备驱动kenrel注册platformbus(bus也是一种device)kernel_init->do_basic_setup->driver_init->platform_bus_init->bus_register平台设备驱动将平台设备(platformdevices)注册到平台总线中(platformbus),系统启动阶段,总线的驱动链表还是空的,所以启

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。