<总线模型概述>

随着技术的发展,系统的拓扑结构也越来越复杂,对热插拔。跨平台移植性的要求越来越高,从Linux2.6内核开始提供全新的设备模型。将所有的驱动挂载到计算机的总线上(比如USB总线),当有设备连接到总线上的时候,总线能够感知到,这时系统就会把挂载到总线上是所有驱动和设备匹配。通过不同的识别方式,知道找到相应的驱动。

<总线设备驱动>

定义并描述总线设备:
struct bus_type{

const char  //总线名称

int(*match)(struct device *dev,struct  device_driver *drv);  //驱动和设备的匹配函数

}

向linux系统注册总线:

bus_register(struct bus_type *bus)

如果注册成功,新总线将被添加进系统,并在/sys/bus下看到相应的目录。

向Linux系统注销总线:

void bus_unregister(struct bus_type *bus)

定义并描述Linux总线驱动:

struct device_driver{

const char ;//驱动名称

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

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

}

向Linux系统注册总线驱动:

int driver_register(struct device_driver *drv)

向Linux系统注销总线驱动:
void driver_unregister(struct device_driver*drv)

<设备>

描述设备:

struct device

{

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

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

}

注册:

int device_register(struct device *dev)

注销:

void device_unregister(struct device *dev)

在总线上挂载一个设备:

平台总线对总线驱动模型做详细的讲解:

<平台总线设备设计>

1)平台总线概述

平台总线(platform bus)是Linux2.6内核中加入的一种虚拟总线,其优势在于采用了总线模型对驱动和设备进行管理,这样提高了程序的可移植性。也就是说内核中已经给我们创建好了这种总线,只需要将设备和驱动挂在到总线上就行了。

平台总线开发流程:

平台总线设备和驱动的匹配机制:
(1)如果驱动中有id_table ,这就用设备号进行匹配

(2)但是大多是用设备名和驱动名进行匹配

2)平台设备

描述平台设备:
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;//资源类型,内核已经用宏定义好了

struct resource  *parent,*sibling,*child;

};

注册平台设备:

int platform_device_register(struct platform _device *pdev)

3)平台驱动

描述平台结构:

struct platform_driver{

int (*probe)(struct platform_device *);

int(*remove)(struct platform_device *);

...............

}

 
<kobject和kobj_type以及kobj_type和attribute/sysfs_ops 之间的关系>

备注:在linux 设备模型中的,在“内核”中使用kobject 结构来表示,在"用户空间"使用sysfs来表示,表象形式是文件夹和文件树。

a:kobject 代表sysfs 系统中的一个目录,其中name就是其中的该目录的名称
b:kobjec 在sysfs 中的位置(组织层次结构)由parent 指定.
    所有属于该kset 的kobject的parent指针都指向kset 的kobject
    所有属于该kset 的kobject的kset 指针都指向该kset
c:当kobject中的引用计数为0 时,系统将调用kobj_type 中的函数release()将驱动所占有的资源释放掉
d:添加非默认属性文件的调用函数
    int sysfs_create_file(struct kobject *kobj,const struct atrribute *attr)
e:kobj_type
    所谓属性,是指对于任何一个硬件有该硬件的特点,比如硬件喇叭,会有最基本的音量属性。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

