

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