All of lore.kernel.org
 help / color / mirror / Atom feed
From: Remy Bohmer <linux@bohmer.net>
To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	u-boot@lists.denx.de, sam@ravnborg.org
Cc: Stefan Roese <sr@denx.de>, Remy Bohmer <linux@bohmer.net>
Subject: [patch 2/2] Add support for building the new U-boot uImage format (FIT-format)
Date: Mon, 25 Aug 2008 21:14:29 +0200	[thread overview]
Message-ID: <48b30a00.1701d00a.4ee8.ffffa5f7@mx.google.com> (raw)
In-Reply-To: 20080825191427.728251800@bohmer.net

[-- Attachment #1: add-u-boot-fit-image-support.patch --]
[-- Type: text/plain, Size: 12588 bytes --]

Allow building of the newer FIT-image format for U-boot, while keeping
it possible to build the legacy format, for people who do not want to (or can) 
upgrade to U-boot 1.3.3 or newer.

If an older mkimage is detected, or if there is no dtc (Device Tree Compiler)
then automagically the legacy format is created.
There is also a possibility to force the legacy format by means of a Kconfig
option.

Note: This patch only adapts this for ARM, AVR32, Blackfin and sh architectures.
      It does not adapt the PowerPC tree, because PowerPC does not use the
      script at scripts/mkuboot.sh

Signed-off-by: Remy Bohmer <linux@bohmer.net>
---
 arch/arm/Kconfig                |   10 ++
 arch/arm/boot/Makefile          |   10 ++
 arch/avr32/Kconfig              |   14 ++++
 arch/avr32/boot/images/Makefile |    8 ++
 arch/blackfin/Kconfig           |   10 ++
 arch/blackfin/boot/Makefile     |    8 ++
 arch/sh/Kconfig                 |   10 ++
 arch/sh/boot/Makefile           |    8 ++
 scripts/mkuboot.sh              |  140 ++++++++++++++++++++++++++++++++++++++--
 9 files changed, 209 insertions(+), 9 deletions(-)

Index: linux-2.6.27-rc4/arch/arm/Kconfig
===================================================================
--- linux-2.6.27-rc4.orig/arch/arm/Kconfig	2008-08-25 20:58:36.000000000 +0200
+++ linux-2.6.27-rc4/arch/arm/Kconfig	2008-08-25 20:58:40.000000000 +0200
@@ -977,6 +977,16 @@ config UNCOMPRESSED_UIMAGE
 
 	  If unsure, say N.
 
+config LEGACY_UIMAGE
+	bool "Use legacy format for building uImage"
+	default n
+	help
+	  Enable this option if you want uImage to be build in the legacy
+	  format. If this option is 'N' the uImage will be build in the newer
+	  FIT-image format. (Needs at least 'mkimage v1.3.3', and 'dtc v1.2.0')
+
+	  If unsure, say N.
+
 config XIP_PHYS_ADDR
 	hex "XIP Kernel Physical Location"
 	depends on XIP_KERNEL
Index: linux-2.6.27-rc4/arch/arm/boot/Makefile
===================================================================
--- linux-2.6.27-rc4.orig/arch/arm/boot/Makefile	2008-08-25 20:58:36.000000000 +0200
+++ linux-2.6.27-rc4/arch/arm/boot/Makefile	2008-08-25 20:58:40.000000000 +0200
@@ -59,10 +59,16 @@ $(obj)/zImage:	$(obj)/compressed/vmlinux
 
 endif
 
+ifeq ($(CONFIG_LEGACY_UIMAGE),y)
+UIMAGE_FORMAT=legacy
+else
+UIMAGE_FORMAT=fit
+endif
+
 quiet_cmd_uimage = UIMAGE  $@
       cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
-		   -C none -a $(LOADADDR) -e $(LOADADDR) \
-		   -n 'Linux-$(KERNELRELEASE)' -d $< $@
+		   -C none -a $(LOADADDR) -e $(LOADADDR) -l $(UIMAGE_FORMAT) \
+		   -n 'Linux-$(KERNELRELEASE)' -d $< -i $@
 
 ifeq ($(CONFIG_ZBOOT_ROM),y)
 $(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
Index: linux-2.6.27-rc4/scripts/mkuboot.sh
===================================================================
--- linux-2.6.27-rc4.orig/scripts/mkuboot.sh	2008-08-25 20:58:33.000000000 +0200
+++ linux-2.6.27-rc4/scripts/mkuboot.sh	2008-08-25 21:07:06.000000000 +0200
@@ -1,19 +1,151 @@
 #!/bin/bash
-
 #
 # Build U-Boot image when `mkimage' tool is available.
+# Check also if dtc exist and has the right version (at least v 1.2.0)
+#
+# 25 Aug 2008: Remy Bohmer <linux@bohmer.net>,
+#              Added support for FIT and legacy uImages
 #
 
 MKIMAGE=$(type -path "${CROSS_COMPILE}mkimage")
+DTC=$(type -path "${CROSS_COMPILE}dtc")
+
+function usage () {
+	echo "Usage: `basename $0` -A arch -O os -T type -C comp -a addr"
+	echo "                -e ep -l <legacy|fit> -n name "
+	echo "                -d data_file[:data_file...] -i image"
+	echo "       -A ==> set architecture to 'arch'"
+	echo "       -O ==> set operating system to 'os'"
+	echo "       -T ==> set image type to 'type'"
+	echo "       -C ==> set compression type 'comp'"
+	echo "       -a ==> set load address to 'addr' (hex)"
+	echo "       -e ==> set entry point to 'ep' (hex)"
+	echo "       -l ==> uImage format type <legacy|fit>"
+	echo "       -n ==> set image name to 'name'"
+	echo "       -d ==> use image data from 'datafile'"
+	echo "       -i ==> destination image"
+	exit 1
+}
+
+OPT_CNT=0
+OPT_MASK=0
+function track_opt () {
+	let OPT_CNT=${OPT_CNT}+1
+	let OPT_MASK=${OPT_MASK}+$1
+}
+
+function gen_tmp_specfile () {
+rm -f $1
+cat > $1 << EOF
+/ {
+        description = "kernel ${NAME}";
+        #address-cells = <1>;
+
+        images {
+                kernel@1 {
+                        description = "Linux Kernel";
+                        data = /incbin/("$(basename ${DATA})");
+                        type = "${TYPE}";
+                        arch = "${ARCH}";
+                        os = "${OS}";
+                        compression = "${COMPRESS}";
+                        load = <${LOADADDR}>;
+                        entry = <${ENTRY}>;
+                        hash@1 {
+                                algo = "crc32";
+                        };
+                        hash@2 {
+                                algo = "sha1";
+                        };
+                };
+        };
+
+        configurations {
+                default = "config@1";
+                config@1 {
+                        description = "Boot Linux kernel";
+                        kernel = "kernel@1";
+                };
+        };
+};
+EOF
+}
+
+#
+# Parse command line
+#
+while getopts ":A:O:T:C:a:e:l:n:d:i:" Option
+do
+	case $Option in
+		A  ) track_opt 1  ; ARCH=$OPTARG;;
+		O  ) track_opt 2  ; OS=$OPTARG;;
+		T  ) track_opt 4  ; TYPE=$OPTARG;;
+		C  ) track_opt 8  ; COMPRESS=$OPTARG;;
+		a  ) track_opt 16 ; LOADADDR=$OPTARG;;
+		e  ) track_opt 32 ; ENTRY=$OPTARG;;
+		l  ) track_opt 64 ; UIMAGE_FORMAT=$OPTARG;;
+		n  ) track_opt 128; NAME=$OPTARG;;
+		d  ) track_opt 256; DATA=$OPTARG;;
+		i  ) track_opt 512; IMAGE=$OPTARG;;
+		*  ) echo "Invalid option passed to '$0' (options:$@)"
+		     usage;;
+	esac
+done
+
+# strip off the 0x from the LOADADDR and ENTRY (if exists)
+LOADADDR=$(echo "${LOADADDR}" | sed s@'0x'@''@g)
+ENTRY=$(echo "${ENTRY}" | sed s@'0x'@''@g)
+
+# All arguments available ?
+if [ ${OPT_CNT} -ne 10 -o ${OPT_MASK} -ne 1023 ]; then
+	usage
+fi
 
 if [ -z "${MKIMAGE}" ]; then
 	MKIMAGE=$(type -path mkimage)
 	if [ -z "${MKIMAGE}" ]; then
 		# Doesn't exist
