linux设备驱动那点事儿之平台设备理论篇
一:Platform总线
1.1概述
一个现实的linux设备驱动通常需要挂接在一种总线上,对于本身依附于PCI,USB,IIC,SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,
SOC系统中集成的独立的外设控制器,挂接在SOC内存空间的外设等确不依附于此类总线。基于这一背景,linux发明了一种虚拟的总线,称为platform总线,相应的
设备称为platform_device,而驱动成为platform_driver.Platform总线是linux2.6内核加的一种虚拟总线.
1.2.Platform总线优势
Platform驱动与传统的设备驱动模型相比,优势在于Platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用统一的接口,提高了程序的可移植性。
二.平台设备的驱动软件设计流程

三.平台设备:
3.1.平台设备使用struct Platform_device来描述
struct platform_device {
const char * name; //设备名
int id;//设备编号,配合设备名使用
struct device dev;
u32 num_resources;//设备所使用各类资源数量
struct resource * resource;//设备资源
};
3.2.分配一个平台设备结构体
Strcut platform_device的分配使用:
struct platform_device *platform||_device_alloc(const char *name,int id)
参数:
Name:设备名
Id:设备id,一般为-1
3.3.平台设备注册
注册平台设备,使用函数:
Int platform_device_add(struct paltform_device *pdev)
3.4.设备资源
平台设备资源使用struct resource来描述
struct resource {
resource_size_t start;//资源的起始物理地址
resource_size_t end;//资源的结束物理地址
const char *name;//资源的名称
unsigned long flags;//资源的类型,如MEM,IRQ
struct resource *parent, *sibling, *child;//资源的链表指针
};
3.5.资源的获取
Struct resource *platform_get_resource(struct platform_device *dev,unsigned int type,unsigned int num)
参数:
Dev:资源所属的设备
Type:获取的资源类型
Num:获取的资源数
Eg:platform_get_resource(pdev,IORESOURCE_IRQ,0)
四:平台驱动
4.1.平台驱动描述
平台驱动使用struct 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;
struct platform_device_id *id_table;
};
4.2.平台驱动注册
平台驱动注册使用函数:
int platform_driver_register(struct platform_driver*)
4.3.实现struct platform_driver结构体中某些函数的功能
五.平台设备与平台驱动代码分析
linux设备驱动那点事儿之平台设备理论篇的更多相关文章
- Linux内核驱动学习(四)Platform设备驱动模型
Linux platform设备驱动模型 文章目录 Linux platform设备驱动模型 前言 框架 设备与驱动的分离 设备(device) 驱动(driver) 匹配(match) 参考 前言 ...
- Linux中总线设备驱动模型及平台设备驱动实例
本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方 ...
- 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联
转载自:http://www.kancloud.cn/yueqian_scut/emlinux/106829 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sy ...
- [kernel]字符设备驱动、平台设备驱动、设备驱动模型、sysfs几者之间的比较和关联
转自:http://www.2cto.com/kf/201510/444943.html Linux驱动开发经验总结,绝对干货! 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动 ...
- Linux Framebuffer驱动剖析之二—驱动框架、接口实现和使用
深入分析LinuxFramebuffer子系统的驱动框架.接口实现和使用. 一.LinuxFramebuffer的软件需求 上一篇文章详细阐述了LinuxFramebuffer的软件需求(请先理解第一 ...
- Linux Framebuffer驱动剖析之一—软件需求
嵌入式企鹅圈将以本文作为2015年的终结篇,以回应第一篇<Linux字符设备驱动剖析>.嵌入式企鹅圈一直专注于嵌入式Linux和物联网IOT两方面的原创技术分享,稍后会发布嵌入式企鹅圈的2 ...
- Linux Framebuffer驱动剖析之中的一个—软件需求
嵌入式企鹅圈将以本文作为2015年的终结篇,以回应第一篇<Linux字符设备驱动剖析>.嵌入式企鹅圈一直专注于嵌入式Linux和物联网IOT双方面的原创技术分享,稍后会公布嵌入式企鹅圈的2 ...
- 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇
驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...
- 芯灵思SinlinxA33开发板 Linux平台总线设备驱动
1.什么是platform(平台)总线? 相对于USB.PCI.I2C.SPI等物理总线来说,platform总线是一种虚拟.抽象出来的总线,实际中并不存在这样的总线. 那为什么需要platform总 ...
随机推荐
- C# 调试程序弹出 没有可用于当前位置的源代码 对话框
解决方案: 1.右键点击解决方案->属性->通用属性->调试源文件. 2.看看你的程序有没有被增加到“不查找这些源文件”这个框里. 3.如果有删除,然后重新编译即可调试,解决问题.
- iOS真机调试之我见
入职20多天,以前一直以为iOS真机调试是多么复杂的事情,但在公司大牛的帮助下:终于理清头绪,由于公司证书已申请,文章中免不了旁征博引. 1.首先,得有苹果开发者账号,如果在公司,公司会提供:不在公 ...
- iOS推送通知流程
①注册推送通知使用方法:registerUserNotificationSettings, registerForRemoteNotifications ④APP发送deviceToken到第三方: ...
- Colored Linux Man pages
Colored Linux Man pages 一.什么是Linux Man 参考: 二.如何高效率地使用Man 三.给Linux Man命令添加点颜色. 1.Unix / Linux: Displa ...
- C++ #pragma 预处理指令
#pragma 预编译指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征 ...
- android开发之GenyMotion与intelliJ的配置
(注意:这是在你的电脑上安装了intelliJ和安卓SDK后才进行的工作,如果没有intelliJ和安卓SDK,请先安装以上两样东西) 号称史上最快乐的模拟器GenyMotion,试一下. 第一步:下 ...
- c#WebBrowser进阶
WebBrowser的基本功能就是访问网页,但是由于它本身就不在主线程上面,所以程序判断它什么时候加载完成了,比较麻烦.为此我集合从网上找到的内容,做了一个例子. 其中包括了给WebBrowser设置 ...
- 图片裁切插件jCrop的使用心得(三)
在这一篇里,我来具体讲讲代码该如何写. 下面是jCrop的初始化代码 //图片裁剪插件Jcrop初始化 function initJcrop() { // 图片加载完成 document.getEle ...
- javascript基础DOM操作
DOM 中的三个字母,D(文档)可以理解为整个 Web 加载的网页文档:O(对象)可以理解为类似 window 对象之类的东西,可以调用属性和方法,这里我们说的是 document对象:M(模型)可以 ...
- C#简单的tcpserver
实现一个简单的TCPserver,用tcplistener实现. 当收到客户端特定信息"101"时,发送给客户端"202“指令. using System; using ...