Linux设备管理的简单分析

本文简要分析了Linux设备管理,包括class、bus、device、device driver、platform_device和platform_driver的关系。介绍了Linux中的platform总线和设备树的概念,特别是如何在Linux内核中解析设备树结构体。讲解了设备和驱动的匹配过程,以GPIO为例说明如何通过compatible属性进行匹配,并注册platform_driver。最后指出为了使驱动与设备树匹配,需要正确设置of_device_id和platform_driver。
摘要由CSDN通过智能技术生成

首先给出几个常见概念:class、bus、device、device driver、platform_device、platform_driver

系统中,关系简图如下(从总线bus的角度分析)

可以看到device和device driver必须依附于某一种总线。就是说总线下面挂着一些已经注册过的设备,一个设备对应着一个设备驱动。

如果从类别class的角度分析,这些设备就会被分为具体的设备,比如:声卡、网卡、输入设备等。

在目录/sys下,class、bus、device之间的关系如下图:

在linux中,有一种虚拟总线叫做platform,Linux2.6版本以后的设备驱动,需要关心总线,设备,驱动这3个实体。总线将设备和驱动绑定。系统每注册一个设备的时候,会寻找与之匹配的驱动;系统每注册一个驱动的时候,会寻找与之匹配的设备。

一个现实的linux设备和驱动通常都需要挂接在一个总线上,对于本身依附于PCI,USB,I2C等设备,挂接在总线上自然不是问题。但是对于嵌入式系统,SOC集成了独立外设控制器,挂接在SOC内存空间的外设等却不依附于此类总线。基于此背景,linux发明了一种虚拟总线——platform总线,相应的设备成为platform_device,驱动称为platform_driver。

设备或者驱动注册的时候都会触发总线调用match函数来寻找目前总线是否挂载有与该设备(或驱动)名字匹配的驱动(或设备),如果存在则将双方绑定。

简单分析就到此,后续还有对设备管理的深入分析。

Linux系统解析dts

Linux系统需要根据设备树填充如下结构体:

  1. struct property {
  2. char *name; /* property full name */
  3. int length; /* property value length */
  4. void *value; /* property value */
  5. struct property *next; /* next property unde
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值