Linux设备驱动模型(sysfs)
<总线模型概述>
随着技术的发展,系统的拓扑结构也越来越复杂,对热插拔。跨平台移植性的要求越来越高,从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 *);
...............
}

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
Linux设备驱动模型(sysfs)的更多相关文章
- LINUX设备驱动模型之class
转自 https://blog.csdn.net/qq_20678703/article/details/52754661 1.LINUX设备驱动模型中的bus.device.driver,.其中bu ...
- Linux设备驱动模型底层架构及组织方式
1.什么是设备驱动模型? 设备驱动模型,说实话这个概念真的不好解释,他是一个比较抽象的概念,我在网上也是没有找到关于设备驱动模型的一个定义,那么今天就我所学.所了解 到的,我对设备驱动模型的一个理解: ...
- Linux 设备驱动模型
Linux系统将设备和驱动归一到设备驱动模型中了来管理 设备驱动程序功能: 1,对硬件设备初始化和释放 2,对设备进行管理,包括实参设置,以及提供对设备的统一操作接口 3,读取应用程序传递给设备文件的 ...
- linux设备驱动模型之Kobject、kobj_type、kset【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74838165 版权声明:本文为博主原创文章,转载请注明http://blog.c ...
- Linux设备驱动模型简述(源码剖析)
1. Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写.Linux设备驱动模型包含设备(device).总线(bus).类(class)和 ...
- Linux设备驱动模型之platform(平台)总线详解
/********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /*********** ...
- 探究linux设备驱动模型之——platform虚拟总线(一)
说在前面的话 : 设备驱动模型系列的文章主要依据的内核版本是2.6.32的,因为我装的Linux系统差不多就是这个版本的(实际上我用的fedora 14的内核版本是2.6.35.13的.) ...
- linux设备驱动模型
尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备驱动模型的学习非常重要. Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统 ...
- linux设备驱动模型(kobject与kset)
Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述.换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要 ...
- Linux设备驱动模型【转】
本文转载自:http://blog.csdn.net/xiahouzuoxin/article/details/8943863 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+ ...
随机推荐
- HDU 1422 重温世界杯 DP题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1422 解题报告:DP题,要使旅行的城市最多,关键是要选出一个城市作为开始,以这个城市作为开始的城市时, ...
- 利用rundll32执行程序的函数执行程序
1.前言 无意间发现hexacorn这个国外大佬,给出了很多通过rundll32执行DLL中的函数执行程序的方法,思路很灵巧. 2.原理 rundll32加载dll 用法: rundll32 < ...
- leetcode之 两数之和
# -*- coding: utf-8 -*- # @Time : 2018/9/27 21:41 # @Author : cxa # @File : twonum.py # @Software: P ...
- window.print打印方法实现
vue中使用window.print打印效果 项目要求 打印每页有10行表格,如果接口数据没有十个显示10行 效果图 第一页 第二页 子组件 <template> <div> ...
- spring学习之一概念
概念 1.是开源的轻量级框架 2.是一站式框架,就是说在java ee的三层结构中,每一层它都提供了不同的解决技术 web层:springMVC servoce层:spring IOC ,控制反转,通 ...
- 关于vc++ 6.0 编译器,点打开文件时自动关闭
装好VC++ 6.0后,点打开文件时编译器会自动关闭掉,然后在网上找到各位大神写的资料,果然是因为之前有安装vs2010冲突的缘故,然后http://download.csdn.net/source/ ...
- 关于UrlEncode 一团乱麻的问题,后续彻底理解。Java中的 URLEncoder 与 URLDecoder无bug
很多开放平台都是小白开发的,对这个urlencode理解的不到位,他们总是认为java官方的urlencode有bug,需要 URLEncoder.encode("Hello World&q ...
- SQL2000数据库修改sa密码
开始——程序——Microsoft SQL Server——企业管理器 2 展开数据库Microsoft SQL Server—— SQL Server组——安全性——登录——双击sa 3 在常规内有 ...
- SQL Server数据库存在判断语句及系统表简介
Transact-SQL Exists Sentences--判断数据库是否存在IF EXISTS(SELECT * FROM master.sysdatabases WHERE name=N'库名' ...
- 用django-cors-headers做跨域
什么是CORS? CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,可以让Ajax实现跨域访问. 其实,在服务器的response header ...