zoukankan      html  css  js  c++  java
  • 平台设备驱动模型

    1.总线驱动模型简介

      - 在Linux2.6的设备驱动模型中,关心总线、设备和驱动三个实体。总线将设备和驱动绑定。

      - 在嵌入式系统里,SOC系统中集成的独立的外设控制器、挂接在SOC内存空间的外设等却不依附于此类总线。基于该背景,Linux发明了一种虚拟总线,称为platform总线,相应的设备称为platform_device, 而驱动程序称为platform_driver。

    2.特点

      - 分层结构,将驱动程序分成了平台设备和平台驱动

      - 平台设备将设备本身的资源注册进内核,可以由内核统一管理

      - 统一了设备驱动模型,使只能电源管理更容易实现

      - 可移植性,通用性更好

    3.platform设备层编程

      - 需要实现结构体struct platform_device

        * 初始化struct resource结构变量

        * 初始化struct platform_device结构变量

        * 向系统注册设备,使用platform_device_register函数

      - 设备层API

        * platform_device_register:向内核注册一个平台设备

        * platform_device_unregister:从内核删除

        * platform_add_devices:把devs数组中的num个平台设备结构注册到内核中

    4.platform驱动层编程

      - 需要实现结构体 struct platform_driver

        * 编写探测函数probe

        * 编写探测函数remove

        * 填充struct platform_driver下struct device_driver driver成员的子成员name, name的值需要和device的name相同

        * 调用platform_driver_register函数进行注册

      - proble函数框架

        * 获取平台设备私有数据

        * 获取平台设备占用的物理资源

        * 如果是内存资源,则向内核申请物理内存资源,若为中断资源,则进行中断函数注册

        * 硬件初始化

        * 注册用户空间的接口

      - remove函数框架

        与probe函数为反过程,注销probe函数注册的资源

      - 核心数据结构

        struct device_driver

      - 核心API

        * platform_driver_register:向内核注册一个平台驱动结构

        * platform_driver_unregister:把指针的平台设备从内核删除

        * platform_get_resource:获取物理资源结构地址

        * platform_get_irq:从平台设备指针的资源中获取中断号

  • 相关阅读:
    UNIX时间戳/日期转换
    慎用date获取未来时间
    lnmp集成开发环境安装pdo_dblib扩展
    elementary OS下netbeans中文乱码的问题
    一个轻量级javascript框架的设计模式
    debian清空消息通知
    一道数组方面的笔试题
    模拟post提交
    P2970 [USACO09DEC]自私的放牧Selfish Grazing
    P1063 能量项链
  • 原文地址:https://www.cnblogs.com/Mr-ox/p/6410180.html
Copyright © 2011-2022 走看看