zoukankan      html  css  js  c++  java
  • 第四季-专题13-总线设备驱动模型

    专题2-总线设备驱动模型

    第1课-总线设备驱动模型

    1. 总线模型概述

    随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的

    要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux 2.6内核开始提供了全新的设备模型。

    1. 总线

    (1)     描述结构

    在Linux 内核中, 总线由bus_type 结构表示,

    定义在<linux/device.h>

    struct bus_type {

    const char *name; /*总线名称*/

    const char *name; /*总线名称*/

    int (*match) (struct device *dev, struct

    device_driver *drv); /*驱动与设备的匹配函数*/

    ………

    }

    int (*match)(struct device * dev, struct device_driver * drv)

    当一个新设备或者新驱动被添加到这个总线时,该函数被调用。用于判断指定的驱动程序是否能处理指定的设备。若可以,则返回非零。

    (2)     注册

    总线的注册使用如下函数bus_register(struct bus_type *bus)若成功,新的总线将被添加进系统,并可在/sys/bus 下看到相应的目录。总线的注销使用:

    void bus_unregister(struct bus_type *bus)

    (3)     注销

    1. 驱动

    (1)     描述结构

    在Linux内核中, 驱动由device_driver结构表示。

    struct device_driver {

    {

    const char *name; /*驱动名称*/

    const char *name; /*驱动名称*/

    struct bus_type *bus; /*驱动程序所在的总线*/

    int (*probe) (struct device *dev);

    ………

    }

    (2)     注册

    驱动的注册使用如下函数

    int driver_register(struct device_driver *drv)

    驱动的注销使用:

    void driver_unregister(struct device_driver *drv)

    (3)     注销

    1. 设备

    1. 描述结构

    在Linux内核中, 设备由struct device结构表示。

    struct device {

    {

    const char *init_name; /*设备的名字*/

    const char *init_name; /*设备的名字*/

    struct bus_type *bus; /*设备所在的总线*/

    ………

    }

    2. 驱动注册与注销

    设备的注册使用如下函数:int device_register(struct device *dev)

    设备的注销使用:void device_unregister(struct device *dev)

    在总线上挂载设备

    第2课-平台设备驱动设计

    1. 平台总线概述

    平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这总线的模型对设备与驱动进行了管理,这样提高了程序的可移植性。

           通过平台总线机制开发设备驱动的流程如图。

     

    1. 平台设备

    平台设备使用struct platform_device来描述:

    struct platform_device {

    const char *name; /*设备名*/

    int id; /*设备编号,配合设备名使用*/

    struct device dev;

    u32 num_resources;

    struct resource *resource; /*设备资源*/

    }

           struct resource {

    resource_size_t start;

    resource_size_t end;

    const char *name;

    unsigned long flags; /*资源的类型*/

    unsigned long flags; /*资源的类型*/

    struct resource *parent, *sibling, *child;

    };

    注册平台设备,使用函数:

    int platform_device_register(struct platform_device *pdev)

     

     

    完成按键的注册

    1. 平台驱动

    平台驱动使用struct platform_driver 描述:

    struct platform_driver {

    int (*probe)(struct platform_device *);

    int (*remove)(struct platform_device *);

    int (*struct platform_device *);

    ……

    }

    平台驱动注册使用函数:

    int platform_driver_register(struct platform_driver *)

    将按键驱动修改我平台驱动模型

  • 相关阅读:
    自学python:python学习笔记之Ubuntu 16.04网络的配置
    Python 3 中字符串和 bytes 的区别
    Python map学习笔记
    Python lambda 知识点
    Eclipse中Activiti插件的安装
    Activiti简介
    Jquery ajax回调函数不执行
    Spring Boot安装及入门实现
    mysql给root开启远程访问权限
    linux下安装Tomcat
  • 原文地址:https://www.cnblogs.com/free-1122/p/11452262.html
Copyright © 2011-2022 走看看