
总线和设备树
文章平均质量分 96
bus、platform平台、设备树的讲解,深入到内核源码解析
憧憬一下
博客主要涉及嵌入式方面:linux驱动、stm32等。欢迎互关互三!
展开
-
设备树与 Linux 内核设备驱动模型的整合
本章主要讲解:在 Linux 内核中,设备树(Device Tree)通过将硬件描述信息从内核代码中分离出来,简化了平台设备的管理。通过解析设备树中的设备节点,内核生成相应的结构,并使用函数如将这些设备节点注册为平台设备(),挂载到总线的设备链表上。总线机制会根据设备的属性匹配驱动程序,并调用驱动的probe函数对设备进行管理。与此相对,早期的设备管理依赖静态表格,而设备树则提供了动态方式,不再依赖硬编码。注:以下的代码皆摘自于linux 4.9.88版本的内核源码,不同版本可能有所出入。原创 2024-10-12 00:06:13 · 2101 阅读 · 7 评论 -
device_node:解压设备树与生成内核设备节点树的流程概述
本章主要内容:在 Linux 内核的初始化过程中,设备树二进制文件(DTB)被解压为设备节点树,用于内核设备驱动的管理。通过内核函数 `__unflatten_device_tree`,DTB 被解析成内核的 `struct device_node` 结构。这一流程分为两个主要步骤:首先通过扫描 DTB 来确定所需内存大小,接着分配内存并进行实际的解压操作,生成设备节点树,并保存在全局链表和树结构中。解压后的设备节点被存储为全局链表 `of_allnodes`,同时形成层次化的父子节点关系树,供内核使用。原创 2024-10-11 00:11:17 · 1888 阅读 · 6 评论 -
基于设备树的嵌入式系统硬件平台识别与参数传递流程解析
嵌入式系统中如何对设备树进行扫描,完成硬件平台的识别和参数传递。ARM架构上Linux内核启动时,bootloader通过寄存器传递硬件平台信息(machine type ID)和设备树(DTB)的启动参数的流程。首先,bootloader设置寄存器r0、r1、r2,然后将控制权交给内核。内核通过汇编代码保存寄存器值,并在C代码的setup_arch函数中解析设备树或旧的ATAGS信息,找到对应的硬件平台描述符(machine descriptor)。此外,内核通过扫描设备树中的/chosen节点获取启动命原创 2024-10-10 00:03:41 · 2223 阅读 · 10 评论 -
设备树语法规则讲解
讲解设备树的语法规则和基本属性:cpmpatible、reg、interrupt、status、#address-cells、#size-cells、clock-frequenct。通过实际示例对设备树进行讲解,掌握设备树基础的语法规则。原创 2024-10-09 07:30:00 · 1458 阅读 · 1 评论 -
platform bus平台总线详解
讲解平台总线(plaform bus)的相关知识:platform_device、platform_driver结构体;驱动编写时的相关API(platform_device_register、platform_get_resource、platform_get_irq、platform_add_devices等);平台设备和驱动是怎么注册进bus中的,以及平台设备的probe是怎么被调用的;platform、bus、deivce/driver之间的联系;平台总线的匹配规则。原创 2024-10-08 07:30:00 · 1922 阅读 · 1 评论 -
bus中设备驱动的probe触发逻辑和device、driver的添加逻辑
讲一下linux驱动开发中,内核提供的接口内部是如何去触发驱动程序的probe,以及总线是如何去添加设备和驱动进bus中的(bus_add_device/driver),还有probe函数的触发方式有哪些(手动和自动)原创 2024-10-07 15:39:14 · 1666 阅读 · 1 评论 -
bus总线的相关结构体和注册逻辑
在上一篇章中讲了关于驱动中的deivce和device driver结构体,它们代表着一个设备以及其对应的驱动程序。那么,如果有很多设备,那就得靠一种特殊的方式将它们管理起来------Bus。主要讲解bus的相关结构体(struct bus_type、subsys_private)和注册逻辑(bus_register)、核心功能。原创 2024-10-06 15:39:45 · 1502 阅读 · 0 评论 -
驱动中的device和device_driver结构体
device和device driver是Linux驱动开发的基本概念。Linux kernel的思路很简单:驱动开发,就是要开发指定的软件(driver)以驱动指定的设备,所以kernel就为设备和驱动它的driver定义了两个数据结构,分别是device和device_driver。原创 2024-10-05 15:08:02 · 2102 阅读 · 0 评论