iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >怎么解析Linux设备和驱动的相遇
  • 303
分享到

怎么解析Linux设备和驱动的相遇

2023-06-15 18:06:53 303人浏览 泡泡鱼
摘要

本篇文章为大家展示了怎么解析linux设备和驱动的相遇,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一个开发板这一节结合设备信息集合的详细讲解来认识一下设备和驱动是如何绑定的。所谓设备信息集合,就是

本篇文章为大家展示了怎么解析linux设备和驱动的相遇,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一个开发板

这一节结合设备信息集合的详细讲解来认识一下设备和驱动是如何绑定的。所谓设备信息集合,就是根据不同的外设寻找各自的外设信息,我们知道一个完整的开发板有  CPU 和各种控制器(如 I2C 控制器、SPI 控制器、DMA 控制器等),CPU 和控制器可以统称为 SOC,除此之外还有各种外设 IP,如  LCD、HDMI、SD、CAMERA 等,如下图:

怎么解析Linux设备和驱动的相遇

我们看到一个开发板有很多的设备,这些设备是如何一层一层展开的呢?设备和驱动又是如何绑定的呢?我们带着这些疑问进入本节的主题。

各级设备的展开

内核启动的时候是一层一层展开地去寻找设备,设备树之所以叫设备树也是因为设备在内核中的结构就像树一样,从根部一层一层的向外展开,为了更形象的理解来看一张图:

怎么解析Linux设备和驱动的相遇

大的圆圈中就是我们常说的 soc,里面包括 CPU 和各种控制器 A、B、I2C、SPI,soc 外面接了外设 E 和 F。IP 外设有具体的总线,如  I2C 总线、SPI 总线,对应的 I2C 设备和 SPI 设备就挂在各自的总线上,但是在 soc 内部只有系统总线,是没有具体总线的。

第一节中讲了总线、设备和驱动模型的原理,即任何驱动都是通过对应的总线和设备发生联系的,故虽然 soc 内部没有具体的总线,但是内核通过 platfORM  这条虚拟总线,把控制器一个一个找到,一样遵循了内核高内聚、低耦合的设计理念。下面我们按照 platform 设备、i2c 设备、spi  设备的顺序探究设备是如何一层一层展开的。

1.展开 platform 设备

上图中可以看到红色字体标注的 simple-bus,这些就是连接各类控制器的总线,在内核里即为 platform 总线,挂载的设备为 platform  设备。下面看下 platform 设备是如何展开的。

还记得上一节讲到在内核初始化的时候有一个叫做 init_Machine()  的回调函数吗?如果你在板级文件里注册了这个函数,那么在系统启动的时候这个函数会被调用,如果没有定义,则会通过调用 of_platform_populate()  来展开挂在“simple-bus”下的设备,如图(分别位于  kernel/arch/arm/kernel/setup.c,kernel/drivers/of/platform.c):

怎么解析Linux设备和驱动的相遇

这样就把 simple-bus 下面的节点一个一个的展开为 platform 设备。

2.展开 i2c 设备

有经验的小伙伴知道在写 i2c 控制器的时候肯定会调用 i2c_reGISter_adapter()  函数,该函数的实现如下(kernel/drivers/i2c/i2c-core.c):

怎么解析Linux设备和驱动的相遇

注册函数的最后有一个函数 of_i2c_register_devices(adap),实现如下:

怎么解析Linux设备和驱动的相遇

of_i2c_register_devices()函数中会遍历控制器下的节点,然后通过of_i2c_register_device()函数把 i2c  控制器下的设备注册进去。

3.展开 spi 设备

spi 设备的注册和 i2c 设备一样,在 spi 控制器下遍历 spi 节点下的设备,然后通过相应的注册函数进行注册,只是和 i2c 注册的 api  接口不一样,下面看一下具体的代码(kernel/drivers/spi/spi.c):

怎么解析Linux设备和驱动的相遇

当通过 spi_register_master 注册 spi 控制器的时候会通过 of_register_spi_devices 来遍历 spi  总线下的设备,从而注册。这样就完成了 spi 设备的注册。

各级设备的展开

学到这里相信应该了解设备的硬件信息是从设备树里获取的,如寄存器地址、中断号、时钟等等。接下来我们一起看下这些信息在设备树里是怎么记录的,为下一节动手定制开发板做好准备。

1.reg 寄存器

怎么解析Linux设备和驱动的相遇

我们先看设备树里的 soc  描述信息,红色标注的代表着寄存器地址用几个数据量来表述,绿色标注的代表着寄存器空间大小用几个数据量来表述。图中的含义是中断控制器的基地址是  0xfec00000,空间大小是 0x1000。如果 address-cells 的值是 2 的话表示需要两个数量级来表示基地址,比如寄存器是 64  位的话就需要两个数量级来表示,每个代表着 32 位的数。

2.ranges 取值范围

怎么解析Linux设备和驱动的相遇

ranges 代表了 local 地址向 parent 地址的转换,如果 ranges 为空的话代表着与 cpu 是 1:1 的映射关系,如果没有  range 的话表示不是内存区域。

上述内容就是怎么解析Linux设备和驱动的相遇,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网操作系统频道。

--结束END--

本文标题: 怎么解析Linux设备和驱动的相遇

