1简介

DTS即Device Tree Source 设备树源码,它是一种描述特定计算机的硬件组件的数据结构,操作系统的内核通过该文件可以知道使用和管理那些组件,包括CPU或CPU存储器、总线以及外设。设备数起源于 OpenFirmware (OF),基于SPARC的工作站和服务器派生出。当前的Devicetree规范针对较小的系统,但仍与某些服务器级系统一起使用(例如,《Power Architecture Platform参考》中描述的那些系统)。

在x86架构的个人计算机通常不使用设备树,而是依靠各种自动配置协议来发现硬件。使用设备树的系统通常将静态设备树(可能存储在ROM中)传递给操作系统,但也可以在启动的早期阶段生成设备树。例如,启动新操作系统时,Das U-Boot和kexec可以传递设备树。在具有不支持设备树的引导加载程序的系统上,可能会在操作系统中安装静态设备树。Linux内核便支持这种方法。Devicetree规范当前由一个名为devicetree.org的社区管理,该社区与Linaro和Arm相关联。

对于Linux,给定一个设备树,相同的内核可以支持更广泛的体系结构,以便于适配linux家族中的不同硬件配置,用于ARC,ARM,C6x,H8 / 300,MicroBlaze,MIPS,NDS32,Nios II,OpenRISC,PowerPC,RISC-V,SuperH和Xtensa架构Linux内核读取设备树信息。自2012年以后,在ARM上,所有新SoC都必须使用设备树。可以将其视为对以前创建用于支持(少量)不同ARM板卡(Linux和Das U-Boot)的大量fork的一种补救措施。目的是将硬件描述的重要部分从内核二进制文件中移出,并移到已编译的设备树blob中,该文件由引导加载程序移交给内核。

在Linux 2.6中,ARM架构的板级硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备、 resource、i2c_board_info、spi_board_info以及各种硬件的platform_data,这些板级细节代码对内核来讲只不过是垃圾代码。 而采用Device Tree后,许多硬件的细节可以直接通过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。 每次正式的linux kernel 发行之后都会有两周的merge window,在这个窗口期间,kernel各个部分的维护者都会提交各自的patch, 将自己测试稳定的代码请求并入kernel main line。每到这个时候,Linus就会比较繁忙,他需要从各个内核维护者的分支上取得最新代码 并merge到自己的kernel source tree中。Tony Lindgren,内核OMAP development tree的维护者,发送了一个邮件给Linus, 请求提交OMAP平台代码修改,并给出了一些细节描述:

如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file。然后通过DTC(Device Tree Compiler),将这些适合人类阅读的Device Tree source file变成机器可以处理的 Device Tree binary file(有一个很好听的名字,DTB,device tree blob)。在系统启动的时候,boot program (启动参数,例如:firmware、bootloader)可以将保存在flash中的DTB 复制到内存中(也可以通过其他方式, 例如可以通过bootloader的交互式命令加载DTB,或者firmware可以探测到device的信息,组称动态实时的DTB保存到内存中), 最后把DTB的起始地址传递给内核(例如OS kernel,bootloader或者其他特殊功能的程序)。对于一般的计算机,启动顺序是firmware->bootloader->OS,而基于ARM的Linux发行版,通常包含一个引导加载程序,该引导加载程序必须针对特定的板(例如Raspberry Pi或Hackberry A10)进行定制,一般是bootloader->OS。

2 编译工具DTC

DTC即Device Tree Compile,可以将设备树源码DTS文件编译成DTB,也可以反过来将DTB文件反编译成DTS文件。

DTC安装命令

sudo apt install device-tree-compiler

DTC编译命令

dtc -I dts/dtb -O dtb/dts –o outputfile inputfile

详细命令

3 dts文件

dts文件在linux-kernel/arch/arm/boot/dts文件夹下,以aspeed-bmc-opp-palmetto.dts文件为例,如下图所示。

dts文件在linux-kernel/arch/arm/boot/dts文件夹下,以aspeed-bmc-opp-palmetto.dts文件为例,如下图所示。

4 加载dts过程

bootloader启动完成后(这里是uboot),会将DTB的地址传给内核,内核去对应的地址读取DTB文件,然后通过DTB文件加载对应的驱动并创建对应的设备文件。

5 dts修改

以aspeed-bmc-opp-palmetto.dts文件中mac0设备为例:

&mac0 表示mac0设备,该设备在在dtsi文件中有定义。

status 描述设备是否可用,这里“okay”表示启动spi设备,在dtsi中该字段值为"disabled"

use-ncsi 表示使用ncsi驱动

pinctrl-names 引脚名,一般该字段位“default”。

pinctrl-0 mac引脚,后面<&pinctrl_rmii1_default>中的“pinctrl_rmii1_default”在dtsi文件中有定义,表示使用rmii1引脚。

一般dts文件需要包含对应soc的dtsi(Device Tree Source Include)文件,在dtsi文件中会描述soc所支持的设备,如果需要使用某个设备,只需要在dts中打开对应的设备,并指定驱动,如果要使用soc中没有描述的设备,需要在dtsi中添加该设备。

