aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorDirk Brandewie <dirk.brandewie@gmail.com>2010-12-22 14:57:26 -0500
committerGrant Likely <grant.likely@secretlab.ca>2010-12-23 16:43:00 -0500
commitaab94339cd85d726abeae78fc02351fc1910e6a4 (patch)
tree25d434a1dec4f758a9938e621dc1516f7a788521 /scripts
parentcfb13c5db08c90311a5defdde9a0328ee788cca5 (diff)
of: Add support for linking device tree blobs into vmlinux
This patch adds support for linking device tree blob(s) into vmlinux. Modifies asm-generic/vmlinux.lds.h to add linking .dtb sections into vmlinux. To maintain compatiblity with the of/fdt driver code platforms MUST copy the blob to a non-init memory location before the kernel frees the .init.* sections in the image. Modifies scripts/Makefile.lib to add a kbuild command to compile DTS files to device tree blobs and a rule to create objects to wrap the blobs for linking. STRUCT_ALIGNMENT is defined in vmlinux.lds.h for use in the rule to create wrapper objects for the dtb in Makefile.lib. The STRUCT_ALIGN() macro in vmlinux.lds.h is modified to use the STRUCT_ALIGNMENT definition. The DTB's are placed on 32 byte boundries to allow parsing the blob with driver/of/fdt.c during early boot without having to copy the blob to get the structure alignment GCC expects. A DTB is linked in by adding the DTB object to the list of objects to be linked into vmlinux in the archtecture specific Makefile using obj-y += foo.dtb.o Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> Acked-by: Michal Marek <mmarek@suse.cz> [grant.likely@secretlab.ca: cleaned up whitespace inconsistencies] Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.lib23
1 files changed, 23 insertions, 0 deletions
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 4c72c1189479..396da16aabf8 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -200,6 +200,29 @@ quiet_cmd_gzip = GZIP $@
200cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \ 200cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9 > $@) || \
201 (rm -f $@ ; false) 201 (rm -f $@ ; false)
202 202
203# DTC
204# ---------------------------------------------------------------------------
205
206# Generate an assembly file to wrap the output of the device tree compiler
207quiet_cmd_dt_S_dtb= DTB $@
208cmd_dt_S_dtb= \
209( \
210 echo '\#include <asm-generic/vmlinux.lds.h>'; \
211 echo '.section .dtb.init.rodata,"a"'; \
212 echo '.balign STRUCT_ALIGNMENT'; \
213 echo '.global __dtb_$(*F)_begin'; \
214 echo '__dtb_$(*F)_begin:'; \
215 echo '.incbin "$<" '; \
216 echo '__dtb_$(*F)_end:'; \
217 echo '.global __dtb_$(*F)_end'; \
218 echo '.balign STRUCT_ALIGNMENT'; \
219) > $@
220
221$(obj)/%.dtb.S: $(obj)/%.dtb
222 $(call cmd,dt_S_dtb)
223
224quiet_cmd_dtc = DTC $@
225cmd_dtc = $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $<
203 226
204# Bzip2 227# Bzip2
205# --------------------------------------------------------------------------- 228# ---------------------------------------------------------------------------