Device Tree - notro/rpi-firmware GitHub Wiki

Device Tree on the Raspberry Pi.

Some notes about changing Device Tree properties.

Tools

Install from source

sudo apt-get install flex bison
git clone http://git.jdl.com/software/dtc.git
cd dtc
make

# make install, puts the files in ~/, instead we do:
sudo cp -v libfdt/libfdt*.so /usr/lib/
sudo cp -v dtc fdtdump fdtget fdtput /usr/bin/

dtc -v
Version: DTC 1.4.0

Note: The debian pakage is too old:

sudo apt-get install device-tree-compiler
Setting up device-tree-compiler (1.3.0-4) ...

sudo fdtput -t s /boot/bcm2708-rpi-b.dtb /display status "disabled"
Error at 'status': FDT_ERR_NOSPACE

'status' property

The status property determines whether the device is enabled or not.
Absent property, "okay" or "ok" value, means the device is enabled. Any other value means disabled.
Ref: http://lxr.free-electrons.com/ident?v=3.10;a=arm;i=__of_device_is_available

Enable SPI

ls /dev/spidev*
ls: cannot access /dev/spidev*: No such file or directory

fdtget /boot/bcm2708-rpi-b.dtb /axi/spi-bcm2708 -l
spidev@0
spidev@1
tsc2046@1

fdtget /boot/bcm2708-rpi-b.dtb /axi/spi-bcm2708 status
disabled

sudo fdtput --type s /boot/bcm2708-rpi-b.dtb /axi/spi-bcm2708 status "okay"

sudo shutdown -r now

ls /dev/spidev*
/dev/spidev0.0  /dev/spidev0.1

Enable i2c

ls /dev/i2c*
ls: cannot access /dev/i2c*: No such file or directory

fdtget /boot/bcm2708-rpi-b.dtb i2c1 status
disabled

sudo fdtput --type s /boot/bcm2708-rpi-b.dtb i2c1 status "okay"

sudo shutdown -r now

ls /dev/i2c*
/dev/i2c-1

Enable onewire

ls -l /sys/bus/w1/devices/
total 0

fdtget /boot/bcm2708-rpi-b.dtb /onewire status
disabled

sudo fdtput --type s /boot/bcm2708-rpi-b.dtb /onewire status "okay"

sudo shutdown -r now

ls -l /sys/bus/w1/devices/
w1_bus_master1

ADS7846 Touch

fdtget /boot/bcm2708-rpi-b.dtb /axi/spi-bcm2708/spidev@1 status
okay
sudo fdtput --type s /boot/bcm2708-rpi-b.dtb /axi/spi-bcm2708/spidev@1 status "disabled"
sudo fdtput --type s /boot/bcm2708-rpi-b.dtb /axi/spi-bcm2708/tsc2046@1 status "okay"

sudo shutdown -r now

ls /dev/spidev*
/dev/spidev0.0

dmesg | grep ADS7846
[    3.507510] input: ADS7846 Touchscreen as /devices/axi.0/20204000.spi-bcm2708/spi_master/spi0/spi0.1/input/input0

Disable display

ls /dev/fb*
/dev/fb0

sudo fdtput -t s /boot/bcm2708-rpi-b.dtb /display status "disabled"

fdtget /boot/bcm2708-rpi-b.dtb /display status
disabled

sudo shutdown -r now

ls /dev/fb*
ls: cannot access /dev/fb*: No such file or directory

bootargs

/chosen/bootargs is filled in by the firmware with the contents from /boot/cmdline.txt

/proc/device-tree

ls -l /proc/device-tree/
total 0
-r--r--r--  1 root root  4 Nov  4 15:21 #address-cells
dr-xr-xr-x  2 root root  0 Nov  4 15:21 aliases
dr-xr-xr-x 23 root root  0 Nov  4 15:21 axi
dr-xr-xr-x  2 root root  0 Nov  4 15:21 chosen
dr-xr-xr-x  5 root root  0 Nov  4 15:21 clocks
-r--r--r--  1 root root 13 Nov  4 15:21 compatible
dr-xr-xr-x  2 root root  0 Nov  4 15:21 display
dr-xr-xr-x  3 root root  0 Nov  4 15:21 gpio_keys
dr-xr-xr-x  3 root root  0 Nov  4 15:21 gpio_keys_polled
-r--r--r--  1 root root  4 Nov  4 15:21 interrupt-parent
dr-xr-xr-x  3 root root  0 Nov  4 15:21 leds
dr-xr-xr-x  2 root root  0 Nov  4 15:21 memory
-r--r--r--  1 root root 21 Nov  4 15:21 model
-r--r--r--  1 root root  1 Nov  4 15:21 name
dr-xr-xr-x  2 root root  0 Nov  4 15:21 onewire
-r--r--r--  1 root root  4 Nov  4 15:21 #size-cells
dr-xr-xr-x  2 root root  0 Nov  4 15:21 system

Dynamic debug

https://www.kernel.org/doc/Documentation/dynamic-debug-howto.txt

sudo mount -t debugfs none /sys/kernel/debug/
sudo chmod 777 /sys/kernel/debug/

grep pinctrl /sys/kernel/debug/dynamic_debug/control
...

Adding this to /boot/cmdline.txt, gives some Device Tree related debug output:

debug dyndbg="module pinctrl_bcm2708 +p; file drivers/gpio/gpiolib.c +p; file drivers/of/platform.c +p; file kernel/irq/irqdomain.c +p; file kernel/irq/manage.c +p; file kernel/resource.c +p;" 

References

Abbreviations

  • DT - Device Tree
  • FDT - Flattended Device Tree: a DT representation used in the dtb blob.
  • .dtb - Device Tree Binary
  • .dts - Device Tree Source
  • .dtsi - Device Tree Source Include
  • dtc - Device Tree Compiler