码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • linux 设备树的由来与使用


    ​
    ​

    活动地址:CSDN21天学习挑战赛

    设备树的由来

    早在2011年,linus回了一封发飙的邮件:https://lkml.org/lkml/2011/3/17/492

    这封邮件的核心内容就是说某个开发者提的pull request中有很多代码重复,很多垃圾代码,建议ARM社区也使用设备树方式去描述板级结构,因为在这之前,这种方式就已经在PowerPC上使用,由于其结构看起来似树形,所以叫设备树,如下图所示(图片来源于网络):

     就如linus邮件中说的,内核源码中包含了大量的对扳级细节信息描述的代码,尤其ARM芯片广泛的应用,重复的垃圾代码越来越多,维护变的越来越困难,引入设备树可以解决这些问题。

    设备树的作用

    设备树改变了原来用hardcode方式讲HW配置信息嵌入到内核代码的方法,改用bootloader传递一个DB的形式,对于基于ARM CPU的嵌入式系统我们习惯于针对每一个platform进行内核的编译,但是随着ARM的各种产品的广泛应用,我们期望其能够像X86那样用kernel image来支持多个platform,这种情况下,kernel中需将框架信息抽象出来,作为一个黑盒,接受外部参数,那么输入参数应该包括:

    1. 识别的platform的信息
    2. runtime的配置参数
    3. 设备的拓扑结构以及特性

    图片来源:RK3399平台开发系列讲解(内核设备树篇)3.2、图解Kernel Device Tree(设备树)的使用_内核笔记的博客-CSDN博客

    对于嵌入式系统,在系统启动阶段,bootloader会加载内核并将控制权转交给内核,此外,还需要把上述的三个参数信息传递给kernel,以便kernel可以有较大的灵活性。在linux kernel中,Device Tree的设计目的就是如此。

    设备树包含的硬件信息有哪些?

    设备树并不描述所有的硬件信息,因为有些硬件设备是可以探测到的,如USB device。再比如在计算机系统中,PCI device可以被动态探测到,不需要再device tree中描述,但是PCI bridge不能被探测,则需要描述。设备树种一般需要描述的内容包括:

    CPUs

    Memory

    Buses

    Peripheral connections

    Interrupt Controllers

    GPIO controllers

    Clock controllers

    总之,那些无法动态识别的就需要在device tree中描述,反之则不需要。

    ​

    设备树的语法结构

    Device Tree 由两种元素组成:Node、Property,即节点与属性。

    Device tree的基本单元是node。系统中的每个设备用一个node来描述。

    除了root node,每个node都只有一个parent。

    一个Device tree文件中只能有一个root node。

    每个node用节点名字标识,节点名字的格式是:

    [label:] node-name[@unit-address] {

    [properties definitions]

    [child nodes]

    }

    “[]”标识option,因此可以订阅一个只有node name的空节点。Label方便在dts文件中引用。Child node的格式和node是完全一样,因此,一个dts文件中就是若干嵌套组成的node,property以及child note、child note、property描述。

    如下(图片来源于RK3399平台开发系列讲解(内核设备树篇)3.2、图解Kernel Device Tree(设备树)的使用_内核笔记的博客-CSDN博客)

     

  • 相关阅读:
    L56.linux命令每日一练 -- 第八章 Linux磁盘与文件系统管理命令 -- swapoff和sync
    京东运营数据分析:2023年8月京东饮料行业品牌销售排行榜
    centos7添加开机自启案例及原理
    C++总结(8):STL容器适配器之stack、queue、priority_queue详解
    历时8年,自建站最终改版
    如何在.NET Core3.1 类库项目中使用System.Windows.Forms
    MATLAB算法实战应用案例精讲-【智能优化算法】黏菌算法(SMA)
    C++设计模式(1)-- 单例模式
    【MATLAB教程案例42】语音信号的MFCC特征提取matlab仿真
    东莞松山湖数据中心|莞服务器托管的优势
  • 原文地址:https://blog.csdn.net/maodewen11/article/details/126212338
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号