Changes between Version 1 and Version 2 of linux/devicetree
- Timestamp:
- 10/22/2017 06:16:56 AM (7 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
linux/devicetree
v1 v2 4 4 The modern linux kernel uses a system called 'devicetree' to describe hardware in a consistent fashion to avoid needing custom 'board support' files for boards. 5 5 6 Typically the bootloader will pass a 'flattened device tree' (a compiled binary representation of a device-tree) to the kernel so that the kernel can configure all the components on the board. 6 Typically the bootloader will pass a 'flattened device tree' (a compiled binary representation of a device-tree) to the kernel so that the kernel can configure all the components on the board. 7 7 8 8 The Gateworks Ventana product family based off the Freescale i.MX6 CPU, uses devicetree (with the exception of the early Yocto 1.3 and Android jellybean BSP's which were based on a 3.0.35 non-device-tree kernel) … … 17 17 18 18 == Example Device Tree File == 19 You can find the device tree files in arch/arm/boot/dts19 You can find the device tree files in {{{arch/arm/boot/dts}}} 20 20 21 21 For an example, see here: [https://github.com/Gateworks/linux-imx6/blob/gateworks_3.10.53_1.1.0_ga/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi] 22 22 23 23 24 == Accessing devicetree from the Bootloader ==24 == Accessing Device Tree from the Bootloader == 25 25 The Ventana u-boot has fdt support enabled and uses this through default bootscripts to load an fdt (based on the board model) from the filesystem of the boot media. The bootloader then modifies the devicetree to disable components that are possible on the board, but perhaps not loaded on the bill-of-materials (for example, a Gateworks Special build). 26 26 27 If desired you can use the ftdu-boot command to access/modify the devicetree before the kernel is booted.27 If desired you can use the {{{ftd}}} u-boot command to access/modify the devicetree before the kernel is booted. 28 28 29 29 Examples: 30 30 * display the fdt of a Ventana board (loaded from NAND flash ubifs): 31 {{{ 31 {{{#!bash 32 32 setenv fsload 'ubifsload' 33 33 ubi part rootfs && ubifsmount ubi0:rootfs … … 36 36 }}} 37 37 * disable PCI via device-tree: 38 {{{ 38 {{{#!bash 39 39 setenv fsload 'ubifsload' 40 40 ubi part rootfs && ubifsmount ubi0:rootfs … … 44 44 }}} 45 45 46 Note the Ventana bootloader has a '''fixfdt'''script that can make integrating fixups like this into the boot process easy. See [http://trac.gateworks.com/wiki/ventana/bootloader#Specifyinganalternatedevice-treeblobDTB here] for details.46 Note the Ventana bootloader has a {{{fixfdt}}} script that can make integrating fixups like this into the boot process easy. See [http://trac.gateworks.com/wiki/ventana/bootloader#Specifyinganalternatedevice-treeblobDTB here] for details. 47 47 48 48 49 == Accessing devicetree from Linux ==50 If the kernel is configured with CONFIG_PROC_DEVICETREE (which the Ventana OpenWrt BSP does configure) and procfs is enabled, you can access the devicetree via /proc/device-tree. This can be useful to obtain information about the board that the bootloader configured, such as board model and serial number.49 == Accessing Device Tree from Linux == 50 If the kernel is configured with CONFIG_PROC_DEVICETREE (which the Ventana OpenWrt BSP does configure) and procfs is enabled, you can access the devicetree via {{{/proc/device-tree}}}. This can be useful to obtain information about the board that the bootloader configured, such as board model and serial number. 51 51 52 52 Examples: 53 53 * show board model: 54 {{{ 54 {{{#!bash 55 55 echo $(cat /proc/device-tree/board) 56 56 }}} 57 57 * show board serialnumber 58 {{{ 58 {{{#!bash 59 59 echo $(cat /proc/device-tree/system-serial) 60 60 }}} 61 61 * show devicetree compatible node (this describes which device-tree was used as there is one per base-board design): 62 {{{ 62 {{{#!bash 63 63 echo $(cat /proc/device-tree/compatible) 64 64 }}} 65 * show chosen bootargs (the bootargs passed in by the bootloader, same as /proc/cmdline):66 {{{ 65 * show chosen bootargs (the bootargs passed in by the bootloader, same as {{{/proc/cmdline}}}): 66 {{{#!bash 67 67 echo $(cat /proc/device-tree/chosen/bootargs) 68 }}} 69 * Print the whole device tree: 70 {{{#!bash 71 find /proc/device-tree/ 68 72 }}} 69 73 70 74 71 == Specifying the Device -tree that is used ==72 The [wiki:/linux/bootloader bootloader] is responsible for loading the device-tree blob (DTB) and executing the kernel 75 == Specifying the Device Tree Used == 76 The [wiki:/linux/bootloader bootloader] is responsible for loading the device-tree blob (DTB) and executing the kernel 73 77 The Gateworks ventana bootloader in a way that it knows where the DTB is loaded. 74 78 75 79 Therefore, its the bootloader that decides which DTB to load and from where. 76 80 77 See [wiki:/ventana/bootloader] for details on how the DTB filename is chosen and loaded. 81 See [wiki:/ventana/bootloader] for details on how the DTB filename is chosen and loaded. 82 83 == Adding New Devices to the Device Tree == 84 For customers interested in adding a new device to an existing controller, see the [wiki:SPI] wiki page for an example of the process. 85 86 == Compiling the Device Tree == 87 If you need to change the device-tree you can easily compile it on a Linux system using the {{{dtc}}} app from the device-tree-compiler package: 88 {{{#!bash 89 apt-get install device-tree-compiler 90 dtc -O dtb -o imx6dl-gw51xx.dtb imqx6dl-gw51xx.dts 91 }}} 92 93 You can also de-compile a dtb back to a dts: 94 {{{#!bash 95 $ dtc -I dtb -O dts imx6dl-gw51xx.dtb 96 }}}