【Tiny6410 And Linux】—(2.1)—platform 总线、设备、驱动——原理
2012-05-06 10:42
471 查看
后天就要考试了,PLC,呵呵,这个还不算什么事情,所以呢,继续!
1、platform
总线介绍
一个现实的 Linux
设备和驱动通常都需要挂载在一种总线上,对于本身依附于 PCI、USB、I2C、SPI
等的设备而言,这自然不是问题,但是在嵌入式系统里,SoC 系统中集成的独立的外设控制器、挂载在 SoC
内存空间的外设等确不依附于此类总线。
基于这一背景,Linux
发明了一种虚拟的总线,称为 platform 总线,相应的设备称为 platform_device,而驱动则成为 platform_driver。
Platform
驱动与传统的设备驱动模型相比,优势在与 platform 机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用统一的接口,这样就提高了程序的可移植性!!
2、platform
设备
1)platform
设备描述结构:
Platform
设备由 platform_device 结构表示,定义在 <linux/platform_device.h>
中。
2)设备资源描述结构:
平台设备资源使用 resource
结构来描述,定义在 <linux/ioport.h> 中(该头文件已经包含在 <linux/device.h>
中了)。
3)platform
设备操作方法:
①、分配一个 platform_device
结构,使用函数:
Struct platform_device *platform_device_alloc(const char *name,int id);
▲:name:platform
设备名。
▲:id:设备 id,一般为 -1。
②、为平台设备添加平台设备资源,使用函数:
Int platform_device_add_resources(struct platform_device *pdev,
Const struct resource *res,
Unsigned int num);
▲:pdev:platform
设备结构。
▲:res:指向欲添加资源的集合。
▲:num:添加资源的数量。
③、注册平台驱动,使用函数(通常和 platform_device_alloc()
函数配合使用):
Int platform_device_add(struct platform_device *pdev);
④、注册失败情况下,释放相关内存:
Int platform_device_put(struct platform_device *pdev);
⑤、获取平台设备资源(这个一般应用在驱动程序中),使用函数:
Struct resource *platform_get_resource(struct platform_device *dev,unsigned int type,
Unsigned int num);
▲:dev:资源所属的设备。
▲:type:获取的资源类型。
▲:num:获取的资源数。
3、platform
驱动
Platform
驱动程序用 platform_driver 结构来描述:
平台驱动注册使用函数:
Int platform_driver_register(struct platform_driver *);
1、platform
总线介绍
一个现实的 Linux
设备和驱动通常都需要挂载在一种总线上,对于本身依附于 PCI、USB、I2C、SPI
等的设备而言,这自然不是问题,但是在嵌入式系统里,SoC 系统中集成的独立的外设控制器、挂载在 SoC
内存空间的外设等确不依附于此类总线。
基于这一背景,Linux
发明了一种虚拟的总线,称为 platform 总线,相应的设备称为 platform_device,而驱动则成为 platform_driver。
Platform
驱动与传统的设备驱动模型相比,优势在与 platform 机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用统一的接口,这样就提高了程序的可移植性!!
2、platform
设备
1)platform
设备描述结构:
Platform
设备由 platform_device 结构表示,定义在 <linux/platform_device.h>
中。
Struct platform_device { Const char *name; /* 设备名 */ Int id; /* 设备编号,配合设备名使用 */ Struct device dev; /* 内嵌 device 结构 */ U32 num_resource; Struct resource *resource; /* 设备资源,这里记录了硬件的相关信息 */ … };
2)设备资源描述结构:
平台设备资源使用 resource
结构来描述,定义在 <linux/ioport.h> 中(该头文件已经包含在 <linux/device.h>
中了)。
Struct resource { Resource_size_t start; /* 资源的起始物理地址 */ Resource_size_t end; /* 资源的结束物理地址 */ Const char *name; /* 资源的名称 */ Unsigned long flags; /* 资源的类型,比如 MEM、IO 等 */ Struct resource *parent,*sibling,*child; /* 资源链表指针 */ };
3)platform
设备操作方法:
①、分配一个 platform_device
结构,使用函数:
Struct platform_device *platform_device_alloc(const char *name,int id);
▲:name:platform
设备名。
▲:id:设备 id,一般为 -1。
②、为平台设备添加平台设备资源,使用函数:
Int platform_device_add_resources(struct platform_device *pdev,
Const struct resource *res,
Unsigned int num);
▲:pdev:platform
设备结构。
▲:res:指向欲添加资源的集合。
▲:num:添加资源的数量。
③、注册平台驱动,使用函数(通常和 platform_device_alloc()
函数配合使用):
Int platform_device_add(struct platform_device *pdev);
④、注册失败情况下,释放相关内存:
Int platform_device_put(struct platform_device *pdev);
⑤、获取平台设备资源(这个一般应用在驱动程序中),使用函数:
Struct resource *platform_get_resource(struct platform_device *dev,unsigned int type,
Unsigned int num);
▲:dev:资源所属的设备。
▲:type:获取的资源类型。
▲:num:获取的资源数。
3、platform
驱动
Platform
驱动程序用 platform_driver 结构来描述:
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 (* resume)(struct platform_device *); struct device_driver *driver; const struct platform_device_id *id_table; };
平台驱动注册使用函数:
Int platform_driver_register(struct platform_driver *);
相关文章推荐
- 【Tiny6410 And Linux】—(2.1)—platform 总线、设备、驱动——代码
- 【Tiny6410 And Linux】——基于 platform 总线的按键驱动——代码
- [arm驱动]Platform总线原理
- 【Tiny6410 And Linux】—(2.4)—实现 input 模型按键驱动——原理
- platform总线、设备与驱动
- <2012 12 17> linux驱动中的platform总线架构(含具体IIC设备驱动)
- 总线设备驱动模型---platform
- linux设备总线驱动模型 之 platform总线驱动
- platform总线--从设备找到驱动的过程
- LINUX设备驱动之platform总线
- 【Tiny6410 And Linux】—(1.3)—bus 设备模型——原理
- platform总线、设备与驱动
- 3.0.35 platform 总线、设备与驱动
- Linux驱动编程——platform总线的设备和驱动
- linux驱动中的platform总线架构(含具体IIC设备驱动)
- 【Tiny6410 And Linux】—(1.4)—device 设备模型——原理
- platform总线、设备、驱动
- s3c2410下 platform 总线设备和驱动 led_drv.c led_dev.c 和test
- Xen I/O虚拟化原理——Xen下总线、设备和驱动
- platform总线--驱动发现设备的过程