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
- http://www.devicetree.org/Device_Tree_Usage
- http://elinux.org/Device_Tree
- http://omappedia.org/wiki/Device_Tree
- Specification: https://www.power.org/wp-content/uploads/2012/06/Power_ePAPR_APPROVED_v1.1.pdf
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