Linux 总线设备驱动模型 (一)

总线设备驱动模型

  一. 总线模型概述

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

    2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux2.6内核开始提供了全新的设备模型。

  二. 总线

    1. 描述设备

      1. 在Linux 内核中, 总线由bus_type结构表示, 定义在<linux/device.h>

       structbus_type

       {

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

        int(*match)  (structdevice *dev, structdevice_driver*drv);    /*驱动与设备的匹配函数*/

        ………

       }

       2. int(*match)(structdevice * dev, structdevice_driver* drv)

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

    2. 注册

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

    3. 注销

      总线的注销使用函数 : void bus_unregister(structbus_type*bus) 

  三. 驱动

    1. 描述设备 

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

      structdevice_driver

      {

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

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

       int(*probe) (structdevice *dev);

       ………

      }

    2. 注册

      #驱动的注册使用如下函数

        intdriver_register(structdevice_driver*drv)

    3. 注销

      #驱动的注销使用如下函数

        void driver_unregister(structdevice_driver*drv)

  四. 设备

    1. 描述设备

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

      structdevice 、

      {

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

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

        ………

      }

    2. 注册

      #设备的注册使用如下函数

       intdevice_register(structdevice *dev)

    3. 注销

      #设备的注销使用以下函数

      void device_unregister(structdevice *dev)

原文地址:https://www.cnblogs.com/lvxiaoning/p/5154770.html