Linux设备树怎么写?节点和属性怎么定义?compatible怎么匹配驱动?嵌入式Linux面试

浏览量:352
时间: 2026-09-24 09:23:50
一句话答案

设备树 DTS 描述硬件:节点(node)表示设备,属性(property)描述参数;根节点 / 下有 cpu、memory、bus 等;compatible 属性匹配驱动(如 “vendor,chip”);reg 描述地址空间,interrupts 描述中断,pinctrl 描述引脚;编译为 DTB 由 bootloader 传给内核。

本文概述

设备树是 Linux 驱动基础,面试常考:节点/属性、compatible、reg、interrupts、pinctrl。回答要给 DTS 示例和匹配过程。

核心要点

  • 设备树 DTS 描述硬件拓扑,编译为 DTB,u-boot 传给内核

  • 节点表示设备,用节点名@地址格式,属性是 key=value

  • compatible = "vendor,chip" 匹配驱动 of_match_table

  • reg = <地址 长度> 描述寄存器地址空间,#address-cells/#size-cells 决定格式

  • interrupts-parent/interrupts 描述中断,pinctrl 描述引脚复用

屏幕显示 Linux 设备树 dts 代码,节点和属性,compatible 匹配驱动

面试官:写一个 I2C 设备的设备树节点,compatible 怎么和驱动匹配?

面试官考察点

设备树基础题。面试官看你是否写过 DTS。重点听:节点结构、compatible、reg、匹配。

回答思路

给 I2C 设备 DTS 示例,讲 compatible 匹配驱动过程。

参考回答

I2C 设备节点示例。

&i2c1 {
  clock-frequency = <400000>;
  pinctrl-names = "default";
  pinctrl-0 = <&i2c1_pins>;
  status = "okay";

  sensor@48 {
    compatible = "ti,tmp102";
    reg = <0x48>;
    interrupt-parent = <&gpio1>;
    interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
    vcc-supply = <&reg_3v3>;
  };
};

关键字段。

属性含义示例
compatible匹配驱动,"厂商,型号""ti,tmp102"
regI2C 地址/寄存器地址<0x48>
interrupt-parent中断控制器&gpio1
interrupts中断号+触发方式<5 2>
pinctrl-0引脚复用配置&i2c1_pins
statusokay/disabled"okay"
*-supply电源 regulator&reg_3v3

compatible 匹配过程。

  1. 驱动定义 of_match_table:

static const struct of_device_id tmp102_of_match[] = {
  { .compatible = "ti,tmp102" },
  { /* Sentinel */ }
};
MODULE_DEVICE_TABLE(of, tmp102_of_match);

  1. 内核解析 DTS,找到 compatible="ti,tmp102" 的节点;

  2. 和驱动 of_match_table 比较,匹配成功调用 probe;

  3. probe 里用 of_property_read_u32 等读属性。

设备树结构。

/ {
  model = "My Board";
  compatible = "myboard,evk";
  #address-cells = <1>;
  #size-cells = <1>;

  memory@80000000 {
    device_type = "memory";
    reg = <0x80000000 0x10000000>; /* 256MB */
  };

  cpus { ... };
  soc { ... };
};

注意。

  • DTS 包含 DTSI(公共部分),板级 DTS 只改差异;

  • reg 格式由父节点 #address-cells/#size-cells 决定;

  • pinctrl 配置在 pincontroller 节点里,设备引用;

  • 设备树不改驱动代码就能适配不同板级,这是核心优势。

面试官可能追问

追问 1:设备树和 platform_device 区别?
旧内核用 platform_device 硬编码板级信息,设备树用 DTS 描述,驱动通用,不同板子只改 DTS。ARM 现在都用设备树。
追问 2:compatible 为什么是 '厂商,型号'?
避免命名冲突。厂商前缀(如 ti、atmel)+ 型号,唯一标识设备。内核有厂商前缀注册表。
追问 3:reg 怎么解析?
of_address_to_resource 或 platform_get_resource。reg 是地址+长度对,#address-cells 决定地址几个 cell。
追问 4:status=disabled 会怎样?
内核忽略该节点,驱动不 probe。用来关闭不用的外设。
追问 5:设备树怎么编译?
dtc -I dts -O dtb -o board.dtb board.dts。内核 make dtbs 自动编译。

常见失分表达

✗ compatible 不匹配 — 驱动不 probe,设备不工作。
✗ reg 地址写错 — 驱动访问错误地址,崩溃或不工作。
✗ pinctrl 不配置 — 引脚没复用,外设不工作。

准备动作

1
写一个 I2C/SPI 设备节点
2
了解 compatible 匹配过程
3
准备一个设备不工作最终定位是 compatible 不匹配的案例

核心关键词

设备树DTSDTBcompatible节点属性regpinctrl


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
技术岗面试前一晚该做什么?一份高效的准备清单

分类:面试前准备清单经验级别:全级别难度:基础题型:面试准备/效率方法📖 本文概述面试前一晚是宝贵的准备时间,但很多人要么焦虑得看不进去书,要么熬夜刷题第二天... 详情>>

2026-08-06 17:07:27
电子工程师谈薪与offer选择怎么决策?薪资结构怎么比较?求职面试策略

一句话答案谈薪前要知道市场行情(同岗位/同年限/同城市),报价要在当前薪资基础上留 20~30% 空间;选 offer 不只看月薪,要比总包(base+奖金+股... 详情>>

2026-09-16 10:02:38
射频混频器PCB布局有哪些关键要点?

📂 分类:射频电路📊 经验级别:中高级⭐ 难度:★★★★☆📝 题型:技术综合题本文概述射频混频器PCB布局的核心是隔离三个端口、控制阻抗连续性和最小化寄生... 详情>>

2026-08-11 11:22:56
LDO输出噪声太大怎么办?电源工程师面试PSRR与噪声优化详解

分类:电源设计经验级别:1-3年难度:中级题型:原理分析+优化方法本文概述:LDO输出噪声主要有两个来源:一是LDO自身的本征噪声(基准源噪声、误差放大器噪声、... 详情>>

2026-08-14 11:26:33
产品出现批量不良,如何使用8D方法进行根因分析和闭环整改?电子工程师行为面试

行为面试题 / 工程师面试高频题面试官问你:某批PCBA在客户现场出现批量通信异常,生产线也发现同类问题,你会怎么处理?如果只回答“分析原因、修改设计、重新测试... 详情>>

2026-11-12 14:09:19
开班信息