The config lists the drivers to compile into the kernel and each driver has a list of "compatible" strings that are checked against those in the DTB when the driver's "match" function is invoked by the kernel. Only the DTB nodes with their "status" property set to "okay" are submitted to the match function. For every match, the driver's "attach" function is invoked so it can use the information provided by the corresponding DTB node to configure a device instance. After configuring the hardware, the driver's "attach" function must call the relevant attach kernel API so the kernel becomes aware of the new device instance and knows how to call its methods. This can be tty_attach() for an UART, fdtbus_register_i2c_controller() + fdtbus_attach_i2cbus() for an I2C interface, or sysmon_envsys_sensor_attach() + sysmon_envsys_register() for a temperature sensor or an ADC.What I will be happy to learn too, is the articulation between the config and the DTB: there may be nodes created because some device is declared in the config, while being, also, described in the DTB; but some devices only declared in the DTB will escape the detection. Has the DTB to be mirrored in some way in the config? This is the question for which I didn't search an answer in the sources...
You get the idea.