| U-Boot FDT Overlay usage | |
| ============================================= | |
| Overlays Syntax | |
| --------------- | |
| Overlays require slightly different syntax compared to traditional overlays. | |
| Please refer to dt-object-internal.txt in the dtc sources for information | |
| regarding the internal format of overlays: | |
| https://git.kernel.org/pub/scm/utils/dtc/dtc.git/tree/Documentation/dt-object-internal.txt | |
| Building Overlays | |
| ----------------- | |
| In a nutshell overlays provides a means to manipulate a symbol a previous dtb | |
| or overlay has defined. It requires both the base and all the overlays | |
| to be compiled with the -@ command line switch so that symbol information is | |
| included. | |
| Note support for -@ option can only be found in dtc version 1.4.4 or newer. | |
| Only version 4.14 or higher of the Linux kernel includes a built in version | |
| of dtc that meets this requirement. | |
| Building an overlay follows the same process as building a traditional dtb. | |
| For example: | |
| base.dts | |
| -------- | |
| /dts-v1/; | |
| / { | |
| foo: foonode { | |
| foo-property; | |
| }; | |
| }; | |
| $ dtc -@ -I dts -O dtb -o base.dtb base.dts | |
| bar.dts | |
| ------- | |
| /dts-v1/; | |
| /plugin/; | |
| / { | |
| fragment@1 { | |
| target = <&foo>; | |
| __overlay__ { | |
| overlay-1-property; | |
| bar: barnode { | |
| bar-property; | |
| }; | |
| }; | |
| }; | |
| }; | |
| $ dtc -@ -I dts -O dtb -o bar.dtb bar.dts | |
| Ways to Utilize Overlays in U-boot | |
| ---------------------------------- | |
| There are two ways to apply overlays in U-boot. | |
| 1. Include and define overlays within a FIT image and have overlays | |
| automatically applied. | |
| 2. Manually load and apply overlays | |
| The remainder of this document will discuss using overlays via the manual | |
| approach. For information on using overlays as part of a FIT image please see: | |
| doc/uImage.FIT/overlay-fdt-boot.txt | |
| Manually Loading and Applying Overlays | |
| -------------------------------------- | |
| 1. Figure out where to place both the base device tree blob and the | |
| overlay. Make sure you have enough space to grow the base tree without | |
| overlapping anything. | |
| => setenv fdtaddr 0x87f00000 | |
| => setenv fdtovaddr 0x87fc0000 | |
| 2. Load the base blob and overlay blobs | |
| => load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/base.dtb | |
| => load ${devtype} ${bootpart} ${fdtovaddr} ${bootdir}/overlay.dtb | |
| 3. Set it as the working fdt tree. | |
| => fdtaddr $fdtaddr | |
| 4. Grow it enough so it can 'fit' all the applied overlays | |
| => fdt resize 8192 | |
| 5. You are now ready to apply the overlay. | |
| => fdt apply $fdtovaddr | |
| 6. Boot system like you would do with a traditional dtb. | |
| For bootm: | |
| => bootm ${kerneladdr} - ${fdtaddr} | |
| For bootz: | |
| => bootz ${kerneladdr} - ${fdtaddr} | |
| Please note that in case of an error, both the base and overlays are going | |
| to be invalidated, so keep copies to avoid reloading. | |
| Pantelis Antoniou | |
| pantelis.antoniou@konsulko.com | |
| 11/7/2017 |