Linux设备驱动模型(sysfs)的更多相关文章

  1. LINUX设备驱动模型之class

    转自 https://blog.csdn.net/qq_20678703/article/details/52754661 1.LINUX设备驱动模型中的bus.device.driver,.其中bu ...

  2. Linux设备驱动模型底层架构及组织方式

    1.什么是设备驱动模型? 设备驱动模型,说实话这个概念真的不好解释,他是一个比较抽象的概念,我在网上也是没有找到关于设备驱动模型的一个定义,那么今天就我所学.所了解 到的,我对设备驱动模型的一个理解: ...

  3. Linux 设备驱动模型

    Linux系统将设备和驱动归一到设备驱动模型中了来管理 设备驱动程序功能: 1,对硬件设备初始化和释放 2,对设备进行管理,包括实参设置,以及提供对设备的统一操作接口 3,读取应用程序传递给设备文件的 ...

  4. linux设备驱动模型之Kobject、kobj_type、kset【转】

    本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74838165 版权声明:本文为博主原创文章,转载请注明http://blog.c ...

  5. Linux设备驱动模型简述(源码剖析)

    1. Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写.Linux设备驱动模型包含设备(device).总线(bus).类(class)和 ...

  6. Linux设备驱动模型之platform(平台)总线详解

    /********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /*********** ...

  7. 探究linux设备驱动模型之——platform虚拟总线(一)

    说在前面的话 :      设备驱动模型系列的文章主要依据的内核版本是2.6.32的,因为我装的Linux系统差不多就是这个版本的(实际上我用的fedora 14的内核版本是2.6.35.13的.) ...

  8. linux设备驱动模型

    尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备驱动模型的学习非常重要. Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统 ...

  9. linux设备驱动模型(kobject与kset)

    Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述.换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要 ...

  10. Linux设备驱动模型【转】

    本文转载自:http://blog.csdn.net/xiahouzuoxin/article/details/8943863 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+ ...

随机推荐

  1. python读写mysql

    读取mysql数据 # -*- coding: utf-8 -*- # 导入必要模块 import pandas as pd from sqlalchemy import create_engine ...

  2. linux tar 解压出错

    今天用tar -xzvf php-7.2.3.tar.gz 解压php的tar包时报错 [root@VM_72_37_centos ~]# tar -xzvf php-.tar.gz gzip: st ...

  3. 【译】第十三篇 Integration Services:SSIS变量

    本篇文章是Integration Services系列的第十三篇,详细内容请参考原文. 简介在前一篇我们结合了之前所学的冒泡.日志记录.父子模式创建一个自定义的SSIS包日志记录模式.在这一篇,我们将 ...

  4. 【译】第三篇 Replication:事务复制-发布服务器

    本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...

  5. 【译】第十一篇 SQL Server代理维护计划

    本篇文章是SQL Server代理系列的第十一篇,详细内容请参考原文 在这一系列的上一篇,我们看了使用代理帐户模仿Windows安全上下文完成作业步骤的工作.大多数子系统支持代理账户,同时子系统限制代 ...

  6. [Openwrt扩展中篇]添加Aria2和webui

    上一篇说了我构建了简单的网络硬盘,这一篇说的是我构造的aria2和webui,大概是这样我觉得有了网络硬盘,那么我是不是可以远程下载呢,翻阅了网上资料发现迅雷的Xware貌似不更新了,然后我发现了ar ...

  7. PHP 生成、识别二维码及安装相关扩展/工具

    2018-02-20 00:30:26  更新:推荐新扩展(极力推荐) 这篇文章里用的两个二维码扩展都有些问题和麻烦:phpqrcode(生成二维码)的源码有点小 bug: 而 php-zbarcod ...

  8. The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread's user context,

    在iis7.0布署网站后运行的错误,大致意思是:数据保护操作是不成功的.这可能是由于没有为当前线程的用户加载用户配置文件的导致 解决办法: 先为自己的网站新建一个应用程序池,然后新建的应用程序池上右键 ...

  9. Runtime - Associated Objects (关联对象) 的实现原理

    主要围绕3个方面说明runtime-Associated Objects (关联对象) 1. 使用场景 2.如何使用 3.底层实现 3.1  实现原理 3.2 关联对象被存储在什么地方,是不是存放在被 ...

  10. Django-自动HTML转义

    一.自动HTML转义 从模板生成HTML时,总会有变量包含影响最终HTML的字符风险,例如,考虑这个模板的片段: Hello, {{ name }} 起初,这是一种显示用户名的无害方式,但考虑用户输入 ...