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)
--
next prev parent reply other threads:[~2008-08-25 19:38 UTC|newest]
Thread overview: 6+ 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 21:13 ` [U-Boot] " Wolfgang Denk
2008-08-25 19:14 ` Remy Bohmer [this message]
2008-08-25 21:18 ` [U-Boot] [patch 2/2] Add support for building the new U-boot uImage format (FIT-format) Wolfgang Denk
2008-08-26 10:31 ` 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox