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导出目录,来查看或增删设备树。 设备树属性更新之后,触发对于的设备、驱动、适配器发生动作。

相关推荐
AlfredZhao15 小时前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
A小辣椒4 天前
TShark:Wireshark CLI 功能
linux
A小辣椒4 天前
TShark:基础知识
linux
AlfredZhao4 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao5 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334665 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪5 天前
linux 拷贝文件或目录到指定的位置
linux