U-boot fdt
U-boot下的fdt命令,可以查看U-boot环境下设备树信息、查看修改设备树的属性。
=> fdt
fdt - flattened device tree utility commands
Usage:
fdt addr [-c] <addr> [<length>] - Set the [control] fdt location to <addr>
fdt apply <addr> - Apply overlay to the DT
fdt move <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active
fdt resize [<extrasize>] - Resize fdt to size + padding to 4k addr + some optional <extrasize> if needed
fdt print <path> [<prop>] - Recursive print starting at <path>
fdt list <path> [<prop>] - Print one level starting at <path>
fdt get value <var> <path> <prop> - Get <property> and store in <var>
fdt get name <var> <path> <index> - Get name of node <index> and store in <var>
fdt get addr <var> <path> <prop> - Get start address of <property> and store in <var>
fdt get size <var> <path> [<prop>] - Get size of [<property>] or num nodes and store in <var>
fdt set <path> <prop> [<val>] - Set <property> [to <val>]
fdt mknode <path> <node> - Create a new node after <path>
fdt rm <path> [<prop>] - Delete the node or <property>
fdt header - Display header info
fdt bootcpu <id> - Set boot cpuid
fdt memory <addr> <size> - Add/Update memory node
fdt rsvmem print - Show current mem reserves
fdt rsvmem add <addr> <size> - Add a mem reserve
fdt rsvmem delete <index> - Delete a mem reserves
fdt chosen [<start> <end>] - Add/update the /chosen branch in the tree
<start>/<end> - initrd start/end addr
NOTE: Dereference aliases by omitting the leading '/', e.g. fdt print ethernet0.
使用fdt list命令,可以查看设备树的一级节点(node)
=> fdt list
/ {
compatible = "radxa,rock-5b", "rockchip,rk3588";
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
model = "Radxa ROCK 5B";
fit-images {
};
aliases {
};
firmware {
};
psci {
};
xin24m {
};
sram@10f000 {
};
syscon@fd58c000 {
};
syscon@fd5ac000 {
};
syscon@fd5b0000 {
};
syscon@fd5bc000 {
};
syscon@fd5c4000 {
};
syscon@fd5c8000 {
};
syscon@fd5d0000 {
};
syscon@fd5f0000 {
};
clock-controller@fd7c0000 {
};
pcie@fe190000 {
};
spi@fe2b0000 {
};
mmc@fe2c0000 {
};
mmc@fe2e0000 {
};
decompress@fea80000 {
};
spi@feb20000 {
};
serial@feb50000 {
};
saradc@fec10000 {
};
otp@fecc0000 {
};
phy@fed80000 {
};
pinctrl {
};
syscon@fd5b8000 {
};
syscon@fd5c0000 {
};
crypto@fe370000 {
};
rng@fe378000 {
};
chosen {
};
secure-otp@fe3a0000 {
};
vcc12v-dcin {
};
vcc5v0-sys {
};
led-sys {
};
adc-keys {
};
vcc3v3-pcie30 {
};
vcc3v3-pcie2x1l2-regulator {
};
};
如果想查看某个节点的具体信息,可以通过路径指定:
=> fdt list /pcie@fe190000
pcie@fe190000 {
compatible = "rockchip,rk3588-pcie", "snps,dw-pcie";
#address-cells = <0x00000003>;
#size-cells = <0x00000002>;
bus-range = <0x00000040 0x0000004f>;
clocks = <0x1000000b 0x00000152 0x1000000b 0x00000157 0x1000000b 0x0000014d 0x1000000b 0x0000015d 0x1000000b 0x00000162 0x1000000b 0x00000182>;
device_type = "pci";
interrupts = <0x00000000 0x000000fd 0x00000004 0x00000000 0x000000fc 0x00000004 0x00000000 0x000000fb 0x00000004 0x00000000 0x000000fa 0x00000004 0x00000000 0x000000f9 0x00000004>;
interrupt-names = "sys", "pmc", "msg", "legacy", "err";
#interrupt-cells = <0x00000001>;
interrupt-map-mask = <0x00000000 0x00000000 0x00000000 0x00000007>;
interrupt-map = * 0x00000000eb9fa1dc [0x00000060];
linux,pci-domain = <0x00000004>;
num-ib-windows = <0x00000008>;
num-ob-windows = <0x00000008>;
num-viewport = <0x00000004>;
max-link-speed = <0x00000002>;
msi-map = <0x00004000 0x10000000 0x00004000 0x00001000>;
num-lanes = <0x00000001>;
phys = <0x10000021 0x00000002>;
phy-names = "pcie-phy";
power-domains = <0x1000000c 0x00000020>;
ranges = * 0x00000000eb9fa304 [0x00000054];
reg = <0x0000000a 0x41000000 0x00000000 0x00400000 0x00000000 0xfe190000 0x00000000 0x00010000 0x00000000 0xf4000000 0x00000000 0x00100000>;
reg-names = "pcie-dbi", "pcie-apb", "pcie-config";
resets = <0x1000000b 0x00000211 0x1000000b 0x00000220>;
reset-names = "pcie", "periph";
rockchip,pipe-grf = <0x10000014>;
u-boot,dm-pre-reloc;
pinctrl-names = "default";
pinctrl-0 = <0x10000022 0x10000023>;
reset-gpios = <0x10000024 0x00000008 0x00000000>;
vpcie3v3-supply = <0x10000025>;
status = "okay";
};