How to extract DTB from the firmware image

sample DTB extraction from Totolink X6000R firmware CS_C8380R_X6000R_IP04499_MT7981_SPI_16M256M_V9.4.0cu.652_B20230116_ALL.web

binwalk CS_C8380R_X6000R_IP04499_MT7981_SPI_16M256M_V9.4.0cu.652_B20230116_ALL.web

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             device tree image (dtb)
232           0xE8            LZMA compressed data, properties: 0x6D, dictionary size: 8388608 bytes, uncompressed size: 8464392 bytes
2840856       0x2B5918        device tree image (dtb)
2883584       0x2C0000        Squashfs filesystem, little endian, version 4.0, compression:xz, size: 11274846 bytes, 2663 inodes, blocksize: 262144 bytes, created: 2023-01-16 05:20:57

now we need to extract dtb from right part of the firmware

dd if=CS_C8380R_X6000R_IP04499_MT7981_SPI_16M256M_V9.4.0cu.652_B20230116_ALL.web of=dtb.bin skip=2840856 count=42729 bs=1

and convert it to text form

dtc -f -I dtb -O dts dtb.bin

Personally I've failed dtb extractions on firmware with linux kernel 2.6 .binwalk didn't show below entry at any point .Even when I was able to extract it using binwalk -e

device tree image (dtb)