-		echo '"mkimage" command not found - U-Boot images will not be built' >&2
+		echo '"mkimage" command not found' >&2
+		echo '--> U-Boot images will not be built' >&2
 		exit 0;
 	fi
 fi
 
-# Call "mkimage" to create U-Boot image
-${MKIMAGE} "$@"
+if [ "${UIMAGE_FORMAT}" != "legacy" ]; then
+	if [ "x$(${MKIMAGE} 2>&1 | grep '\-f')" = "x" ]; then
+		echo "'${MKIMAGE}' does not support FIT images" >&2
+		echo "Building legacy U-Boot image..." >&2
+		UIMAGE_FORMAT=legacy
+	fi
+fi
+
+if [ "${UIMAGE_FORMAT}" != "legacy" ]; then
+	# for building FIT images we need the device tree compiler
+	if [ -z "${DTC}" ]; then
+		DTC=$(type -path dtc)
+		if [ -z "${DTC}" ]; then
+			# Doesn't exist
+			echo '"dtc" command not found' >&2
+			echo '--> Can only built legacy U-Boot images' >&2
+			UIMAGE_FORMAT=legacy
+		else
+			DTC_VER=$(dtc -v | cut -d' ' -f3 | sed s@'\.'@''@g)
+			if [ ${DTC_VER} -lt 120 ]; then
+				echo '"dtc" must be at least version 1.2.0' >&2
+				echo '-->Can only built legacy U-Boot images'>&2
+				UIMAGE_FORMAT=legacy
+			fi
+		fi
+	fi
+fi
+
+if [ "${UIMAGE_FORMAT}" = "legacy" ]; then
+	# Call "mkimage" in the legacy mode to create U-Boot image
+	${MKIMAGE} -A ${ARCH} -O ${OS} -T ${TYPE} \
+		   -C ${COMPRESS} -a 0x${LOADADDR} -e 0x${ENTRY} \
+		   -n "${NAME}" -d ${DATA} ${IMAGE}
+else
+	# Call "mkimage" in the FIT mode to create U-Boot image
+	gen_tmp_specfile ${IMAGE}.its
+	${MKIMAGE} -f ${IMAGE}.its ${IMAGE}
+fi
Index: linux-2.6.27-rc4/arch/blackfin/Kconfig
===================================================================
--- linux-2.6.27-rc4.orig/arch/blackfin/Kconfig	2008-08-25 20:58:33.000000000 +0200
+++ linux-2.6.27-rc4/arch/blackfin/Kconfig	2008-08-25 20:58:40.000000000 +0200
@@ -286,6 +286,16 @@ config BOOT_LOAD
 	  memory region is used to capture NULL pointer references as well
 	  as some core kernel functions.
 
