Thanks for doing this. However I have a few comments...
On 11/16/2010 02:41 PM, dirk.brandewie@xxxxxxxxx wrote:From: Dirk Brandewie<dirk.brandewie@xxxxxxxxx>
/* .data section */
#define DATA_DATA \
*(.data) \
@@ -468,7 +482,8 @@
MCOUNT_REC() \
DEV_DISCARD(init.rodata) \
CPU_DISCARD(init.rodata) \
- MEM_DISCARD(init.rodata)
+ MEM_DISCARD(init.rodata) \
+ KERNEL_DTB()
I thought the init.rodata was only for data used by __init things. Although the
current linker scripts do not put it in the section that gets recycled as usable
memory.
IIRC the unflattened version of the device tree has pointers to the flattened
data. Since the device tree nodes are live for the entire kernel lifecycle,
shouldn't the device tree blobs be in non-init memory?
Crud left over from debugging I will remove.
#define INIT_TEXT \
*(.init.text) \
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 4c72c11..29db062 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -200,6 +200,26 @@ quiet_cmd_gzip = GZIP $@
cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -f -9> $@) || \
(rm -f $@ ; false)
+# DTC
+# ---------------------------------------------------------------------------
+$(obj)/%.dtb.S: $(obj)/%.dtb FORCE
Why FORCE?
Looks like I need to add the generated .S files to clean-files
+ @echo '#include<asm-generic/vmlinux.lds.h>'> $@
+ @echo '.section .dtb.init.rodata,"a"'>> $@
+ @echo '.balign DTB_ALIGNMENT'>> $@
+ @echo '.global __dtb_$(*F)_begin'>> $@
+ @echo '__dtb_$(*F)_begin:'>> $@
+ @echo '.incbin "$<" '>> $@
+ @echo '__dtb_$(*F)_end:'>> $@
+ @echo '.global __dtb_$(*F)_end'>> $@
+ @echo '.balign DTB_ALIGNMENT'>> $@
+
+DTC = $(objtree)/scripts/dtc/dtc
+
+quiet_cmd_dtc = DTC $@
+ cmd_dtc = $(DTC) -O dtb -o $(obj)/$*.dtb -b 0 $(DTS_FLAGS) $(src)/dts/$*.dts
+
+$(obj)/%.dtb: $(src)/dts/%.dts
+ $(call if_changed,dtc)
Do all the generated files get cleaned up?
I will try it tomorrow to see for sure.
Thanks,
David Daney