尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Linux设备节点与平台总线-设备树

Linux设备节点与平台总线-设备树
📅 发布时间:2026/6/20 4:12:49

前提

前面的分析中我们知道,设备树文件最初的目的就是为了代替平台总线中的platform中的device的部份,那么设备树的dts 文件就必须在内核其中后传递给内核,那设备树是如何传递给内核?

 

编译流程

编译:DTC工具将dts 设备树文本文件编译为二进制dtb文件这种二进制文件是机器可读的格式,包含所有硬件信息的结构化数据。

二进制文件被加载到内存

从 .dtb 文件开始,根据不同的系统设计,主要有两种路径将其加载到内存中:

  • • 路径一:将.dtb 文件在构建内核时直接打包进内核镜像文件中。这样,设备树就和内核本身成为一个整体文件。

  • • 路径二:.dtb 文件独立于内核镜像文件存在。这是一种更通用和灵活的方式。

无论采用哪种路径,接下来的关键步骤都由 Bootloader 完成。Bootloader 的职责是将 内核(无论是包含了内嵌DTB的内核,还是独立的内核文件)和 设备树二进制文件(如果是独立存在的) 一同加载到系统内存的特定地址上。Bootloader 会告知内核设备树在内存中的位置。

展开:内核解析并构建设备树

当内核开始初始化时,它会根据 Bootloader 提供的信息,找到内存中的 .dtb 文件。内核会将 .dtb 文件中的二进制数据展开(解析)成其内部可以识别和操作的数据结构。

设备节点

设备节点结构体

struct device_node {     const char *name;           /* 节点名,对应设备树中节点名称的第一部分(如 i2c1)*/     const char *type;           /* 设备类型,通常对应设备树中的 device_type 属性 */     phandle phandle;            /* 节点的唯一标识符 */     const char *full_name;      /* 节点全名,如 i2c@40013000 */     struct property *properties; /* 指向属性链表的头指针 */     struct property *deadprops; /* 已删除的属性列表 */     struct device_node *parent; /* 指向父节点的指针 */     struct device_node *child;  /* 指向第一个子节点的指针 */     struct device_node *sibling; /* 指向下一个兄弟节点的指针 */ #if defined(CONFIG_OF_KOBJ)     struct kobject kobj;        /* 内核对象(用于 sysfs) */ #endif     unsigned long _flags;       /* 标志位 */     void *data;                 /* 设备驱动私有数据指针 */ #if defined(CONFIG_SPARC)     /* ... SPARC 架构特定字段 ... */ #endif };

内核在解析 .dtb文件后,所创建的内部数据结构核心就是 struct device_node。每一个设备树节点都会被转换为一个 device_node结构。如上代码结构体。device_node的结构体具体说明位于include/linux/of.h的路径下。其中上面说的到struct property *properties;指向属性链表的头指针 其机构体原型如下

属性结构体

struct property {     char *name;                    /* 属性名称 */     int length;                   /* 属性值的长度(字节数) */     void *value;                  /* 指向属性值数据的指针 */   &nb

相关新闻

  • 关于个人服务器配置论坛功能的实现,以及一些出现的问题的解决办法
  • 终极效率神器:一键实现代码与设计的完美融合
  • 实用指南:从0-1了解【火山引擎公有云】

最新新闻

  • 2026市面上专业的废弃输送pp防静电管生产商排行 - 品牌排行榜
  • 豆包AI不是智能助手,而是对话式信息接口
  • GLM-5.1深度解析:国产大模型的中文长文本结构化语义建模突破
  • 如何解决3D渲染中球形全景图到立方体贴图转换的技术挑战
  • Python国密SM2签名验签实战:gmssl v3.2.1避坑指南与ID参数详解
  • 2026年评价高的激光切管加工/激光切管厂家精选合集 - 行业平台推荐

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号