dts文件中,某个设备的compatible字段后的字符串一定要正确,并确保能和驱动中的该字段相匹配。内核加载dtb后,会根据compatible后的字段匹配搜索加载对应的驱动,如果该字段错误,将导致不能加载驱动而不能创建对应的设备。

OpenBmc开发9:dts简介与使用相关推荐

  1. T2080 U-BOOT与OS内核移植 准备篇(一)——开发调试环境简介

    T2080 U-BOOT与OS内核移植 准备篇(一)--开发调试环境简介 1.本项目选择的工具 2.几个常用工具简介 2.1 Trace32 2.2 Code Warrior 2.3 QorIQ Li ...

  2. openbmc开发28:fru配置和测试

    在openbmc开发23:添加fru信息到ipmi中说明了如何将fru信息添加到ipmi中,本文将讲述如何生成fru以及fru信息获取展示以及修改等. 1 yaml配置文件转换成cpp 在软件包下有一 ...

  3. Clojure开发OpenCV的简介

    Clojure开发OpenCV的简介 Clojure开发OpenCV的简介 我们将在本教程中做什么 前言 安装Leiningen 安装localrepo Leiningen插件 将特定于Java的li ...

  4. 【物联网(IoT)开发】Arduino 简介

    Arduino 的开源.开放.廉价.简单.跨平台等特点使其快速发展起来,成为学习微控制器的首选,成为物联网(IoT)开发的重要组成部分,通过Arduino我们可以从各种传感器感知世界,也可以控制各种执 ...

  5. STM32F4开发板硬件简介

    参考:STM32F4开发板硬件平台简介 作者:SKY丶丿平才 发布时间: 2021-03-20 10:44:41 网址:https://blog.csdn.net/weixin_48264057/ar ...

  6. openbmc开发-->aspeed-->slave-i2c[ast2400]

    openbmc开发-->aspeed-->slave-i2c[ast2400] 前言 ast2400 内核修改启用i2c从机模拟eeprom 测试驱动 ast2400 i2c-aspeed ...

  7. 【OpenBMC 系列】1.OpenBMC 开发环境搭建

    目标: 安装Linux 系统,推荐使用Ubuntu18+,作为开发环境. 安装Qemu 作为bmc运行的虚拟机. 受众:熟悉 Linux 和 BMC 的程序员 先决条件:当前的 Linux.Mac 或 ...

  8. 树莓派4b入门之开发RFID系统—简介、搭建MFRC522-SPI环境

    树莓派4b入门之开发RFID系统-简介.搭建MFRC522-SPI环境 一.系统简介 二.模块连接 1.引脚定义 2.接口对应关系 三.搭建接口环境 1.开启SPI 2.模块功能设计 3.安装SPI ...

  9. 品高应用开发平台:简介

    品高应用开发平台:简介 品高应用开发平台旨在提升公司的项目开发效率.积累公司的开发技术.统一公司的开发模式而提出的一个对开发.设计.运行时进行全面支撑的完整体系.我们推出该平台的目标是:每天为每位开发 ...

  10. OpenBmc开发1:openbmc简介

    1.OpenBMC简介 在说OpenBMC之前,先说一下BMC(Baseboard Manager Controller,简称BMC),BMC应用了IPMI架构的智能性,是嵌入在计算机(通常是服务器) ...

最新文章

  1. class viewController has no initializers解决办法
  2. Android 仿微信 相册多图选择器
  3. sql查询复习笔记-小技巧,大智慧(续一)
  4. Java基础篇:内部类详解
  5. SpirngMVC通过Ajax传递多个对象
  6. 面试加分项!程序员工作2年月薪12K,附架构师必备技术详解
  7. 马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别
  8. 前端如何展示商品属性:SKU多维属性状态判断算法的应用-Vue 实现
  9. 62. KVOController详解
  10. JAVA版村庄哨塔种子_我的世界:5个稀有的地图种子,我在里面居然发现了圆形村庄!...
  11. 注册99美元苹果开发帐号
  12. super关键字详解
  13. Java 流(Stream)、文件(File)和IO
  14. 端口碰撞Port Knocking和单数据包授权SPA
  15. 爬虫利器BeautifulSoup之CSS选择器的基本使用
  16. vue elementUI 时间控件优化 选择起始时间不能在结束时间之后,结束时间不能在起始时间之前
  17. html5 audio js控制进度,HTML5多媒体的之audio和video。JavaScript控制进度条播放进度
  18. 简单实用的记账软件,做到有账可查
  19. java工程师 英文_java软件工程师英文简历模板
  20. FPGA入门(FPGA结构、Verilog编程基础)

热门文章

  1. PCB线宽与电阻的计算
  2. 谈谈2018年技术趋势和架构规划
  3. 北京邮电大学计算机科学与技术专业研究生,北京邮电大学计算机科学与技术专业...
  4. git 内网搭建_Gitlab搭建内网服务器
  5. 常见设计模式之(五):观察者模式
  6. 到底是什么决定了二极管的最高工作频率?
  7. 一、无线通信中,工作频率与带宽的关系
  8. linux清理根目录空间,如何快速清理Linux磁盘空间
  9. c语言 项目 轮子,程序员们为什么热衷于发明轮子?
  10. win10分辨率不能调整_win10无法调整分辨率显示灰色的解决方法