Skip to contentSkip to conversation

linux: Fix uImage with appended DTs generation

PATCH Superseded Maxime Ripard 2 participants 3 messages Jun 7, 2013 – Aug 1, 2013

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 linux: Fix uImage with appended DTs generation

Fixes bug #5516 - appended device tree blobs on uImage fails

Before version 3.7 of the kernel, building the zImage and then the uImage will rewrite the zImage in the process, removing the device tree we just appended.

Use mkimage to append the device tree to the uImage and rebuild the headers directly.

---
 linux/linux.mk | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
linux/linux.mk +11 -10
index 57956dd..50fa943 100644
@@ -106,12 +106,6 @@ ifneq ($(LINUX_KERNEL_UIMAGE_LOADADDR),)
 LINUX_MAKE_FLAGS+=LOADADDR="$(LINUX_KERNEL_UIMAGE_LOADADDR)"
 endif
 
-ifeq ($(BR2_LINUX_KERNEL_APPENDED_DTB),y)
-LINUX_IMAGE_TARGET=zImage
-else
-LINUX_IMAGE_TARGET=$(LINUX_IMAGE_NAME)
-endif
-
 # Compute the arch path, since i386 and x86_64 are in arch/x86 and not
 # in arch/$(KERNEL_ARCH). Even if the kernel creates symbolic links
 # for bzImage, arch/i386 and arch/x86_64 do not exist when copying the
@@ -229,9 +223,16 @@ define LINUX_APPEND_DTB
 	fi >> $(KERNEL_ARCH_PATH)/boot/zImage
 endef
 ifeq ($(BR2_LINUX_KERNEL_APPENDED_UIMAGE),y)
-# We need to generate the uImage here after that so that the uImage is
-# generated with the right image size.
-LINUX_APPEND_DTB += $(sep)$(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) uImage
+# We need to generate a new u-boot image that takes into
+# account the extra-size added by the device tree at the end
+# of the image. To do so, we first need to retrieve both load
+# address and entry point for the kernel from the already
+# generate uboot image before using mkimage -l.
+LINUX_APPEND_DTB += $(sep) MKIMAGE_ARGS=`$(HOST_DIR)/usr/bin/mkimage -l $(LINUX_IMAGE_PATH) |\
+        sed -n -e 's/Image Name:[ ]*\(.*\)/-n \1/p' -e 's/Load Address:/-a/p' -e 's/Entry Point:/-e/p'`; \
+        $(HOST_DIR)/usr/bin/mkimage -A $(KERNEL_ARCH) -O linux \
+        -T kernel -C none $${MKIMAGE_ARGS} \
+        -d $(KERNEL_ARCH_PATH)/boot/zImage $(LINUX_IMAGE_PATH);
 endif
 endif
 
@@ -240,7 +241,7 @@ endif
 define LINUX_BUILD_CMDS
 	$(if $(BR2_LINUX_KERNEL_USE_CUSTOM_DTS),
 		cp $(BR2_LINUX_KERNEL_CUSTOM_DTS_PATH) $(KERNEL_ARCH_PATH)/boot/dts/)
-	$(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_TARGET)
+	$(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) $(LINUX_IMAGE_NAME)
 	@if grep -q "CONFIG_MODULES=y" $(@D)/.config; then 	\
 		$(TARGET_MAKE_ENV) $(MAKE) $(LINUX_MAKE_FLAGS) -C $(@D) modules ;	\
 	fi
Signature · 1 line
1.8.3
#1 lore raw

PATCH v2 1/1 linux: Fix uImage with appended DTs generation

Quoted 10 lines · Maxime Ripard

Fixes bug #5516 - appended device tree blobs on uImage fails

Before version 3.7 of the kernel, building the zImage and then the uImage will rewrite the zImage in the process, removing the device tree we just appended.

Use mkimage to append the device tree to the uImage and rebuild the headers directly.

Ping?

Signature · 10 lines
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130624/047e5d23/attachment-0001.asc>
#2 lore raw

PATCH v2 1/1 linux: Fix uImage with appended DTs generation

In reply to Maxime Ripard

Dear Maxime Ripard,

Quoted 6 lines · Maxime Ripard

Fixes bug #5516 - appended device tree blobs on uImage fails

Before version 3.7 of the kernel, building the zImage and then the uImage will rewrite the zImage in the process, removing the device tree we just appended.

Quoted 7 lines

Use mkimage to append the device tree to the uImage and rebuild the headers directly.

---
 linux/linux.mk | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

Applied, thanks.

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com