platform device driver

platform device driverplatform总线是在linux2.6内核中加入的一种虚拟总线。platform机制有两部分组成platform_device和platform_driver.structplatform_device{   constchar   *name;   int      id;   structdevice   dev;   u32      num_resources;   structresource   *resource;};plat

大家好,又见面了,我是你们的朋友全栈君。

platform总线是在linux 2.6 内核中加入的一种虚拟总线。platform机制有两部分组成platform_device和platform_driver.

Platform device是linux上一种具有自我管理功能的一个subsystem。它包含了一些基于port的legacy device以及一些host bridge 连接外部总线的设备再者就是embedded system中的许多设备也是platform device。不管是什么设备,只要它属于platform device都有一个共同的特点:
       CPU bus直接寻址
还有一种很少的情况:platform device连接在其他bus的某个segment上但是它的registers是直接寻址的

 

struct platform_device {

    const char    * name;
    int        id;
    struct device    dev;
    u32        num_resources;
    struct resource    * resource;
};

 

 Platform device是一种device自己是不会做事情的,要有人为它做事情,那就是platform driver。下面介绍platform driver。

 

platform driver遵循linux系统的driver model(这个内容是很大的内容有兴趣的可以自己学习)。对于device的discovery/enumerate都不是driver自己完成的而是有由系统的driver注册机制完成。driver编写人员只要将注册必须的数据结构初始化并调用注册driver的kernel API就可以了。以下是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 (*suspend_late)(struct platform_device *, pm_message_t state);
        int (*resume_early)(struct platform_device *);
        int (*resume)(struct platform_device *);
        struct device_driver driver;
};

 

API:
int platform_device_register(struct platform_device *pdev);
int platform_add_devices(struct platform_device **pdevs, int ndev);
int platform_driver_register(struct platform_driver *drv);

 

 

platform机制开发设备驱动的流程如下:

定义platform_device—>注册platform_device—>定义platform_driver—>注册 platform_driver.

 

下面介绍下在linux s3c6410中加入 led平台驱动的方法:

首先要在bsp文件中加入

///*led driver support*/
static struct gpio_led s3c6410_leds[] = {

[0] = {

     .name = “LED10”,
  .gpio = S3C64XX_GPK(4),
   },
[1] = {

  .name = “LED12”,
  .gpio = S3C64XX_GPK(5),
   },
[2] = {

  .name = “LED13”,
  .gpio = S3C64XX_GPK(6),
   },
[3] = {

  .name = “LED14”,
  .gpio = S3C64XX_GPK(7),
  },
};

 

static struct gpio_led_platform_data s3c6410_gpio_led_pdata = {

 .num_leds = ARRAY_SIZE(s3c6410_leds),
 .leds = s3c6410_leds,
};

 

static struct platform_device s3c_device_led = {

  .name = “leds-gpio”,
  .id   = 1,
  .dev  = {

        .platform_data = &s3c6410_gpio_led_pdata,
     },

};
仔细看你就会发现与设备相关的信息都是在bsp中,即在bsp 中主要实现了platform_device 这个结构体。

 

而在驱动root@wsh-desktop:/home/mini/linux-2.6.28.6/drivers/leds# emacs leds-gpio.c主要是实现了platform_driver

 

static struct platform_driver gpio_led_driver = {

 .probe  = gpio_led_probe,
 .remove  = __devexit_p(gpio_led_remove),
 .suspend = gpio_led_suspend,
 .resume  = gpio_led_resume,
 .driver  = {

  .name = “leds-gpio”,//设备名
  .owner = THIS_MODULE,
 },

};

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163794.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 应用程序框架(一):DDD分层架构:领域实体(基础篇)

    应用程序框架(一):DDD分层架构:领域实体(基础篇)

  • javaweb酒店管理系统源代码_java简单酒店管理系统代码

    javaweb酒店管理系统源代码_java简单酒店管理系统代码大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT)、PYTHON、PHP、C#、安卓等多项技术。今天将为大家分析一个小型酒店管理系统(当前酒店管理系统已经得到了充足的发展和完善,一些大的酒店购买了功能强大、数据量处理快速、客户行为研究的软件,借此来提升酒店的核心竞争力。但是对于一些中小规模的酒店而言,昂贵的系统花费、专人的维护是不现实的,也是非常不灵活的。…

  • 常用的前端JavaScript方法封装

    常用的前端JavaScript方法封装1、输入一个值,返回其数据类型functiontype(para){returnObject.prototype.toString.call(para)}2、数组去重functionunique1(arr){return[…newSet(arr)]}functionunique2(arr){varobj={};returnarr.filter(ele=>{if(!obj[ele])..

  • 微信公众号开发——2、微信网页开发

    微信公众号开发——2、微信网页开发第一部分、为公众号菜单嵌入网页一、关键参考文档 微信JS-SDK说明文档 。二、编辑模式嵌入网页在公众号平台下,自定义菜单,添加菜单,并选择菜单内容跳转到指定页面地址即可(需认证后方可添加页面地址,个人账号暂不支持认证)。三、开发者模式嵌入网页(通过微信公众平台接口调试工具动态生成菜单)1、基础支持中,通过appid和secret获取access_token,该值有效期为7

  • 考研数据库系统概论题目整理总结_数据库系统概论pdf

    考研数据库系统概论题目整理总结_数据库系统概论pdf数据库系统概论题目自整理说复试题目过于牵强,只是自己整理的一些知识点而已,为了便于理解和背诵,有些部分定义和说明尽量简明扼要,如有错误请多多指教!(不可转载)1.试述数据、数据库、数据库系统、数据库管理系统的概念。(l)数据(Data):描述事物的符号记录称为数据。数据的含义称为语义,数据与其语义是不可分的。(2)数据库(DataBase,简称DB):若干个相互之间有关联关系的表的集合,表就是关系。数据库中的数据具有永久存储,易扩展,可共享的特点。(3)数据库系统(Data

  • apache 负载均衡_nginx轮询策略配置

    apache 负载均衡_nginx轮询策略配置Apache负载均衡配置详解

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号