设备树

简介: [1] 什么是设备树?    用于描述设备和总线层次关系的脚本。   [2] 设备树如何组成?/ {                           // 根, 描述CPU总线和主板, 名字一定为'/' name =        // 属性, name为名字,为属性值 name = "string", .
[1] 什么是设备树?
    用于描述设备和总线层次关系的脚本。
   
[2] 设备树如何组成?
/ {                           // 根, 描述CPU总线和主板, 名字一定为'/'
 name = <value ...>        // 属性, name为名字,<value ...>为属性值
 name = "string", ...   // 属性, name为名字, "string", ...为属性值

 node {                     // 节点, 描述设备或总线, 名字可以使用全名
  name = <value ...> // 属性
  name = "string", ...   // 属性
  ...
  node {
   ...
    };
  };
 ...
};

   
    1. 名字
       描述设备类型或属性名,语法如下:
       基本名@扩展名
       (1) 基本名
           由'a'-'z'、'0'-'9'、','、'.'、'+'、'_'、'#'、'?'和'-'字符组成
           最大字符数为31
           是设备类型
           
       (2) 扩展名
           如果某类设备存在多个设备,可以增加扩展名,以避免名字重复,
           扩展名只能用于设备结点名, 一般为设备在总线上的地址
           内核在匹配驱动时,不会使用扩展名
       
    2. 属性值
       <value ...>        一个或多个32bit整数
       "string", ...      一个或多个字符串      
   
[3] 如何实现设备树?(详细语法)
    1. 根和内存
/ {
 model = "主板名";
 compatible = "SOC名";            // 必选,用于匹配BSP中的支持的SOC列表,以判断内核是否支持该主板

 // platform总线
 #address-cells = <A>;           // 必选, 地址位数,单位(cell)为32bit, A = 地址位数 / 32
 #size-cells = <S>;              // 必选, 大小位数,单位(cell)为32bit, S = 大小位数 / 32

 // 内存
 memory {
  device_type = "memory";       // device_type值一定为"memory"
  reg = <address size ... ...>  // 必选, 描述地址范围
 };
};

       <address size>
       (1) 地址和大小成对出现, 描述内存范围, 地址的位数决定于A,大小位数决定于S
       (2) 地址或大小的位数超过32位时,需要用多个32bit数表示,采用大端模式
           例: A = 2  S = 2 时
               reg = <0x00000000 0x400000000 0x00000000 0x400000000>
               表示内存范围为0x400000000 - 0x800000000

    2. chosen
/ {
 ...
 chosen {
  bootargs = "内核启动参数";    // 必选
  linux,stdout-path= "console"  // 可选
 };
 ...
};

    3. 设备
标号: 设备类型@地址 {           // 设备名字, 基本名通常为设备类型, 扩展名通常为设备在总线上的地址
 name = "设备(总线)类型";       // 可选,name属性值必须和基本名一致
 device_type = "芯片名";       // 可选,设备采用芯片名
 compatible = "兼容芯片1", "兼容产品2";     // 必选, 用于匹配驱动

 // io内存(寄存器)地址
 #address-cells = <A>;           // 可选, 同"根和内存"相同名称属性
 #size-cells = <S>;               // 可选, 同"根和内存"相同名称属性
 reg = <地址(端口号) 大小 ... ...>; // 可选, 同"根和内存"相同名称属性

 // 中断(详细参考Documentation/devicetree/bindings/interrupt-controller/interrupts.txt内核文档)
 // 只有一个中断父设备(必选)
 interrupt-parent = <&父设备标号>;
 interrupts = <irqno trigger>, <... ...>;

 // 有多个中断父设备(必选)
 interrupts-extended = <&父设备标号 irqno trigger>, <... ... ...>;

};

       (1) 设备和驱动匹配
           1. 匹配设备树上的设备
              驱动               设备树          条件
              compatible         compatible      必须
              type               device_type     驱动存在type属性
              name               name            驱动存在name
             
           2. 匹配代码添加的设备
              驱动               设备             条件
              name               name             必须
             
       (2) 设备(非中断控制器)中断
           interrupt-parent
           interrupts
           和
           interrupts-extended
           只允许出现一次
           
           1. irqno
              父设备(中断控制器)中的中断编号
             
           2. trigger
              促发条件,目前只用到32bit中的[0:3]bit
              1 = low-to-high edge triggered
              2 = high-to-low edge triggered
              4 = active high level-sensitive
              8 = active low level-sensitive            
           
    4. 中断控制器
标号: 设备类型@地址 {
 ...
 interrupt-controller; // 必选
 interrupt-parent = <&父设备标号>; // 必选

 #interrupt-cells = <1>; // 必选
 interrupts = <irqno>, <...>; // 必选
 或
 #interrupt-cells = <2>; // 必选
 interrupts = <irqno trigger>, <... ...>; // 必选
 ...
};

    
相关文章
|
机器学习/深度学习 监控 Kubernetes
使用 Seldon Alibi 进行模型监控
虽然 Seldon 使在生产中部署和服务模型变得容易,但一旦部署,我们如何知道该模型是否在做正确的事情? 训练期间的良好表现并不一定意味着在生产运行几个月后表现良好。 现实世界中发生的事情是我们无法解释的,例如:输入数据逐渐偏离训练数据,以及异常值和偏差。
|
11月前
|
弹性计算 自然语言处理 数据库
通过阿里云Milvus和LangChain快速构建LLM问答系统
本文介绍如何通过整合阿里云Milvus、阿里云DashScope Embedding模型与阿里云PAI(EAS)模型服务,构建一个由LLM(大型语言模型)驱动的问题解答应用,并着重演示了如何搭建基于这些技术的RAG对话系统。
|
人工智能 自然语言处理 运维
人工智能在IT领域的最新应用和前景
人工智能在IT领域的应用正呈现出日益重要的地位,为企业提供了更高效、智能化的解决方案。从自动化运维到智能客服,从数据分析到决策支持,人工智能正在不断拓展其应用范围。未来,人工智能将继续推动IT领域的创新与变革,但同时也需要充分考虑隐私和伦理问题,确保人工智能的应用能够为企业和社会带来最大的价值。
968 1
人工智能在IT领域的最新应用和前景
|
算法
【SPSS】列联表分析详细操作教程(附案例实战)
【SPSS】列联表分析详细操作教程(附案例实战)
2678 0
|
缓存 Android开发
基于autojs7的番茄免费小说辅助
基于autojs7的番茄免费小说辅助
520 0
|
小程序 前端开发 Java
微信小程序兼职及问答平台
微信小程序兼职及问答平台
426 0
|
数据挖掘
19 误差分布曲线的建立 - 高斯导出误差正态分布
19 误差分布曲线的建立 - 高斯导出误差正态分布
319 0
|
前端开发 JavaScript 测试技术
搭建Vue3组件库:第七章 规范化:Eslint + Prettier + Husky
本章介绍项目的代码规范,以及有关git版本控制的一些规范验证。
644 0
搭建Vue3组件库:第七章 规范化:Eslint + Prettier + Husky
|
敏捷开发 测试技术
【软件测试】基础知识第二篇
瀑布模型在软件工程中占有重要地位,是所有其他模型的基础框架。瀑布模型的每一个阶段都只执行一次,因此是线性顺序进行的软件开发模式。
|
机器学习/深度学习 传感器 算法
【预测模型】基于随机蛙跳算法 SFLA优化神经网络实现数据回归预测附matlab代码
【预测模型】基于随机蛙跳算法 SFLA优化神经网络实现数据回归预测附matlab代码