+config LEGACY_UIMAGE
+	bool "Use legacy format for building uImage"
+	default n
+	help
+	  Enable this option if you want uImage to be build in the legacy
+	  format. If this option is 'N' the uImage will be build in the newer
+	  FIT-image format. (Needs at least 'mkimage v1.3.3', and 'dtc v1.2.0')
+
+	  If unsure, say N.
+
 comment "Clock/PLL Setup"
 
 config CLKIN_HZ
Index: linux-2.6.27-rc4/arch/blackfin/boot/Makefile
===================================================================
--- linux-2.6.27-rc4.orig/arch/blackfin/boot/Makefile	2008-08-25 20:58:33.000000000 +0200
+++ linux-2.6.27-rc4/arch/blackfin/boot/Makefile	2008-08-25 20:58:40.000000000 +0200
@@ -11,11 +11,17 @@ MKIMAGE := $(srctree)/scripts/mkuboot.sh
 targets := vmImage
 extra-y += vmlinux.bin vmlinux.gz
 
+ifeq ($(CONFIG_LEGACY_UIMAGE),y)
+UIMAGE_FORMAT=legacy
+else
+UIMAGE_FORMAT=fit
+endif
+
 quiet_cmd_uimage = UIMAGE  $@
       cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A $(ARCH) -O linux -T kernel \
                    -C gzip -n 'Linux-$(KERNELRELEASE)' -a $(CONFIG_BOOT_LOAD) \
                    -e $(shell $(NM) vmlinux | awk '$$NF == "__start" {print $$1}') \
