Linux内核lpc总线驱动,platform驱动管理机制

本文详细介绍了Linux内核中的platform_device和platform_driver管理机制,包括数据结构、注册流程和资源管理。platform_device用于表示设备,platform_driver用于驱动,两者通过名字匹配进行绑定。在注册过程中,资源管理涉及IO端口、内存等,并通过资源树记录资源使用情况。平台驱动注册简单,主要负责电源管理。资源的申请和释放是设备驱动中必不可少的步骤。
摘要由CSDN通过智能技术生成

第1章platform驱动管理机制

Linux2.6内核引入了一套新的驱动管理机制:Platform_device和Platform_driver。设备用Platform_device表示,驱动用Platform_driver表示,另外设备描述了使用的资源,驱动则负责电源管理和使用资源。由于驱动和资源之间的独立,使得程序的可移植性和可扩展性大大增强。

1.1platform_device

1.1.1数据结构

plarform设备用platform_device来表示,如程序清单1.1所示。

程序清单1.1platform_device

/* include/linux/platform_device.h */

struct platform_device {

constchar*name;①

intid;②

structdevicedev;③

u32num_resources;④

structresource* resource;⑤

};

各个成员的解释如下:

①name指向设备的名字字符串,这个名字用来和同名的platform_driver进行匹配。

②id是设备编号(如果有多个同类设备的话),如果只有一个则需设为-1。

③设备模型用到的成员。

④使用到的资源的数量。

⑤资源数组头地址。

最后一个成员resource指向此设备用到的资源的数组,struct resource的定义如程序清单1.2所示。

程序清单1.2struct resource

/* include/linux/ioport.h */

struct resource {

resource_size_tstart;①

resource_size_tend;②

constchar*name;③

unsignedlongflags;④

structresource*parent, *sibling,*child;⑤

};

#define IORESOURCE_BITS0x000000ff/*Bus-specific bits */

#define IORESOURCE_IO0x00000100/* Resource type */

#define IORESOURCE_MEM0x00000200

#define IORESOURCE_IRQ0x00000400

#define IORESOURCE_DMA0x00000800

#define IORESOURCE_PREFETCH0x00001000/* No side effects */

#define IORESOURCE_READONLY0x00002000

#define IORESOURCE_CACHEABLE0x00004000

#define IORESOURCE_RANGELENGTH0x00008000

#define IORESOURCE_SHADOWABLE0x00010000

#define IORESOURCE_SIZEALIGN0x00020000/* size indicates alignment */

#define IORESOURCE_STARTALIGN0x00040000/* start field is alignment */

#define IORESOURCE_DISABLED0x10000000

#define IORESOURCE_UNSET0x20000000

#define IORESOURCE_AUTO0x40000000

#define IORESOURCE_BUSY0x80000000/* Driver has marked this resource busy*/

各个成员的解释如下:

①start记录资源范围的起始值,比如一段内存空间的首地址。

②end记录资源范围的结束位置。

③name资源的名字。

④flags用来记录资源类型以及是否可写、忙碌等信息,各位的定义如程序清单1.2所示。

⑤分别记录资源树的父节点、兄弟节点和子节点。

1.1.2注册流程

注册platform_device有两个接口platform_add_devices和platform_device_register,它们的代码如所示。

程序清单1.3platform_device注册接口

/* drivers/base/platform.c */

int platform_add_devices(struct platform_device**devs, int num)

{

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值