转载:
http://permalink.gmane.org/gmane.linux.kbuild.devel/8755
This rules are useful for appended device tree conforming to the CONFIG_ARM_APPENDED_DTB kernel option. The rule dtbImage.<dt> is actually just a: cat zImage <dt>.dtb > dtbImage.<dt> The dtbuImage.<dt> makes an uImage out of the dtbImage.<dt> file. KernelVersion: v3.6-rc5
Signed-off-by: Richard Genoud <richard.genoud <at> gmail.com> --- arch/arm/Makefile | 30 ++++++++++++++++-------------- arch/arm/boot/Makefile | 11 +++++++++++ scripts/Makefile.lib | 6 ++++++ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 30eae87..c5f2673 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile <at> <at> -278,7 +278,7 <at> <at> archprepare: # Convert bzImage to zImage bzImage: zImage -zImage Image xipImage bootpImage uImage: vmlinux +zImage Image xipImage bootpImage uImage dtbImage.% dtbuImage.% : vmlinux $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$ <at> zinstall uinstall install: vmlinux <at> <at> -300,17 +300,19 <at> <at> i zi:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $ <at> define archhelp - echo ‘* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)‘ - echo ‘ Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)‘ - echo ‘* xipImage - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)‘ - echo ‘ uImage - U-Boot wrapped zImage‘ - echo ‘ bootpImage - Combined zImage and initial RAM disk‘ - echo ‘ (supply initrd image via make variable INITRD=<path>)‘ - echo ‘ dtbs - Build device tree blobs for enabled boards‘ - echo ‘ install - Install uncompressed kernel‘ - echo ‘ zinstall - Install compressed kernel‘ - echo ‘ uinstall - Install U-Boot wrapped compressed kernel‘ - echo ‘ Install using (your) ~/bin/$(INSTALLKERNEL) or‘ - echo ‘ (distribution) /sbin/$(INSTALLKERNEL) or‘ - echo ‘ install to $$(INSTALL_PATH) and run lilo‘ + echo ‘* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)‘ + echo ‘ Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)‘ + echo ‘* xipImage - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)‘ + echo ‘ uImage - U-Boot wrapped zImage‘ + echo ‘ bootpImage - Combined zImage and initial RAM disk‘ + echo ‘ (supply initrd image via make variable INITRD=<path>)‘ + echo ‘ dtbs - Build device tree blobs for enabled boards‘ + echo ‘ dtbImage.<dt> - zImage with an appended device tree blob‘ + echo ‘ dtbuImage.<dt> - uImage with an embedded device tree blob‘ + echo ‘ install - Install uncompressed kernel‘ + echo ‘ zinstall - Install compressed kernel‘ + echo ‘ uinstall - Install U-Boot wrapped compressed kernel‘ + echo ‘ Install using (your) ~/bin/$(INSTALLKERNEL) or‘ + echo ‘ (distribution) /sbin/$(INSTALLKERNEL) or‘ + echo ‘ install to $$(INSTALL_PATH) and run lilo‘ endef diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index c877087..35c01a8 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile <at> <at> -98,6 +98,17 <at> <at> $(obj)/bootpImage: $(obj)/bootp/bootp FORCE $(call if_changed,objcopy) <at> echo ‘ Kernel: $ <at> is ready‘ +# dtbImage.% - a dtbImage is a zImage with an appended device tree blob +$(obj)/dtbImage.%: $(obj)/zImage $(obj)/%.dtb FORCE + $(call if_changed,cat) + <at> echo ‘ Kernel: $ <at> is ready‘ + +# dtbuImage.% - a dtbuImage is a uImage with an embedded device tree blob +$(obj)/dtbuImage.%: $(obj)/dtbImage.% FORCE + <at> $(check_for_multiple_loadaddr) + $(call if_changed,uimage) + <at> echo ‘ Image $ <at> is ready‘ + PHONY += initrd FORCE initrd: <at> test "$(INITRD_PHYS)" != "" || \ diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 0be6f11..8550466 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib <at> <at> -235,6 +235,12 <at> <at> cmd_ld = $(LD) $(LDFLAGS) $(ldflags-y) $(LDFLAGS_$( <at> F)) \ quiet_cmd_objcopy = OBJCOPY $ <at> cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$( <at> F)) $< $ <at> +# Cat +# --------------------------------------------------------------------------- + +quiet_cmd_cat = CAT $ <at> +cmd_cat = (cat $(filter-out FORCE,$^) > $ <at> ) || (rm -f $ <at> ; false) + # Gzip # --------------------------------------------------------------------------- --
转载:
https://www.osadl.org/Single-View.111+M5297463051f.0.html
How can I boot a recent kernel?
Yes, some vendors still ship bootloaders without device tree support, since their vendor kernel does not know what a device tree is and, thus, the bootloader neither does. But, fortunately, kernel developers are aware of it and implemented the
CONFIG_ARM_APPENDED_DTB
feature. What is this?
Append the device tree to the kernel
Since the bootloader loads the kernel into memory without asking any questions, we can fool the bootloader by making the kernel a little larger and append the device tree at its end. During the first steps of kernel initialization, the device tree is searched for at the end of the regular kernel code and used as if it had been loaded separately.
How do I prepare the kernel for this procedure?
In any case, CONFIG_ARM_APPENDED_DTB=y must be configured. If zImage is used to boot, simply execute
cd /usr/src/kernels/your-linux-tree
cd arch/your-arch/boot
cat zImage dts/your-device-tree.dtb >zImage-with-dtb
after having compiled the kernel as usual. If the uImage format is needed, you still have to execute the above commands. In addition, create a uImage file based on the combined zImage kernel as follows
cp zImage zImage-without-dtb
cp zImage-with-dtb zImage
cd -
make LOADADDR=$YOUR_LOADADDR ARCH=your-arch uImage
cd -
cp zImage-without-dtb zImage
and let the bootloader load the uImage file that now contains both the kernel and device tree.
Check for the correct model string
If everything worked correctly, you should see a line
Machine: Your generic board (Flattened Device Tree), model: your model string
that corresponds to the related setting in your
device tree. This line is one of the first output lines after the kernel
started execution.