上回书讲到:
树莓派 OS 安装
树莓派内核 kernel 编译
今天我们介绍下树莓派设备树如何添加、编译和使用。
设备树初识
设备树(Device Tree, DT)是 Linux 内核用来描述硬件的一种数据结构。它以一种结构化的方式定义了硬件的配置和属性,使得内核可以独立于具体的硬件平台进行开发。树莓派使用设备树来配置其硬件资源,支持更灵活的硬件抽象和模块化设计。
设备树使用树形结构,包含:根节点、子节点、属性
根节点:表示整个硬件设备
子节点:描述硬件组间:CPU、内存、GPIO 等
属性:描述每个节点的具体特性
如下,是一个典型的设备树结构:
/ {
model = "Raspberry Pi 4 Model B";
compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
memory {
reg = <0x0 0x40000000>; // 内存大小
};
gpio {
pinctrl-names = "default";
};
spi {
compatible = "brcm,bcm2835-spi";
reg = <0x7e204000 0x1000>;
status = "okay";
};
};
树莓派设备树文件一般存储在 /boot 路径下,主要涉及到三种文件:
1.基础设备树文件 .dtb:
每个树莓派型号对应一个二进制设备树文件。
示例:
bcm2711-rpi-4-b.dtb(树莓派 4)
bcm2709-rpi-2-b.dtb(树莓派 2)
- 设备树覆盖文件(.dtbo):
用于在基本设备树上动态修改配置。
常用文件:
i2c-gpio.dtbo(启用 I2C)
spi1-3cs.dtbo(启用 SPI)
- 配置文件:
config.txt:用于配置设备树加载的选项。
设备树修改
在上一篇文章 树莓派内核 kernel 编译 中我们已经下载了 kernel 源码
打开 kernel 源码工程,切换到路径
~/linux-rpi-6.6.y/arch/arm/boot/dts/overlays
找到我们常用的 imx219 摄像头设备树文件:imx219-overlay.dts
为它添加一个 eep_gt24c64 的器件描述(对于当前大多数的车载摄像头模块,EEPROM 与摄像头 Sensor 都挂载在同一个 i2c 总线下),如下:
设备树加载
参考 树莓派内核 kernel 编译 中描述,对修改后的 kernel 工程进行编译。
正常来讲,添加了设备树之后,同时需要为器件编写驱动,以便在 boot 启动/加载设备时对其进行参数配置。此处省略这个过程,后续再写文章进行详细介绍。
编译完成后,生成的 *.dtbo 文件在如下路径:
~/linux-rpi-6.6.y/arch/arm/boot/dts/overlays
将该文件拷贝到 Pi5 上的如下路径:
~/boot/overlays
接下来,修改 /boot/firmware/config.txt 文件,使能修改后的设备树覆盖文件:
保存之后,重启 Pi 5 之后,在终端 i2c@80000 总线下就可以看到新增的 eep_gt24c64设备。