How to Write Device Trees?

Could anyone point me to some resources that explain how to write device tree files for the BBB?

To clarify, the OS running on my BeagleBone is a custom Linux distro (not one of the more common Debian or Angstrom ones). The current configuration only enables one of the SPI ports and none of the PWM pins. I want to modify the .dts file used in building the OS so that it correctly enables and muxes the SPI and PWM pins that I select. I also want to avoid using device tree overlays, so I’m dealing with just the device trees. Any help would be appreciated, thanks.

I would really appreciate this information too. I see examples of device trees online and in books but nothing so far explains what any of the syntax really means and without understanding that I’m just copying something without learning anything. I could really use some help here, please!

I found some more documentation but unfortunately it’s really not very straightforward.

https://github.com/devicetree-org/devicetree-specification
https://www.devicetree.org/
https://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/device-tree-overlays
https://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/compiling-an-overlay