zoukankan      html  css  js  c++  java
  • 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结构体中某些函数的功能

    五.平台设备与平台驱动代码分析

     

  • 相关阅读:
    lnmp配置Yii2规则
    vue中前进刷新、后退缓存,列表缓存和回到原位置
    vue 或者传统h5移动端input被输入法键盘挡住解决方法
    uni-app知识
    typescript
    flow
    js点击按钮分别实现全屏以及退出全屏的方法
    vue.config.js配置本地,测试,开发环境变量
    git常用指令
    Git指令
  • 原文地址:https://www.cnblogs.com/Ph-one/p/4676391.html
Copyright © 2011-2022 走看看