设备树知识
设备树(DTB)
设备树 = 给 Linux 看的 “硬件说明书”
设备树不是在 U-Boot 里生成的!
设备树 = Linux 内核里的文件
设备树不改,硬件等于不存在!
设备树位置:Z:\F1C200S\Linux\linux-5.7.1\arch\arm\boot\dts
设备树编译:
1 | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs |
.dts/.dtsi 不能直接脱离内核单独编译,因为依赖内核头文件和绑定定义。
.dtb 只能保证在编译它的那个内核版本上稳定运行,跨版本使用有兼容性风险。
如果你想在新内核上用自己改好的设备树,把.dts和.dtsi复制过去,在新内核里重新编译即可。
1. 结论
不管是 USB、串口、SPI、I2C、网卡、LED、屏幕…… 只要是硬件,想让 Linux 认识、驱动跑起来, 99% 都要在这里(设备树)修改配置!
你现在的路径:
1 | linux-5.7.1/arch/arm/boot/dts/ |
这里就是所有硬件的 “户口本”。
2. 我用 USB 举个最直白的例子(F1C100s)
假如你要打开 USB 驱动,你必须去设备树里:
步骤 1:打开 USB 控制器
1 | usb_otg: usb@1c13000 { |
步骤 2:配置 USB 引脚(GPIO)
1 | usb_pins: usb-pins { |
步骤 3:配置供电
1 | usb_power: usb-power { |
编译 → 生成 dtb → 放到 SD 卡
Linux 启动后才能识别 USB!
3. 超级大白话总结(你一定要记住)
设备树 = Linux 的眼睛
- 不修改设备树 → Linux 看不见这个硬件
- 设备树写错 → Linux 识别错误 / 驱动不加载
- 设备树写对 → Linux 自动加载驱动,硬件就能用
所有硬件都一样:
- USB ✅ 要改设备树
- 屏幕 ✅ 要改设备树
- 网卡 ✅ 要改设备树
- 串口 ✅ 要改设备树
- I2C/SPI ✅ 要改设备树
- 蜂鸣器、LED、按键 ✅ 都要改设备树
一、超简单一句话解释
- .dts / .dtsi = 设备树源码(文本文件,可修改)
- .dtb = 设备树二进制(U-Boot/Linux 加载的文件)
- 修改 = 改
.dts - 生成 = 用编译器
dtc编译成.dtb
二、举个最实用的例子:修改 LED 引脚
假设你要改 用户 LED 从 PB5 改成 PB6
1. 找到设备树源文件
你的文件:
1 | suniv-f1c100s-licheepi-nano.dts |
2. 打开找到 LED 节点
1 | leds { |
3. 你想改成 PB6,只需要改一个数字
1 | gpios = <&pio 6 1 GPIO_ACTIVE_HIGH>; // PB6 |
三、如何编译生成 dtb 文件(1 条命令)
你只需要一个工具:dtc(device tree compiler)
编译命令(Windows/Linux 都能用)
1 | dtc -I dts -O dtb -o suniv-f1c100s-licheepi-nano.dtb suniv-f1c100s-licheepi-nano.dts |
生成 →
suniv-f1c100s-licheepi-nano.dtb
复制到 SD 卡 FAT 分区,替换原来的 dtb 即可。
四、我再给你举 3 个最常用的修改例子
例 1:修改串口波特率
1 | uart0: serial@1c25000 { |
例 2:修改 SD 卡支持 4GB / 32GB
1 | mmc0: mmc@1c0f000 { |
例 3:给 GPIO 加一个自定义设备
1 | my-gpio { |
五、超级重点(你必须知道)
设备树是跟芯片一一对应的
- F1C100s 的设备树 不能给 STM32MP1 用
- 换芯片就要换 dtsi + dts
- 但 语法全世界都一样 ✅
设备树语法非常简单
就是:
1 | 节点名 { |
六、你现在就能学会的总结
- 设备树 = 硬件配置表
- 改 .dts 文本
- dtc 编译成 .dtb
- 放到 SD 卡 FAT 分区
- Linux 启动就会用新硬件配置
设备树基本位置
Linux 设备树 → 在内核源码里
1
arch/arm/boot/dts/xxx.dts
U-Boot 设备树 → 给 U-Boot 用,和 Linux 无关
修改 dts → 编译内核 → 得到 dtb → 放进 SD 卡
Linux 启动时加载这个 dtb
相关链接(侵删)
欢迎到公众号来唠嗑:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赵逸尘个人博客!


