linux kernel之设备树

设备树,是一个类似json, yaml的数据结构,内容为系统总线的描述。

被uboot传递给内核之后,内核会读取磁盘文件,然后按照dts文件的元数据来解析磁盘文件,还原到内存中之后写入struct device_node 对象。

以垂直,水平2条链表,构建出树形结构。

检测到硬件插入之后,内核即可以快速遍历设备树中id匹配的节点,根据资源描述来申请系统资源(存储在struct property属性节点中,节点本身是一个kv,节点可以构建为单向无头链表):

硬件适配器,内存,中断,dma等,创建设备,创建驱动,加载驱动模块,生成/导出sysfs目录。 属性到上面的动作的映射,依靠struct fwnode_operations 对象来实现。

用户可以用json、yaml、redis来做配置文件,应用程序启动之后,去固定地址来查询配置文件,解析其中的字段,来影响程序的具体行为。

设备树的作用,正如上面举的例子。

开发者预先把硬件所需的系统资源,写入*.dts配置文件。 由uboot传递给内核,内核启动之后,在内核空间创建设备树,既struct device_node对象链表。

动态硬件热插拔,静态硬件启动时,根据硬件类型,从设备树里面查询预置的配置参数。 用配置参数来给设备创建设备对象、指向驱动对象、适配器对象。

redis 可以动态增删,设备树当然也可以。 开发或运维,通过sysfs导出目录,来查看或增删设备树。 设备树属性更新之后,触发对于的设备、驱动、适配器发生动作。

相关推荐
古法老登瞎折腾4 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
琥珀.5 小时前
mysql中json数组转列表查询
linux·运维·服务器
dawnsky.liu5 小时前
在 RHEL 中使用 goose 实现远程主机管理
linux·运维·ai
Linux运维技术栈7 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维
云边云科技_云网融合8 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
云上先途18 小时前
企业 AI 服务部署周期多久,会不会影响原有业务运转?
大数据·运维·人工智能
网络小江8 小时前
组网第35课:静态路由——下一跳、出接口、默认路由、浮动静态与黑洞路由
服务器·网络·默认路由·黑洞路由·浮动静态路由
执伞人ONLY9 小时前
AI知识库自动化知识加工没做对,人工整理永远追不上知识产生
运维·人工智能·自动化
slongzhang_9 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
叼烟扛炮9 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节