当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]Linux内核中的platform机制

从Linux 2.6起引入了一套新的驱动管理和注册机制:platform_device和platform_driver。Linux中大部分的设备驱动,都可以使用这套机制,设备用platform_device表示,驱动用platform_driver进行注册。

Linux platform. driver机制和传统的device driver 机制(通过driver_register函数进行注册)相比,一个十分明显的优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform. device提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性(这些标准接口是安全的)。platform机制的本身使用并不复杂,由两部分组成:platform_device和platfrom_driver。通过platform机制开发底层设备驱动的大致流程如图所示。

 

 

图 platform机制开发驱动流程

platform_device结构体用来描述设备的名称、资源信息等。该结构被定义在include/linux/platform_device.h中,定义原型如下:

struct platform_device {

const char * name; //定义平台设备的名称

int id;

struct device dev;

u32 num_resources;

struct resource * resource; //定义平台设备的资源。

};

下面来看一下platform_device结构体中最重要的一个成员struct resource * resource。struct resource被定义在include/linux/ioport.h中,定义原型如下:

struct resource {

resource_size_t start; //定义资源的起始地址

resource_size_t end; //定义资源的结束地址

const char *nAME; //定义资源的名称

unsigned long flags; //定义资源的类型,比如MEM,IO,IRQ,DMA类型

struct resource *parent, *sibling, *child; //资源链表指针

};

通过调用函数platform_add_devices()向系统中添加该设备了,该函数内部调用platform_device_register( )进行设备注册。要注意的是,这里的platform_device设备的注册过程必须在相应设备驱动加载之前被调用,即执行platform_driver_register()之前,原因是驱动注册时需要匹配内核中所有已注册的设备名。

接下来来看platform_driver结构体的原型定义,在include/linux/platform_device.h中,代码如下:

struct platform_driver {

int (*probe)(struct platform_device *);

int (*remove)(struct platform_device *);

void (*shutdown)(struct platform_device *);

int (*suspend)(struct platform_device *, pm_message_t state);

int (*suspend_late)(struct platform_device *, pm_message_t state);

int (*resume_early)(struct platform_device *);

int (*resume)(struct platform_device *);

struct device_driver driver;

};

内核提供的platform_driver结构体的注册函数为platform_driver_register(),其原型定义在driver/base/platform.c文件中,具体实现代码如下:

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;

if (drv->suspend)

drv->driver.suspend = platform_drv_suspend;

if (drv->resume)

drv->driver.resume = platform_drv_resume;

return driver_register(&drv->driver);

}

总结,通常情况下只要和内核本身运行依赖性不大的外围设备,相对独立的,拥有各自独自的资源(地址总线和IRQs),都可以用platform_driver实现。如:LCD,网卡、USB、UART等,都可以用platfrom_driver写,而timer,irq等小系统之内的设备则最好不用platfrom_driver机制。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Meta Platform董事长兼CEO扎克伯格周四宣布,Meta冻结招聘、将进行人员和团队重组,并削减成本、并转移优先事项。扎克伯格称,在过去18年,公司基本上每年都在快速增长,然后最近收入首次持平或略有下降。从我们所...

关键字: 扎克伯格 PLATFORM CE

Sonata Software凭借卓越成绩和创新获得微软嘉奖。  印度班加罗尔2022年9月22日 /美通社/ -- Sonata Software是一家全球IT...

关键字: 微软 PLATFORM BSP SOFTWARE

(全球TMT2022年7月28日讯)近日,智能驾驶平台软件公司零念科技宣布完成超亿元人民币Pre-A轮融资。本轮融资由博华资本和深创投领投,三家老股东均持续超额跟投,万世资本担任独家财务顾问。本轮融资将用于人才投入、技...

关键字: 软件 智能驾驶 PLATFORM 中间件

推动实现联合国可持续发展目标 UNIPLAT成为EUTECH仅有的六个SDG Alliance战略合作伙伴之一 日本横滨2022年7月11日 /美通社/ -- 全球首个(*)供研究及创业人员展示联合国可持续发展目标(...

关键字: NI PLATFORM TE IP

使用区块链技术保护知识产权 - Pre-IP可在法定专利发布之前确保研发内容的所有权 - 日本横滨2021年12月7日 /美通社/ -- 12月6日,其日本中心设在神奈川县新横滨的瑞士Unify Platform A...

关键字: IP NI PLATFORM RELEASE

(全球TMT2021年12月10日讯)12月6日,瑞士Unify Platform AG宣布在该公司的在线平台服务UNIPLAT上推出一项新功能。这项新功能名为Pre-IP,是“Pre (applied) Intell...

关键字: NI PLATFORM IP INTELLIGENT

(全球TMT2021年12月8日讯)亚马逊云科技宣布,无人驾驶汽车科技领导者Aurora选择亚马逊云科技作为其机器学习训练和云上模拟工作负载的首选云提供商。Aurora 使用亚马逊云科技成熟的基础设施和无与伦比的功能组...

关键字: 亚马逊 无人驾驶汽车 DRIVER 机器学习

作者|俊欣来源|关于数据分析与可视化今天小编就来讲讲selenium,我们大致会讲这些内容selenium简介与安装页面元素的定位浏览器的控制鼠标的控制键盘的控制设置元素的等待获取cookies调用JavaScripts...

关键字: PYTHON SELENIUM DRIVER CHROME

首先声明一点,虚表并非是C语言的官方标准的一部分,只是各家编译器厂商在实现多态时的解决方案。另外即使同为虚表不同的编译器对于虚表的设计可能也是不同的,本文主要基于ItaniumCABI(适用于gcc和clang)。从C的...

关键字: AC GE STRUCT DES

Fund Platform(基金的平台)是一个平台,为建立贸易和投资密码的资金在分散的、方便和安全服务。 数字的资金解决方案 与发展的数字社会中的所有方面的人民生活的不可避免地变

关键字: PLATFORM IC MULTI POS
关闭
关闭