一 设备树的基本知识
1. 每一个“{}”都是一个“节点”。“/ {…};”表示“根节点”
2. /dts-v1/; 这是dts的版本,一定要有,不然编译会报错
3. &, 这表示该节点在向已经存在的子节点追加数据
4. 同级节点下节点名称不能相同,不同级节点名称可以相同
5. node-name@unit-address ,node-name用于指定节点的名称,其中的符号“@”可以理解为是一个分割符,“unit-address”用于指定“单元地址”,没有实际意义, 它的值要和节点
“reg”属性的第一个地址一致,如果节点没有“reg”属性值,可以直接省略“@unit-address”
6. 节点名“cpu@0”前面多了个“cpu0”,这个“cpu0”就是我们所说的节点标签。 通常节点标签是节点名的简写,所以它的作用是当其它位置需要引用时可以使用节点标签来向该节点中追加内容
cpu0:cpu@0
“:”前面的是节点标签(label),“:”后面的才是节点名字,可以直接通过&label 来访问这个节点
7. chosen 并不是一个真实的设备,chosen节点主要目的就是将uboot里面bootargs环境变量值传递给linux内核作为命令行参数。chosen子节点不代表实际硬件,它主要用于给内核传递参数。 此外这个节点还用作uboot向linux内核传递配置参数的“通道”, 我们在Uboot中设置的参数就是通过这个节点传递到内核的, 这部分内容是uboot和内核自动完成的,它必须是根节点的子节点 ,如:
chosen: chosen {
bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 irqchip.gicv3_pseudo_nmi=0 root=PARTUUID=614e0000-0000 rw rootwait";
};
8. 通过Documentation/devicetree/bindings/pinctrl看rockchip pinctrl的定义,设置复用关系
9. device_type属性,只用于cpu节点或者memory节点进行描述
10. pinctrl是为了统一各芯片原厂的pin脚管理
pinctrl-names 表示设备的状态,对应状态的引脚配置在pinctrl-N中定义,N=0,1,2...,由pinctrl-names中的状态数量决定
11. 在 GPIO 控制器中,必须有 #gpio-cells 和 gpio-controller 属性
12. i2c控制器节点存在子节点时,该控制器节点必须指定下面两个选项
#address-cells 值必须是1
#size-cells 值必须是0
#address-cells = <1>;
#size-cells = <0>;
13. cpus 节点里面包含物理cpu的布局,具体如下:
cpu-map 节点主要用在描述大小核架构处理器中,名称不能变,cpu-map节点的父节点必须是cpus节点,子节点必须是一个或多个的cluster和socket节点
socket 节点描述的是主板上的cpu插槽,主板上有几个cpu插槽就有几个socket节点,socket节点的子节点必须是一个或者多个cluster节点,当有多个cpu插槽时,socket的命名方式必须是socketN N=0,1,2..
cluster 节点用来描述cpu的集群,cluster节点的命名方式必须是clusterN,N=0,1,2...,cluster节点的子节点必须是一个或者多个cluster节点或者core节点
core 节点用来描述一个cpu,如果是单核cpu,则core节点就是cpus的子节点,core节点的命名方式必须是coreN,N=0,1,2...,core节点的子节点必须是一个或者多个thread节点
thread 节点用来描述处理的线程,thread节点的命名方式必须是threadN,N=0,1,2...
14. 设置PCIe接口使用的是RC模式还是EP模式。
作为RC功能时,需要配置成compatible = "rockchip,rk3588-pcie", "snps,dw-pcie";
而如果需要修改成EP模式,则需要修改为compatible = "rockchip,rk3588-pcie-ep", "snps,dw-pcie";
reset-gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_HIGH>;必须配置项**:此项是设置 PCIe 接口的 PERST#复位信号
15. mmu600_pcie节点必须配置:
compatible = "arm,smmu-v3"; // 用于匹配ARM SMMU-v3驱动
#iommu-cells = <1>; // 用于描述设备的stream ID
16. 节点属性分为标准属性和自定义属性,也就是说我们在设备树中可以根据自己的实际需要定义、添加设备属性。 标准属性的属性名是固定的,自定义属性名可按照要求自行定义
17. 在中断控制器中,必须有一个属性#interrupt-cells,表示其他节点如果使用这个中断控制器需要几个cell来表示使用哪一个中断。在中断控制器中,必须有一个属性interrupt-controller,表示它是中断控制器。在设备树中使用中断,需要使用属性interrupt-parent=<&***>表示是中断信号链接的是哪个中断控制器,接着使用interrupts属性来表示中断引脚和触发方式。interrupts里有几个cell,是由interrupt-parent对应的中断控制器里面的#interrupt-cells属性决定。
18. USB 3.0 Host 控制器为 xHCI,集成于 DWC3 OTG IP 中,所以不用单独配置 dts,只需要配置 DWC3 节点,并且设置 DWC3 的 dr_mode 属性为 dr_mode = "otg"或者 dr_mode = "host",就可以使能 xHCI 控制器
二 一些常用的节点
cru 是 clock & reset unit 的缩写,是clock controller
pmu 是poower management unit的缩写,电源管理单元
gic 中断控制器
cpuinfo 节点, 用于提供 cpu id
rockchip_suspend 休眠配置,目前已支持的配置选项都定义在:include/dt-
bindings/suspend/rockchip-rk3588.h
vdd_log_s0 logic 电源休眠配置
reserved-memory 预留内存,给设备驱动
l*_cache_* 都是缓存
panel-edp edp屏的配置
backlight 背光配置
vdd_gpu 设备节点描述GPU所需的电源配置信息
gs13673 触控
gt1x 触摸屏
es8388_sound 音频
saradc ADC配置
tsadc 测量CPU温度,温控策略
tsadc_gpio_func 配置tsadc为gpio模式
tsadc_shut 配置tsadc为over temperature protection 模式
Termal zone 节点主要⽤于配置温控策略相关的参数并⽣成对应的⽤⼾态接口
display_subsystem 显示子系统,drm节点
pdm0 pdm1 数字麦 --- 常见的数字麦有纯pdm麦和通过一些codec芯片将数字麦转换为i2s信号输入到
SOC;纯pdm麦就是直接进入SOC的pdm接口,走的是PDM信号
pdm0m0_clk 板载数字麦时钟
pdm0m0_clk1 外接数字麦时钟
adc_keys adc的按键配置
vcc5v0_host_en 节点是配置 usb host电源使能的引脚 (USB_HOST_PWREN_H)
usbc0 节点是描述配置type-c的节点
usb-typec 节点是描述配置type-c的节点,该节点下有usbc0_int,typec5v_pwren两个子节点
usbc0_int 节点是配置HUSB311芯片上的INT引脚,该芯片是一款USB Type-C PD控制器,使用INT信
号来请求中断
typec5v_pwren 节点是配置typec电源使能
vbus5v0_typec 节点是type-c5v电源的节点,该电源受typec5v_pwren控制,由vcc5v0_usb供给
vcc5v0_usb 节点是usb 5V电源的配置节点,
vcc12v_dcin 是板端输入电源12V的配置节点
vcc5v0_sys 系统的5V电源配置节点
usbdrd3_0 是usb控制器的配置,有usbdrd_dwc3_0子节点
usbdrd3_1 是usb控制器的配置,有usbdrd_dwc3_1子节点
usbdrd_dwc3_0 节点,表示该 USB 控制器集成了 DWC3 控制器
dp0 dp0的节点配置
dp0_in_vp0 把dp0的显示接口连接在port0
dp0_in_vp1 把dp0的显示接口连接在port1
dp0_in_vp2 把dp0的显示接口连接在port2
dp1 dp1的节点配置
dp1_in_vp0 把dp1的显示接口连接在port0
dp1_in_vp1 把dp1的显示接口连接在port1
dp1_in_vp2 把dp1的显示接口连接在port2
dp0_sound dp0的音频配置
dp1_sound dp1的音频配置
hdmi0_sound hdmi0的音频配置
hdmi1_sound hdmi1的音频配置
dp0m*_pins 等节点,是配置对应gpio管脚的dp0_hpdin_m*复用
pcie2x1l0 pcie2x1l1 pcie2x1l2 pcie3x2 pcie3x4 ... 都是pcie控制器的节点
pcie30phy 是控制器pcie3x2的phy节点
combphy1_ps 是控制器pcie2x1l0的phy节点
combphy2_psu 是控制器pcie2x1l1的phy节点
combphy0_ps 是控制器pcie2x1l2的phy节点
adc-keys ADC按键检测配置节点
volumeup-key 对应硬件连接上的recovery按键
bigcore0_grf 配置BIGCORE0_GRF寄存器地址的节点
bigcore1_grf 配置BIGCORE1_GRF寄存器地址的节点
litcore_grf 配置LITCORE_GRF 寄存器地址的节点
dsu_grf 配置DSU_GRF寄存器地址的节点
gpu_grf 配置GPU_GRF寄存器地址的节点
npu_grf 配置NPU_GRF寄存器地址的节点
vop_grf 配置VOP_GRF寄存器地址的节点
vo0_grf 配置VO0_GRF寄存器地址的节点
vo1_grf 配置VO1_GRF寄存器地址的节点
mipidphy0_grf 配置CSIDPHY0_GRF寄存器地址的节点
mipidphy1_grf 配置CSIDPHY1_GRF寄存器地址的节点
mipidcphy0_grf 配置MIPIDCPHY0_GRF寄存器地址的节点
mipidcphy1_grf 配置MIPIDCPHY1_GRF寄存器地址的节点
pcie30_phy_grf 配置PCIe3PHY_GRF寄存器地址的节点
pipe_phy0_grf 配置PIPE_PHY0_GRF寄存器地址的节点
pipe_phy1_grf 配置PIPE_PHY1_GRF寄存器地址的节点
pipe_phy2_grf 配置PIPE_PHY2_GRF寄存器地址的节点
usbdpphy1_grf 配置USBDPPHY1_GRF寄存器地址的节点
usbdpphy0_grf 配置USBDPPHY0_GRF寄存器地址的节点
usb2phy1_grf 配置USB2PHY1_GRF寄存器地址的节点
usb2phy0_grf 配置USB2PHY0_GRF寄存器地址的节点
usb2phy2_grf 配置USB2PHY2_GRF寄存器地址的节点
usb2phy3_grf 配置USB2PHY3_GRF寄存器地址的节点
usb_grf 配置USB_GRF寄存器地址的节点
php_grf 配置PHP_GRF寄存器地址的节点
...
spdif_tx2 音频spdif接口发送相关的配置
spdif_tx4
spdif_tx5
spdif_rx1 音频spdif接口接收相关的配置
spdif_rx2
i2s0_8ch 音频i2s接口相关的配置
...
i2s10_8ch
edp0 液晶显示屏edp接口的配置
edp1
gmac0 网络控制器GMAC(10/100/1000M Ethernet controller)配置
sata0 硬盘接口sata接口配置
sata1
sata2
sfc 灵活的串行闪存接口(FSPI CFG)配置
sdmmc SDMMC的配置
sdio SDIO的配置
sdhci EMMC的配置
crypto 是加密处理组件(CRYPTO_NS)的配置节点,它提供了一套通用的加密接口,crypto 节点必
须定义在 U-Boot dts
rng 是真随机数生成器(TRNG_NS)的配置节点
hdptxphy1 是HDMI-显示端口组合PHY IP(HDPTX Combo PHY1)的配置节点
i2c*m*_xfer 是将gpio复用成i2c功能的配置节点(如果:i2c下的pinctrl-names = "default"(即
i2c功能),系统会应用i2c*m*_xfer这个pinctrl,最终将针脚切换成对应的i2c功能)
rkisp_unite isp 单元的配置节点用以接收并处理图像,描述了两块isp
rkisp_unite_mmu isp 单元的内存管理单元节点,描述了两块isp内存管