您的位置 首页 分销

Linux驱动中的platform

从Linux2.6内核起,引入一套新的驱动管理和注册机制:platform_device 和 platform_driver 。Linux 中大部分的设备驱动,都可以使用这套机制,设备用 platf

从Linux2.6内核起,引进一套新的驱动办理和注册机制:platform_device 和 platform_driver 。Linux 中大部分的设备驱动,都可以运用这套机制,设备用 platform_device 表明;驱动用 platform_driver 进行注册。

Linux platform driver 机制和传统的device driver机制(即:经过 driver_register 函数进行注册)比较,一个非常显着的优势在于platform机制将设备自身的资源注册进内核,由内核统一办理,在驱动程序顶用运用这些资源时,经过platform device供给的标准接口进行请求并运用。

platform 是一个虚拟的地址总线,比较 PCI、USB,它首要用于描绘SOC上的片上资源。platform 所描绘的资源有一个共同点:在CPU 的总线上直接取址。渠道设备会分到一个称号(用在驱动绑定中)以及一系列比如地址和中断请求号(IRQ)之类的资源。

platform 总线下驱动的开发进程是:

1、 设备

需求完结的结构体是:platform_device 。

1)初始化 resource 结构变量

2)初始化 platform_device 结构变量

3)向体系注册设备:platform_device_register。

以上三步,有必要在设备驱动加载前完结,即履行platform_driver_register()之前,原因是驱动注册时需求匹配内核中一切已注册的设备名。platform_driver_register()中增加device到内核终究仍是调用的device_add函数。Platform_device_add和device_add最首要的区别是多了一步insert_resource(p, r),行将platform资源(resource)增加进内核,由内核统一办理。

2、驱动

驱动注册中,需求完结的结构体是:platform_driver 。

在驱动程序的初始化函数中,调用了platform_driver_register()注册 platform_driver 。需求留意的是:platform_driver 和 platform_device 中的 name 变量的值有必要是相同的 。这样在 platform_driver_register() 注册时,会将当时注册的 platform_driver 中的 name 变量的值和已注册的一切 platform_device 中的 name 变量的值进行比较,只要找到具有相同称号的 platform_device 才干注册成功。当注册成功时,会调用 platform_driver 结构元素 probe 函数指针。

platform_driver_register()的注册进程:

1 platform_driver_register(s3c2410fb_driver)

2 driver_register(drv->driver)

3 bus_add_driver(drv)

4 driver_attach(drv)

5 bus_for_each_dev(drv->bus, NULL, drv, __driver_attach)

6 __driver_attach(struct device * dev, void * data)

7 driver_probe_device(drv, dev)

8 really_probe(dev, drv)

在really_probe()中:为设备指使办理该设备的驱动:dev->driver = drv, 调用probe()函数初始化设备:drv->probe(dev)

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/297533.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部