本文链接: https://www.lsjlt.com/news/281135.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么解析Linux设备和驱动的相遇
    本篇文章为大家展示了怎么解析Linux设备和驱动的相遇,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一个开发板这一节结合设备信息集合的详细讲解来认识一下设备和驱动是如何绑定的。所谓设备信息集合,就是...
    99+
    2023-06-15
  • Linux设备驱动开发的示例分析
    今天就跟大家聊聊有关Linux设备驱动开发的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。编译和运行驱动编译要用到kernel的Makefile文件 — ...
    99+
    2023-06-28
  • Linux设备驱动之workqueue怎么使用
    在Linux设备驱动中,workqueue是一种用于延迟执行任务的机制。它是由内核提供的一种工作队列,可以用来在后台执行一些需要延迟...
    99+
    2023-10-24
    Linux workqueue
  • Linux中PCI设备驱动程序怎么编写
    编写Linux中的PCI设备驱动程序涉及以下几个步骤:1. 确定PCI设备的ID:使用`lspci`命令或者在`/sys/bus/p...
    99+
    2023-09-22
    Linux
  • windows驱动人生usb设备无适配驱动怎么解决
    这篇文章主要介绍“windows驱动人生usb设备无适配驱动怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows驱动人生usb设备无适配驱动怎么解决”文章能帮助大家解决问题。解决方法...
    99+
    2023-07-01
  • 怎么在Linux上安装设备驱动程序
    这篇文章主要介绍“怎么在Linux上安装设备驱动程序”,在日常操作中,相信很多人在怎么在Linux上安装设备驱动程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Linux上安装设备驱动程序”的疑惑有所...
    99+
    2023-06-16
  • windows显卡驱动未启动设备怎么解决
    这篇文章主要讲解了“windows显卡驱动未启动设备怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows显卡驱动未启动设备怎么解决”吧!解决方法:1、首先我们重启电脑,使用热...
    99+
    2023-06-30
  • Linux设备驱动指的定时与延时如何理解
    本篇文章为大家展示了Linux设备驱动指的定时与延时如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Linux通过系统硬件定时器以规律的间隔(由HZ度量)产生定时器中断,每次中断使得一个内核计...
    99+
    2023-06-16
  • Linux系统的硬件设备驱动有什么作用
    本篇内容介绍了“Linux系统的硬件设备驱动有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是驱动?最通俗的解释就是“驱使硬件设...
    99+
    2023-06-12
  • win10驱动备份目录怎么设置
    这篇文章主要介绍“win10驱动备份目录怎么设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10驱动备份目录怎么设置”文章能帮助大家解决问题。win10驱动备份目录设置方法:一、系统备份点开...
    99+
    2023-06-30
  • Linux平台总线驱动设备模型是什么
    这篇文章主要介绍“Linux平台总线驱动设备模型是什么”,在日常操作中,相信很多人在Linux平台总线驱动设备模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux平台总线驱动设备模型是什么”的疑...
    99+
    2023-06-16
  • windows罗技驱动检测不到设备怎么解决
    这篇“windows罗技驱动检测不到设备怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“windows罗技驱动检测不到...
    99+
    2023-07-04
  • win7安装设备驱动程序失败怎么解决
    如果在Windows 7上安装设备驱动程序失败,可以尝试以下解决方法:1. 检查设备是否兼容:确保设备驱动程序是与Windows 7...
    99+
    2023-10-23
    win7
  • windows驱动人生备份的驱动还原失败怎么解决
    这篇文章主要介绍“windows驱动人生备份的驱动还原失败怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows驱动人生备份的驱动还原失败怎么解决”文章能帮助大家解决问题。解决方法:方...
    99+
    2023-07-01
  • 教你如何深度解析Windows7的设备驱动管理原理
    1、Windows 7系统的设备驱动文件解读 在Windows7系统中包含了一个覆盖范围很广的身边驱动程序库。在该操作系统的基本安装中,这些驱动程序都会保存在驱动程序存储区中,它们位于%SystemRoot%\Syste...
    99+
    2023-05-25
    设备驱动 驱动管理 Windows7 设备 管理 驱动 深度
  • 如何显示Linux系统的内置模块和设备驱动列表
    这篇文章主要讲解了“如何显示Linux系统的内置模块和设备驱动列表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何显示Linux系统的内置模块和设备驱动列表”吧!提问:我想要知道Linux...
    99+
    2023-06-12
  • 如何在Linux中进行硬件设备的识别和驱动管理
    在Linux中进行硬件设备的识别和驱动管理通常是通过以下几种方式来实现: 使用命令行工具: lspci:用于显示系统的PCI设...
    99+
    2024-04-02
  • windows驱动人生没有外设驱动怎么解决
    这篇文章主要介绍“windows驱动人生没有外设驱动怎么解决”,在日常操作中,相信很多人在windows驱动人生没有外设驱动怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”windows驱动人生没有外设...
    99+
    2023-07-01
  • windows驱动人生pci设备安装失败怎么解决
    今天小编给大家分享一下windows驱动人生pci设备安装失败怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。解决方法...
    99+
    2023-07-01
  • linux中的串口驱动权限怎么设置
    在Linux中,要设置串口驱动的权限,可以通过以下几种方式:1. 使用udev规则:可以在`/etc/udev/rules.d/`目...
    99+
    2023-09-14
    linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作