-                   -d $< $@
+                   -l $(UIMAGE_FORMAT) -d $< -i $@
 
 $(obj)/vmlinux.bin: vmlinux FORCE
 	$(call if_changed,objcopy)
Index: linux-2.6.27-rc4/arch/avr32/Kconfig
===================================================================
--- linux-2.6.27-rc4.orig/arch/avr32/Kconfig	2008-08-25 20:58:33.000000000 +0200
+++ linux-2.6.27-rc4/arch/avr32/Kconfig	2008-08-25 20:58:40.000000000 +0200
@@ -147,6 +147,20 @@ config PHYS_OFFSET
 	hex
 	default 0x10000000 if CPU_AT32AP700X=y
 
+if LOADER_U_BOOT
+
+config LEGACY_UIMAGE
+	bool "Use legacy format for building uImage"
+	default n
+	help
+	  Enable this option if you want uImage to be build in the legacy
+	  format. If this option is 'N' the uImage will be build in the newer
+	  FIT-image format. (Needs at least 'mkimage v1.3.3', and 'dtc v1.2.0')
+
+	  If unsure, say N.
+
+endif
+
 source "kernel/Kconfig.preempt"
 
 config QUICKLIST
Index: linux-2.6.27-rc4/arch/avr32/boot/images/Makefile
===================================================================
--- linux-2.6.27-rc4.orig/arch/avr32/boot/images/Makefile	2008-08-25 20:58:33.000000000 +0200
+++ linux-2.6.27-rc4/arch/avr32/boot/images/Makefile	2008-08-25 20:58:40.000000000 +0200
@@ -17,10 +17,16 @@ $(obj)/vmlinux.bin: vmlinux FORCE
 $(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE
 	$(call if_changed,gzip)
 
+ifeq ($(CONFIG_LEGACY_UIMAGE),y)
+UIMAGE_FORMAT=legacy
+else
+UIMAGE_FORMAT=fit
+endif
+
 quiet_cmd_uimage = UIMAGE $@
       cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A avr32 -O linux -T kernel	\
 		-C gzip -a $(CONFIG_LOAD_ADDRESS) -e $(CONFIG_ENTRY_ADDRESS)	\
-		-n 'Linux-$(KERNELRELEASE)' -d $< $@
+		-l $(UIMAGE_FORMAT) -n 'Linux-$(KERNELRELEASE)' -d $< -i $@
 
 targets += uImage uImage.srec
 $(obj)/uImage: $(obj)/vmlinux.gz
Index: linux-2.6.27-rc4/arch/sh/Kconfig
===================================================================
--- linux-2.6.27-rc4.orig/arch/sh/Kconfig	2008-08-25 20:58:33.000000000 +0200
+++ linux-2.6.27-rc4/arch/sh/Kconfig	2008-08-25 20:58:40.000000000 +0200
@@ -607,6 +607,16 @@ config CMDLINE
 	depends on CMDLINE_BOOL
 	default "console=ttySC1,115200"
 
+config LEGACY_UIMAGE
+	bool "Use legacy format for building uImage"
+	default n
+	help
+	  Enable this option if you want uImage to be build in the legacy
+	  format. If this option is 'N' the uImage will be build in the newer
+	  FIT-image format. (Needs at least 'mkimage v1.3.3', and 'dtc v1.2.0')
+
+	  If unsure, say N.
+
 endmenu
 
 menu "Bus options"
Index: linux-2.6.27-rc4/arch/sh/boot/Makefile
===================================================================
--- linux-2.6.27-rc4.orig/arch/sh/boot/Makefile	2008-08-25 20:58:33.000000000 +0200
+++ linux-2.6.27-rc4/arch/sh/boot/Makefile	2008-08-25 20:58:40.000000000 +0200
@@ -43,10 +43,16 @@ KERNEL_ENTRY	:= $(shell /bin/bash -c 'pr
 			$(CONFIG_MEMORY_START) + \
 			$(CONFIG_ZERO_PAGE_OFFSET) + $(CONFIG_ENTRY_OFFSET)]')
 
+ifeq ($(CONFIG_LEGACY_UIMAGE),y)
+UIMAGE_FORMAT=legacy
+else
+UIMAGE_FORMAT=fit
+endif
+
 quiet_cmd_uimage = UIMAGE  $@
       cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A sh -O linux -T kernel \
 		   -C gzip -a $(KERNEL_LOAD) -e $(KERNEL_ENTRY) \
-		   -n 'Linux-$(KERNELRELEASE)' -d $< $@
+		   -l $(UIMAGE_FORMAT) -n 'Linux-$(KERNELRELEASE)' -d $< -i $@
 
 $(obj)/uImage: $(obj)/vmlinux.bin.gz FORCE
 	$(call if_changed,uimage)

-- 


WARNING: multiple messages have this Message-ID (diff)
From: Remy Bohmer <linux@bohmer.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [patch 2/2] Add support for building the new U-boot uImage format	(FIT-format)
Date: Mon, 25 Aug 2008 21:14:29 +0200	[thread overview]
Message-ID: <48b30a00.1701d00a.4ee8.ffffa5f7@mx.google.com> (raw)
In-Reply-To: 20080825191427.728251800@bohmer.net

An embedded and charset-unspecified text was scrubbed...
Name: add-u-boot-fit-image-support.patch
Url: http://lists.denx.de/pipermail/u-boot/attachments/20080825/7b7fd6f7/attachment.txt 

  parent reply	other threads:[~2008-08-25 19:38 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20080825191427.728251800@bohmer.net>
2008-08-25 19:14 ` [patch 1/2] Enable the use of an uncompressed kernel image for U-boot uImage Remy Bohmer
2008-08-25 19:14   ` [U-Boot] " Remy Bohmer
2008-08-25 21:13   ` Wolfgang Denk
2008-08-25 21:13     ` Wolfgang Denk
2008-08-25 19:14 ` Remy Bohmer [this message]
2008-08-25 19:14   ` [U-Boot] [patch 2/2] Add support for building the new U-boot uImage format (FIT-format) Remy Bohmer
2008-08-25 21:18   ` Wolfgang Denk
2008-08-25 21:18     ` Wolfgang Denk
2008-08-26 10:31     ` Remy Bohmer
2008-08-26 10:31       ` Remy Bohmer
2008-08-26 18:59     ` Remy Bohmer
2008-08-26 18:59       ` Remy Bohmer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48b30a00.1701d00a.4ee8.ffffa5f7@mx.google.com \
    --to=linux@bohmer.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sam@ravnborg.org \
    --cc=sr@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.