From patchwork Mon Jul 27 18:50:03 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=C3=B6rg_Krause?= X-Patchwork-Id: 500541 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ozlabs.org (Postfix) with ESMTP id D12CF1402B9 for ; Tue, 28 Jul 2015 04:50:16 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 2238091601; Mon, 27 Jul 2015 18:50:16 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qiW+lmOz+nMi; Mon, 27 Jul 2015 18:50:14 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id A40789160A; Mon, 27 Jul 2015 18:50:14 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 0493B1C2B8D for ; Mon, 27 Jul 2015 18:50:14 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id F2BB79160A for ; Mon, 27 Jul 2015 18:50:13 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ggqAo1IvDc2j for ; Mon, 27 Jul 2015 18:50:12 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mx02.posteo.de (mx02.posteo.de [89.146.194.165]) by whitealder.osuosl.org (Postfix) with ESMTPS id 8048F91601 for ; Mon, 27 Jul 2015 18:50:12 +0000 (UTC) Received: from dovecot04.posteo.de (unknown [185.67.36.27]) by mx02.posteo.de (Postfix) with ESMTPS id 870A925AF50B for ; Mon, 27 Jul 2015 20:50:08 +0200 (CEST) Received: from mail.posteo.de (localhost [127.0.0.1]) by dovecot04.posteo.de (Postfix) with ESMTPSA id 3mg9Dc3LS0zFpWF for ; Mon, 27 Jul 2015 20:50:08 +0200 (CEST) Received: from nzxt.fritz.box (nzxt.localdomain [192.168.178.46]) (Authenticated sender: joerg.krause@embedded.rocks) by embedded.rocks (Postfix) with ESMTPSA id D663D98024D; Mon, 27 Jul 2015 20:50:07 +0200 (CEST) From: =?UTF-8?q?J=C3=B6rg=20Krause?= To: buildroot@buildroot.org Date: Mon, 27 Jul 2015 20:50:03 +0200 Message-Id: <1438023003-19533-1-git-send-email-joerg.krause@embedded.rocks> X-Mailer: git-send-email 2.4.6 MIME-Version: 1.0 Subject: [Buildroot] [PATCH v3 1/1] linux: Add support for FIT image X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" The FIT (Flattened Image Tree) image format is a much more advanced and flexible format compared to regular uImage, let alone zImage. The FIT image format allows for storing multiple kernel images, multiple device tree blobs and even multiple configurations for their combinations in a single image. Furthermore, it enhances integrity protection of images with sha1, sha256 and md5 checksums as well as signature verification against a public key. Signed-off-by: Jörg Krause --- Changes in v3: [Romain Naour: - remove avr32 support - factorize setting LINUX_IMAGE_PATH - define LINUX_BUILD_FITIMAGE only when BR2_LINUX_KERNEL_FITIMAGE is selected] [Jörg Krause: - add nios2 support - add help text - git rebase] Changes in v2: - build the device tree blob prior to the FIT image - add error message if file path is missing --- linux/Config.in | 27 +++++++++++++++++++++++++++ linux/linux.mk | 23 ++++++++++++++++++++--- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/linux/Config.in b/linux/Config.in index 74af51d..fa4bab8 100644 --- a/linux/Config.in +++ b/linux/Config.in @@ -180,6 +180,27 @@ config BR2_LINUX_KERNEL_UBOOT_IMAGE choice prompt "Kernel binary format" +config BR2_LINUX_KERNEL_FITIMAGE + bool "FIT image" + depends on BR2_arc || BR2_arm || BR2_armeb || BR2_bfin || \ + BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le || \ + BR2_sh || BR2_sh64 || BR2_mips || BR2_mipsel || \ + BR2_mips64 || BR2_mips64el || BR2_nios2 + select BR2_LINUX_KERNEL_UBOOT_IMAGE + help + The FIT (Flattened Image Tree) image format is a much more advanced + and flexible format compared to regular uImage, let alone zImage. + + The FIT image format allows for storing multiple kernel images, + multiple device tree blobs and even multiple configurations for + their combinations in a single image. + + Furthermore, it enhances integrity protection of images with sha1, + sha256 and md5 checksums as well as signature verification against + a public key. + + http://git.denx.de/?p=u-boot.git;a=tree;f=doc/uImage.FIT + config BR2_LINUX_KERNEL_UIMAGE bool "uImage" depends on BR2_arc || BR2_arm || BR2_armeb || BR2_bfin || \ @@ -254,6 +275,12 @@ config BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM endchoice +config BR2_LINUX_KERNEL_FITIMAGE_ITS_FILE + string "FIT image device tree descriptor (*.its) file path" + depends on BR2_LINUX_KERNEL_FITIMAGE + help + Path to the FIT image device tree descriptor (*.its) file. + config BR2_LINUX_KERNEL_IMAGE_TARGET_NAME string "Kernel image target name" depends on BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM diff --git a/linux/linux.mk b/linux/linux.mk index d91dbb2..dd20ebd 100644 --- a/linux/linux.mk +++ b/linux/linux.mk @@ -96,6 +96,9 @@ LINUX_TARGET_NAME = $(call qstrip,$(BR2_LINUX_KERNEL_IMAGE_TARGET_NAME)) ifeq ($(LINUX_IMAGE_NAME),) LINUX_IMAGE_NAME = $(LINUX_TARGET_NAME) endif +else ifeq ($(BR2_LINUX_KERNEL_FITIMAGE),y) +LINUX_IMAGE_NAME = fitImage +LINUX_TARGET_NAME = zImage else ifeq ($(BR2_LINUX_KERNEL_UIMAGE),y) LINUX_IMAGE_NAME = uImage @@ -143,9 +146,7 @@ else KERNEL_ARCH_PATH = $(LINUX_DIR)/arch/$(KERNEL_ARCH) endif -ifeq ($(BR2_LINUX_KERNEL_VMLINUX),y) -LINUX_IMAGE_PATH = $(LINUX_DIR)/$(LINUX_IMAGE_NAME) -else ifeq ($(BR2_LINUX_KERNEL_VMLINUZ),y) +ifeq ($(BR2_LINUX_KERNEL_VMLINUZ)$(BR2_LINUX_KERNEL_VMLINUX)$(BR2_LINUX_KERNEL_FITIMAGE),y) LINUX_IMAGE_PATH = $(LINUX_DIR)/$(LINUX_IMAGE_NAME) else LINUX_IMAGE_PATH = $(KERNEL_ARCH_PATH)/boot/$(LINUX_IMAGE_NAME) @@ -266,6 +267,15 @@ LINUX_APPEND_DTB += $(sep) MKIMAGE_ARGS=`$(MKIMAGE) -l $(LINUX_IMAGE_PATH) |\ endif endif +ifeq ($(BR2_LINUX_KERNEL_FITIMAGE),y) +define LINUX_BUILD_FITIMAGE + $(LINUX_INSTALL_HOST_TOOLS) + cp $(call qstrip,$(BR2_LINUX_KERNEL_FITIMAGE_ITS_FILE)) $(@D)/fit-image.its + $(TARGET_MAKE_ENV) $(MKIMAGE) -f $(@D)/fit-image.its $(@D)/$(LINUX_IMAGE_NAME) + rm $(@D)/fit-image.its +endef +endif + # Compilation. We make sure the kernel gets rebuilt when the # configuration has changed. define LINUX_BUILD_CMDS @@ -277,6 +287,7 @@ define LINUX_BUILD_CMDS fi $(LINUX_BUILD_DTB) $(LINUX_APPEND_DTB) + $(LINUX_BUILD_FITIMAGE) endef @@ -381,6 +392,12 @@ $(error Kernel with appended device tree needs exactly one DTS source. \ endif endif +ifeq ($(BR2_LINUX_KERNEL_FITIMAGE),y) +ifeq ($(call qstrip,$(BR2_LINUX_KERNEL_FITIMAGE_ITS_FILE)),) +$(error No FIT image device tree descriptor file (*.its) specified, check your BR2_LINUX_KERNEL_FITIMAGE_ITS_FILE setting) +endif +endif + endif # BR_BUILDING $(eval $(kconfig-package))