All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support
@ 2016-08-08 16:37 George McCollister
  2016-08-08 16:37 ` [PATCH 1/5] kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B George McCollister
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: George McCollister @ 2016-08-08 16:37 UTC (permalink / raw)
  To: openembedded-core; +Cc: marex, trini, andrew.bradford, denys

Add support for building fitImages that include an initramfs and booting
on x86.

* V2
 - Include Andrew Bradford's cd to $B patch since it is now required for
   do_assemble_fitimage to work
 - Fix initramfs support patch to cd to $B in do_assemble_fitimage_initramfs
 - Remove ${B} in call to fitimage_emit_section_ramdisk per
   Denys Dmytriyenko's suggestion
 - Add patch to cd to $B in do_concat_dtb()

The following changes since commit c4dda05cb9755cb865c1d1bd142196f8a9f45d3d:

  Revert "packagegroup-core-x11-base.bb: replace pointercal with pointercal-xinput" (2016-08-04 20:54:57 +0100)

are available in the git repository at:

  git://github.com/gmccollister/openembedded-core master-fit
  https://github.com/gmccollister/openembedded-core/tree/master-fit

Andrew Bradford (1):
  kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B

George McCollister (4):
  kernel-fitimage: add initramfs support
  kernel-fitimage: Add x86 support
  uboot-sign: Handle .rom signing the same as .img
  uboot-sign: do_concat_dtb(): cd to $B

 meta/classes/kernel-fitimage.bbclass | 346 +++++++++++++++++++++++++----------
 meta/classes/uboot-sign.bbclass      |   4 +-
 2 files changed, 249 insertions(+), 101 deletions(-)

-- 
2.8.0



^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/5] kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B
  2016-08-08 16:37 [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support George McCollister
@ 2016-08-08 16:37 ` George McCollister
  2016-08-08 21:30   ` Denys Dmytriyenko
  2016-08-08 16:37 ` [PATCH v3 2/5] kernel-fitimage: add initramfs support George McCollister
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: George McCollister @ 2016-08-08 16:37 UTC (permalink / raw)
  To: openembedded-core; +Cc: marex, trini, andrew.bradford, denys

From: Andrew Bradford <andrew.bradford@kodakalaris.com>

Prior to assembling the fitimage, ensure that $B is the cwd due to
bitbake commit 67a7b8b021badc17d8fdf447c250e79d291e75f7 "build: don't
use $B as the default cwd for functions".

Without this change, do_assemble_fitimage() fails like:

Log data follows:
| DEBUG: Executing shell function do_assemble_fitimage
| arm-ka-linux-gnueabi-objcopy: 'vmlinux': No such file
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_assemble_fitimage

Signed-off-by: Andrew Bradford <andrew.bradford@kodakalaris.com>
---
 meta/classes/kernel-fitimage.bbclass | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass
index 9a3caf5..7cca180 100644
--- a/meta/classes/kernel-fitimage.bbclass
+++ b/meta/classes/kernel-fitimage.bbclass
@@ -189,6 +189,7 @@ EOF
 }
 
 do_assemble_fitimage() {
+	cd ${B}
 	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
 		kernelcount=1
 		dtbcount=""
-- 
2.8.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 2/5] kernel-fitimage: add initramfs support
  2016-08-08 16:37 [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support George McCollister
  2016-08-08 16:37 ` [PATCH 1/5] kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B George McCollister
@ 2016-08-08 16:37 ` George McCollister
  2016-08-08 21:31   ` Denys Dmytriyenko
  2016-08-08 16:37 ` [PATCH v2 3/5] kernel-fitimage: Add x86 support George McCollister
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 14+ messages in thread
From: George McCollister @ 2016-08-08 16:37 UTC (permalink / raw)
  To: openembedded-core; +Cc: marex, trini, andrew.bradford, denys

If INITRAMFS_IMAGE is set, build an additional fitImage containing the
initramfs. Copy the additional fitImage and the source (*.its) file, used
to create it to DEPLOYDIR. The fitImage containing the initramfs must be
built before do_deploy and after do_install to avoid circular dependencies.

UBOOT_RD_LOADADDRESS - Specifies the load address used by u-boot for the
                       initramfs.
UBOOT_RD_ENTRYPOINT  - Specifies the entry point used by u-boot for the
                       initramfs.

Signed-off-by: George McCollister <george.mccollister@gmail.com>
---
 meta/classes/kernel-fitimage.bbclass | 285 +++++++++++++++++++++++------------
 1 file changed, 189 insertions(+), 96 deletions(-)

diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass
index 7cca180..f05d8a5 100644
--- a/meta/classes/kernel-fitimage.bbclass
+++ b/meta/classes/kernel-fitimage.bbclass
@@ -16,7 +16,7 @@ python __anonymous () {
 
         image = d.getVar('INITRAMFS_IMAGE', True)
         if image:
-            d.appendVarFlag('do_assemble_fitimage', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
+            d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
 
         # Verified boot will sign the fitImage and append the public key to
         # U-boot dtb. We ensure the U-Boot dtb is deployed before assembling
@@ -32,8 +32,9 @@ UBOOT_MKIMAGE_DTCOPTS ??= ""
 #
 # Emit the fitImage ITS header
 #
+# $1 ... .its filename
 fitimage_emit_fit_header() {
-	cat << EOF >> fit-image.its
+	cat << EOF >> ${1}
 /dts-v1/;
 
 / {
@@ -45,32 +46,33 @@ EOF
 #
 # Emit the fitImage section bits
 #
-# $1 ... Section bit type: imagestart - image section start
+# $1 ... .its filename
+# $2 ... Section bit type: imagestart - image section start
 #                          confstart  - configuration section start
 #                          sectend    - section end
 #                          fitend     - fitimage end
 #
 fitimage_emit_section_maint() {
-	case $1 in
+	case $2 in
 	imagestart)
-		cat << EOF >> fit-image.its
+		cat << EOF >> ${1}
 
         images {
 EOF
 	;;
 	confstart)
-		cat << EOF >> fit-image.its
+		cat << EOF >> ${1}
 
         configurations {
 EOF
 	;;
 	sectend)
-		cat << EOF >> fit-image.its
+		cat << EOF >> ${1}
 	};
 EOF
 	;;
 	fitend)
-		cat << EOF >> fit-image.its
+		cat << EOF >> ${1}
 };
 EOF
 	;;
@@ -80,9 +82,10 @@ EOF
 #
 # Emit the fitImage ITS kernel section
 #
-# $1 ... Image counter
-# $2 ... Path to kernel image
-# $3 ... Compression type
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to kernel image
+# $4 ... Compression type
 fitimage_emit_section_kernel() {
 
 	kernel_csum="sha1"
@@ -90,17 +93,17 @@ fitimage_emit_section_kernel() {
 	ENTRYPOINT=${UBOOT_ENTRYPOINT}
 	if test -n "${UBOOT_ENTRYSYMBOL}"; then
 		ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux | \
-			awk '$3=="${UBOOT_ENTRYSYMBOL}" {print $1}'`
+			awk '$4=="${UBOOT_ENTRYSYMBOL}" {print $2}'`
 	fi
 
-	cat << EOF >> fit-image.its
-                kernel@${1} {
+	cat << EOF >> ${1}
+                kernel@${2} {
                         description = "Linux kernel";
-                        data = /incbin/("${2}");
+                        data = /incbin/("${3}");
                         type = "kernel";
                         arch = "${UBOOT_ARCH}";
                         os = "linux";
-                        compression = "${3}";
+                        compression = "${4}";
                         load = <${UBOOT_LOADADDRESS}>;
                         entry = <${ENTRYPOINT}>;
                         hash@1 {
@@ -113,16 +116,17 @@ EOF
 #
 # Emit the fitImage ITS DTB section
 #
-# $1 ... Image counter
-# $2 ... Path to DTB image
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to DTB image
 fitimage_emit_section_dtb() {
 
 	dtb_csum="sha1"
 
-	cat << EOF >> fit-image.its
-                fdt@${1} {
+	cat << EOF >> ${1}
+                fdt@${2} {
                         description = "Flattened Device Tree blob";
-                        data = /incbin/("${2}");
+                        data = /incbin/("${3}");
                         type = "flat_dt";
                         arch = "${UBOOT_ARCH}";
                         compression = "none";
@@ -134,10 +138,39 @@ EOF
 }
 
 #
+# Emit the fitImage ITS ramdisk section
+#
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to ramdisk image
+fitimage_emit_section_ramdisk() {
+
+	ramdisk_csum="sha1"
+
+	cat << EOF >> ${1}
+                ramdisk@${2} {
+                        description = "ramdisk image";
+                        data = /incbin/("${3}");
+                        type = "ramdisk";
+                        arch = "${UBOOT_ARCH}";
+                        os = "linux";
+                        compression = "none";
+                        load = <${UBOOT_RD_LOADADDRESS}>;
+                        entry = <${UBOOT_RD_ENTRYPOINT}>;
+                        hash@1 {
+                                algo = "${ramdisk_csum}";
+                        };
+                };
+EOF
+}
+
+#
 # Emit the fitImage ITS configuration section
 #
-# $1 ... Linux kernel ID
-# $2 ... DTB image ID
+# $1 ... .its filename
+# $2 ... Linux kernel ID
+# $3 ... DTB image ID
+# $4 ... ramdisk ID
 fitimage_emit_section_config() {
 
 	conf_csum="sha1"
@@ -146,21 +179,32 @@ fitimage_emit_section_config() {
 	fi
 
 	# Test if we have any DTBs at all
-	if [ -z "${2}" ] ; then
+	if [ -z "${3}" -a -z "${4}" ] ; then
 		conf_desc="Boot Linux kernel"
 		fdt_line=""
-	else
+		ramdisk_line=""
+	elif [ -z "${4}" ]; then
 		conf_desc="Boot Linux kernel with FDT blob"
-		fdt_line="fdt = \"fdt@${2}\";"
+		fdt_line="fdt = \"fdt@${3}\";"
+		ramdisk_line=""
+	elif [ -z "${3}" ]; then
+		conf_desc="Boot Linux kernel with ramdisk"
+		fdt_line=""
+		ramdisk_line="ramdisk = \"ramdisk@${4}\";"
+	else
+		conf_desc="Boot Linux kernel with FDT blob, ramdisk"
+		fdt_line="fdt = \"fdt@${3}\";"
+		ramdisk_line="ramdisk = \"ramdisk@${4}\";"
 	fi
-	kernel_line="kernel = \"kernel@${1}\";"
+	kernel_line="kernel = \"kernel@${2}\";"
 
-	cat << EOF >> fit-image.its
+	cat << EOF >> ${1}
                 default = "conf@1";
                 conf@1 {
                         description = "${conf_desc}";
 			${kernel_line}
 			${fdt_line}
+			${ramdisk_line}
                         hash@1 {
                                 algo = "${conf_csum}";
                         };
@@ -168,103 +212,137 @@ EOF
 
 	if [ ! -z "${conf_sign_keyname}" ] ; then
 
-		if [ -z "${2}" ] ; then
+		if [ -z "${3}" -a -z "${4}" ] ; then
 			sign_line="sign-images = \"kernel\";"
-		else
+		elif [ -z "${4}" ]; then
 			sign_line="sign-images = \"fdt\", \"kernel\";"
+		elif [ -z "${3}" ]; then
+			sign_line="sign-images = \"ramdisk\", \"kernel\";"
+		else
+			sign_line="sign-images = \"ramdisk\", \"fdt\", \"kernel\";"
 		fi
 
-		cat << EOF >> fit-image.its
+		cat << EOF >> ${1}
                         signature@1 {
                                 algo = "${conf_csum},rsa2048";
                                 key-name-hint = "${conf_sign_keyname}";
-                                sign-images = "fdt", "kernel";
+				${sign_line}
                         };
 EOF
 	fi
 
-	cat << EOF >> fit-image.its
+	cat << EOF >> ${1}
                 };
 EOF
 }
 
-do_assemble_fitimage() {
-	cd ${B}
-	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
-		kernelcount=1
-		dtbcount=""
-		rm -f fit-image.its arch/${ARCH}/boot/fitImage
-
-		fitimage_emit_fit_header
-
-		#
-		# Step 1: Prepare a kernel image section.
-		#
-		fitimage_emit_section_maint imagestart
-
-		uboot_prep_kimage
-		fitimage_emit_section_kernel "${kernelcount}" linux.bin "${linux_comp}"
-
-		#
-		# Step 2: Prepare a DTB image section
-		#
-		if test -n "${KERNEL_DEVICETREE}"; then
-			dtbcount=1
-			for DTB in ${KERNEL_DEVICETREE}; do
-				if echo ${DTB} | grep -q '/dts/'; then
-					bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
-					DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
-				fi
-				DTB_PATH="arch/${ARCH}/boot/dts/${DTB}"
-				if [ ! -e "${DTB_PATH}" ]; then
-					DTB_PATH="arch/${ARCH}/boot/${DTB}"
-				fi
-
-				fitimage_emit_section_dtb ${dtbcount} ${DTB_PATH}
-				dtbcount=`expr ${dtbcount} + 1`
-			done
-		fi
+#
+# Assemble fitImage
+#
+# $1 ... .its filename
+# $2 ... fitImage name
+# $3 ... include ramdisk
+fitimage_assemble() {
+	kernelcount=1
+	dtbcount=""
+	ramdiskcount=${3}
+	rm -f ${1} arch/${ARCH}/boot/${2}
+
+	fitimage_emit_fit_header ${1}
+
+	#
+	# Step 1: Prepare a kernel image section.
+	#
+	fitimage_emit_section_maint ${1} imagestart
+
+	uboot_prep_kimage
+	fitimage_emit_section_kernel ${1} "${kernelcount}" linux.bin "${linux_comp}"
+
+	#
+	# Step 2: Prepare a DTB image section
+	#
+	if test -n "${KERNEL_DEVICETREE}"; then
+		dtbcount=1
+		for DTB in ${KERNEL_DEVICETREE}; do
+			if echo ${DTB} | grep -q '/dts/'; then
+				bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
+				DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
+			fi
+			DTB_PATH="arch/${ARCH}/boot/dts/${DTB}"
+			if [ ! -e "${DTB_PATH}" ]; then
+				DTB_PATH="arch/${ARCH}/boot/${DTB}"
+			fi
+
+			fitimage_emit_section_dtb ${1} ${dtbcount} ${DTB_PATH}
+			dtbcount=`expr ${dtbcount} + 1`
+		done
+	fi
 
-		fitimage_emit_section_maint sectend
+	#
+	# Step 3: Prepare a ramdisk section.
+	#
+	if [ "x${ramdiskcount}" = "x1" ] ; then
+		copy_initramfs
+		fitimage_emit_section_ramdisk ${1} "${ramdiskcount}" usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio
+	fi
 
-		# Force the first Kernel and DTB in the default config
-		kernelcount=1
-		dtbcount=1
+	fitimage_emit_section_maint ${1} sectend
 
-		#
-		# Step 3: Prepare a configurations section
-		#
-		fitimage_emit_section_maint confstart
+	# Force the first Kernel and DTB in the default config
+	kernelcount=1
+	dtbcount=1
 
-		fitimage_emit_section_config ${kernelcount} ${dtbcount}
+	#
+	# Step 4: Prepare a configurations section
+	#
+	fitimage_emit_section_maint ${1} confstart
 
-		fitimage_emit_section_maint sectend
+	fitimage_emit_section_config ${1} ${kernelcount} ${dtbcount} ${ramdiskcount}
 
-		fitimage_emit_section_maint fitend
+	fitimage_emit_section_maint ${1} sectend
 
-		#
-		# Step 4: Assemble the image
-		#
+	fitimage_emit_section_maint ${1} fitend
+
+	#
+	# Step 5: Assemble the image
+	#
+	uboot-mkimage \
+		${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
+		-f ${1} \
+		arch/${ARCH}/boot/${2}
+
+	#
+	# Step 6: Sign the image and add public key to U-Boot dtb
+	#
+	if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
 		uboot-mkimage \
 			${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
-			-f fit-image.its \
-			arch/${ARCH}/boot/fitImage
-
-		#
-		# Step 5: Sign the image and add public key to U-Boot dtb
-		#
-		if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
-			uboot-mkimage \
-				${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
-				-F -k "${UBOOT_SIGN_KEYDIR}" \
-				-K "${DEPLOY_DIR_IMAGE}/${UBOOT_DTB_BINARY}" \
-				-r arch/${ARCH}/boot/fitImage
-		fi
+			-F -k "${UBOOT_SIGN_KEYDIR}" \
+			-K "${DEPLOY_DIR_IMAGE}/${UBOOT_DTB_BINARY}" \
+			-r arch/${ARCH}/boot/${2}
+	fi
+}
+
+do_assemble_fitimage() {
+	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
+		cd ${B}
+		fitimage_assemble fit-image.its fitImage
 	fi
 }
 
 addtask assemble_fitimage before do_install after do_compile
 
+do_assemble_fitimage_initramfs() {
+	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
+		test -n "${INITRAMFS_IMAGE}" ; then
+		cd ${B}
+		fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-${INITRAMFS_IMAGE} 1
+	fi
+}
+
+addtask assemble_fitimage_initramfs before do_deploy after do_install
+
+
 kernel_do_deploy[vardepsexclude] = "DATETIME"
 kernel_do_deploy_append() {
 	# Update deploy directory
@@ -278,8 +356,23 @@ kernel_do_deploy_append() {
 		linux_bin_symlink_name=fitImage-linux.bin-${MACHINE}
 		install -m 0644 linux.bin ${DEPLOYDIR}/${linux_bin_base_name}.bin
 
+		if [ -n "${INITRAMFS_IMAGE}" ]; then
+			echo "Copying fit-image-${INITRAMFS_IMAGE}.its source file..."
+			its_initramfs_base_name="${KERNEL_IMAGETYPE}-its-${INITRAMFS_IMAGE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
+			its_initramfs_symlink_name=${KERNEL_IMAGETYPE}-its-${INITRAMFS_IMAGE}-${MACHINE}
+			install -m 0644 fit-image-${INITRAMFS_IMAGE}.its ${DEPLOYDIR}/${its_initramfs_base_name}.its
+			fit_initramfs_base_name="${KERNEL_IMAGETYPE}-${INITRAMFS_IMAGE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
+			fit_initramfs_symlink_name=${KERNEL_IMAGETYPE}-${INITRAMFS_IMAGE}-${MACHINE}
+			install -m 0644 arch/${ARCH}/boot/fitImage-${INITRAMFS_IMAGE} ${DEPLOYDIR}/${fit_initramfs_base_name}.bin
+		fi
+
 		cd ${DEPLOYDIR}
 		ln -sf ${its_base_name}.its ${its_symlink_name}.its
 		ln -sf ${linux_bin_base_name}.bin ${linux_bin_symlink_name}.bin
+
+		if [ -n "${INITRAMFS_IMAGE}" ]; then
+			ln -sf ${its_initramfs_base_name}.its ${its_initramfs_symlink_name}.its
+			ln -sf ${fit_initramfs_base_name}.bin ${fit_initramfs_symlink_name}.bin
+		fi
 	fi
 }
-- 
2.8.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 3/5] kernel-fitimage: Add x86 support
  2016-08-08 16:37 [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support George McCollister
  2016-08-08 16:37 ` [PATCH 1/5] kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B George McCollister
  2016-08-08 16:37 ` [PATCH v3 2/5] kernel-fitimage: add initramfs support George McCollister
@ 2016-08-08 16:37 ` George McCollister
  2016-08-08 16:37 ` [PATCH v2 4/5] uboot-sign: Handle .rom signing the same as .img George McCollister
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 14+ messages in thread
From: George McCollister @ 2016-08-08 16:37 UTC (permalink / raw)
  To: openembedded-core; +Cc: marex, trini, andrew.bradford, denys

For x86, bzImage must be built instead of zImage.

Include setup.bin (which is required to boot the kernel) in the fitimage
and always use a load/boot address of 0x00090000.

For details see:
http://git.denx.de/?p=u-boot.git;a=blob;f=doc/uImage.FIT/x86-fit-boot.txt

Signed-off-by: George McCollister <george.mccollister@gmail.com>
---
 meta/classes/kernel-fitimage.bbclass | 112 +++++++++++++++++++++++++----------
 1 file changed, 82 insertions(+), 30 deletions(-)

diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass
index f05d8a5..8580247 100644
--- a/meta/classes/kernel-fitimage.bbclass
+++ b/meta/classes/kernel-fitimage.bbclass
@@ -7,12 +7,17 @@ python __anonymous () {
         depends = "%s u-boot-mkimage-native dtc-native" % depends
         d.setVar("DEPENDS", depends)
 
+        if d.getVar("UBOOT_ARCH", True) == "x86":
+            replacementtype = "bzImage"
+        else:
+            replacementtype = "zImage"
+
 	# Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal
 	# to kernel.bbclass . We have to override it, since we pack zImage
 	# (at least for now) into the fitImage .
         typeformake = d.getVar("KERNEL_IMAGETYPE_FOR_MAKE", True) or ""
         if 'fitImage' in typeformake.split():
-            d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', 'zImage'))
+            d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', replacementtype))
 
         image = d.getVar('INITRAMFS_IMAGE', True)
         if image:
@@ -138,6 +143,33 @@ EOF
 }
 
 #
+# Emit the fitImage ITS setup section
+#
+# $1 ... .its filename
+# $2 ... Image counter
+# $3 ... Path to setup image
+fitimage_emit_section_setup() {
+
+	setup_csum="sha1"
+
+	cat << EOF >> ${1}
+                setup@${2} {
+                        description = "Linux setup.bin";
+                        data = /incbin/("${3}");
+                        type = "x86_setup";
+                        arch = "${UBOOT_ARCH}";
+                        os = "linux";
+                        compression = "none";
+                        load = <0x00090000>;
+                        entry = <0x00090000>;
+                        hash@1 {
+                                algo = "${setup_csum}";
+                        };
+                };
+EOF
+}
+
+#
 # Emit the fitImage ITS ramdisk section
 #
 # $1 ... .its filename
@@ -171,6 +203,7 @@ EOF
 # $2 ... Linux kernel ID
 # $3 ... DTB image ID
 # $4 ... ramdisk ID
+# $5 ... config ID
 fitimage_emit_section_config() {
 
 	conf_csum="sha1"
@@ -179,24 +212,25 @@ fitimage_emit_section_config() {
 	fi
 
 	# Test if we have any DTBs at all
-	if [ -z "${3}" -a -z "${4}" ] ; then
-		conf_desc="Boot Linux kernel"
-		fdt_line=""
-		ramdisk_line=""
-	elif [ -z "${4}" ]; then
-		conf_desc="Boot Linux kernel with FDT blob"
-		fdt_line="fdt = \"fdt@${3}\";"
-		ramdisk_line=""
-	elif [ -z "${3}" ]; then
-		conf_desc="Boot Linux kernel with ramdisk"
-		fdt_line=""
-		ramdisk_line="ramdisk = \"ramdisk@${4}\";"
-	else
-		conf_desc="Boot Linux kernel with FDT blob, ramdisk"
+	conf_desc="Linux kernel"
+	kernel_line="kernel = \"kernel@${2}\";"
+	fdt_line=""
+	ramdisk_line=""
+
+	if [ -n "${3}" ]; then
+		conf_desc="${conf_desc}, FDT blob"
 		fdt_line="fdt = \"fdt@${3}\";"
+	fi
+
+	if [ -n "${4}" ]; then
+		conf_desc="${conf_desc}, ramdisk"
 		ramdisk_line="ramdisk = \"ramdisk@${4}\";"
 	fi
-	kernel_line="kernel = \"kernel@${2}\";"
+
+	if [ -n "${5}" ]; then
+		conf_desc="${conf_desc}, setup"
+		setup_line="setup = \"setup@${5}\";"
+	fi
 
 	cat << EOF >> ${1}
                 default = "conf@1";
@@ -205,6 +239,7 @@ fitimage_emit_section_config() {
 			${kernel_line}
 			${fdt_line}
 			${ramdisk_line}
+			${setup_line}
                         hash@1 {
                                 algo = "${conf_csum}";
                         };
@@ -212,16 +247,22 @@ EOF
 
 	if [ ! -z "${conf_sign_keyname}" ] ; then
 
-		if [ -z "${3}" -a -z "${4}" ] ; then
-			sign_line="sign-images = \"kernel\";"
-		elif [ -z "${4}" ]; then
-			sign_line="sign-images = \"fdt\", \"kernel\";"
-		elif [ -z "${3}" ]; then
-			sign_line="sign-images = \"ramdisk\", \"kernel\";"
-		else
-			sign_line="sign-images = \"ramdisk\", \"fdt\", \"kernel\";"
+		sign_line="sign-images = \"kernel\""
+
+		if [ -n "${3}" ]; then
+			sign_line="${sign_line}, \"fdt\""
+		fi
+
+		if [ -n "${4}" ]; then
+			sign_line="${sign_line}, \"ramdisk\""
 		fi
 
+		if [ -n "${5}" ]; then
+			sign_line="${sign_line}, \"setup\""
+		fi
+
+		sign_line="${sign_line};"
+
 		cat << EOF >> ${1}
                         signature@1 {
                                 algo = "${conf_csum},rsa2048";
@@ -246,6 +287,7 @@ fitimage_assemble() {
 	kernelcount=1
 	dtbcount=""
 	ramdiskcount=${3}
+	setupcount=""
 	rm -f ${1} arch/${ARCH}/boot/${2}
 
 	fitimage_emit_fit_header ${1}
@@ -279,7 +321,15 @@ fitimage_assemble() {
 	fi
 
 	#
-	# Step 3: Prepare a ramdisk section.
+	# Step 3: Prepare a setup section. (For x86)
+	#
+	if test -e arch/${ARCH}/boot/setup.bin ; then
+		setupcount=1
+		fitimage_emit_section_setup ${1} "${setupcount}" arch/${ARCH}/boot/setup.bin
+	fi
+
+	#
+	# Step 4: Prepare a ramdisk section.
 	#
 	if [ "x${ramdiskcount}" = "x1" ] ; then
 		copy_initramfs
@@ -290,21 +340,23 @@ fitimage_assemble() {
 
 	# Force the first Kernel and DTB in the default config
 	kernelcount=1
-	dtbcount=1
+	if test -n "${dtbcount}"; then
+		dtbcount=1
+	fi
 
 	#
-	# Step 4: Prepare a configurations section
+	# Step 5: Prepare a configurations section
 	#
 	fitimage_emit_section_maint ${1} confstart
 
-	fitimage_emit_section_config ${1} ${kernelcount} ${dtbcount} ${ramdiskcount}
+	fitimage_emit_section_config ${1} "${kernelcount}" "${dtbcount}" "${ramdiskcount}" "${setupcount}"
 
 	fitimage_emit_section_maint ${1} sectend
 
 	fitimage_emit_section_maint ${1} fitend
 
 	#
-	# Step 5: Assemble the image
+	# Step 6: Assemble the image
 	#
 	uboot-mkimage \
 		${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
@@ -312,7 +364,7 @@ fitimage_assemble() {
 		arch/${ARCH}/boot/${2}
 
 	#
-	# Step 6: Sign the image and add public key to U-Boot dtb
+	# Step 7: Sign the image and add public key to U-Boot dtb
 	#
 	if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
 		uboot-mkimage \
-- 
2.8.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 4/5] uboot-sign: Handle .rom signing the same as .img
  2016-08-08 16:37 [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support George McCollister
                   ` (2 preceding siblings ...)
  2016-08-08 16:37 ` [PATCH v2 3/5] kernel-fitimage: Add x86 support George McCollister
@ 2016-08-08 16:37 ` George McCollister
  2016-08-08 16:37 ` [PATCH 5/5] uboot-sign: do_concat_dtb(): cd to $B George McCollister
  2016-08-08 18:05 ` [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support Denys Dmytriyenko
  5 siblings, 0 replies; 14+ messages in thread
From: George McCollister @ 2016-08-08 16:37 UTC (permalink / raw)
  To: openembedded-core; +Cc: marex, trini, andrew.bradford, denys

Handle u-boot.rom signing (U-Boot as x86 BIOS replacement) the same way
that u-boot.img signing is handled.

Signed-off-by: George McCollister <george.mccollister@gmail.com>
---
 meta/classes/uboot-sign.bbclass | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/meta/classes/uboot-sign.bbclass b/meta/classes/uboot-sign.bbclass
index 57d4903..d56ad8e 100644
--- a/meta/classes/uboot-sign.bbclass
+++ b/meta/classes/uboot-sign.bbclass
@@ -64,7 +64,8 @@ do_concat_dtb () {
 	# Concatenate U-Boot w/o DTB & DTB with public key
 	# (cf. kernel-fitimage.bbclass for more details)
 	if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ]; then
-		if [ "x${UBOOT_SUFFIX}" = "ximg" -a -e "${DEPLOYDIR}/${UBOOT_DTB_IMAGE}" ]; then
+		if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \
+			[ -e "${DEPLOYDIR}/${UBOOT_DTB_IMAGE}" ]; then
 			oe_runmake EXT_DTB=${DEPLOYDIR}/${UBOOT_DTB_IMAGE}
 			install ${S}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE}
 			install ${S}/${UBOOT_BINARY} ${DEPLOY_DIR_IMAGE}/${UBOOT_IMAGE}
-- 
2.8.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 5/5] uboot-sign: do_concat_dtb(): cd to $B
  2016-08-08 16:37 [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support George McCollister
                   ` (3 preceding siblings ...)
  2016-08-08 16:37 ` [PATCH v2 4/5] uboot-sign: Handle .rom signing the same as .img George McCollister
@ 2016-08-08 16:37 ` George McCollister
  2016-08-08 21:32   ` Denys Dmytriyenko
  2016-08-08 18:05 ` [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support Denys Dmytriyenko
  5 siblings, 1 reply; 14+ messages in thread
From: George McCollister @ 2016-08-08 16:37 UTC (permalink / raw)
  To: openembedded-core; +Cc: marex, trini, andrew.bradford, denys

Prior to running oe_runmake make sure $B is the cwd. This is required
due to bitbake commit 67a7b8b021badc17d8fdf447c250e79d291e75f7
"build: don't use $B as the default cwd for functions".

Without this change, do_concat_dtb fails with:
| ERROR: oe_runmake failed
| make: *** No targets specified and no makefile found.  Stop.

Signed-off-by: George McCollister <george.mccollister@gmail.com>
---
 meta/classes/uboot-sign.bbclass | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/classes/uboot-sign.bbclass b/meta/classes/uboot-sign.bbclass
index d56ad8e..3c56db8 100644
--- a/meta/classes/uboot-sign.bbclass
+++ b/meta/classes/uboot-sign.bbclass
@@ -66,6 +66,7 @@ do_concat_dtb () {
 	if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ]; then
 		if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \
 			[ -e "${DEPLOYDIR}/${UBOOT_DTB_IMAGE}" ]; then
+			cd ${B}
 			oe_runmake EXT_DTB=${DEPLOYDIR}/${UBOOT_DTB_IMAGE}
 			install ${S}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE}
 			install ${S}/${UBOOT_BINARY} ${DEPLOY_DIR_IMAGE}/${UBOOT_IMAGE}
-- 
2.8.0



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support
  2016-08-08 16:37 [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support George McCollister
                   ` (4 preceding siblings ...)
  2016-08-08 16:37 ` [PATCH 5/5] uboot-sign: do_concat_dtb(): cd to $B George McCollister
@ 2016-08-08 18:05 ` Denys Dmytriyenko
  2016-08-08 20:02   ` Burton, Ross
  2016-08-08 20:16   ` George McCollister
  5 siblings, 2 replies; 14+ messages in thread
From: Denys Dmytriyenko @ 2016-08-08 18:05 UTC (permalink / raw)
  To: George McCollister
  Cc: marex, trini, denys, andrew.bradford, openembedded-core

On Mon, Aug 08, 2016 at 11:37:52AM -0500, George McCollister wrote:
> Add support for building fitImages that include an initramfs and booting
> on x86.

I'm in the process of testing this version now.


I'm wondering, if bundling everything in a single patchset will delay 
acceptance even further? Case in point - I'm mostly interested in initramfs 
support and it's been in limbo state for several months now. It was a single 
patch back then and there were no major comments or issues with it. Few months 
later, 2 extra patches were added with x86 support. Now recent $B change broke 
few things and we need 2 more patches just to get everything working again...

The reason I'm bringing this up is because I've been working on this area 
recently and would like to contribute back some code (fixes, customizations). 
Since it depends on this patchset, I'm not sure if I should wait for it to get 
accepted or we'll just end up growing the patchset for another iteration...

-- 
Denys


> * V2
>  - Include Andrew Bradford's cd to $B patch since it is now required for
>    do_assemble_fitimage to work
>  - Fix initramfs support patch to cd to $B in do_assemble_fitimage_initramfs
>  - Remove ${B} in call to fitimage_emit_section_ramdisk per
>    Denys Dmytriyenko's suggestion
>  - Add patch to cd to $B in do_concat_dtb()
> 
> The following changes since commit c4dda05cb9755cb865c1d1bd142196f8a9f45d3d:
> 
>   Revert "packagegroup-core-x11-base.bb: replace pointercal with pointercal-xinput" (2016-08-04 20:54:57 +0100)
> 
> are available in the git repository at:
> 
>   git://github.com/gmccollister/openembedded-core master-fit
>   https://github.com/gmccollister/openembedded-core/tree/master-fit
> 
> Andrew Bradford (1):
>   kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B
> 
> George McCollister (4):
>   kernel-fitimage: add initramfs support
>   kernel-fitimage: Add x86 support
>   uboot-sign: Handle .rom signing the same as .img
>   uboot-sign: do_concat_dtb(): cd to $B
> 
>  meta/classes/kernel-fitimage.bbclass | 346 +++++++++++++++++++++++++----------
>  meta/classes/uboot-sign.bbclass      |   4 +-
>  2 files changed, 249 insertions(+), 101 deletions(-)
> 
> -- 
> 2.8.0
> 
> -- 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support
  2016-08-08 18:05 ` [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support Denys Dmytriyenko
@ 2016-08-08 20:02   ` Burton, Ross
  2016-08-08 20:16   ` George McCollister
  1 sibling, 0 replies; 14+ messages in thread
From: Burton, Ross @ 2016-08-08 20:02 UTC (permalink / raw)
  To: Denys Dmytriyenko
  Cc: Marek Vašut, Tom Rini, OE-core, Andrew Bradford, Dmytriyenko, Denys

[-- Attachment #1: Type: text/plain, Size: 682 bytes --]

On 8 August 2016 at 19:05, Denys Dmytriyenko <denis@denix.org> wrote:

> The reason I'm bringing this up is because I've been working on this area
> recently and would like to contribute back some code (fixes,
> customizations).
> Since it depends on this patchset, I'm not sure if I should wait for it to
> get
> accepted or we'll just end up growing the patchset for another iteration...
>

I was attempting to merge bits of this earlier today and the $B stuff and
conflicts caused me to delete the branch, I was about to send a mail when
this appeared.  I'll try to merge it to my staging now, so please report
back if your testing is positive or negative.

Ross

[-- Attachment #2: Type: text/html, Size: 1098 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support
  2016-08-08 18:05 ` [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support Denys Dmytriyenko
  2016-08-08 20:02   ` Burton, Ross
@ 2016-08-08 20:16   ` George McCollister
  2016-08-08 20:21     ` Burton, Ross
  1 sibling, 1 reply; 14+ messages in thread
From: George McCollister @ 2016-08-08 20:16 UTC (permalink / raw)
  To: Denys Dmytriyenko
  Cc: Marek Vašut, trini, denys, Andrew Bradford, openembedded-core

On Mon, Aug 8, 2016 at 1:05 PM, Denys Dmytriyenko <denis@denix.org> wrote:
> On Mon, Aug 08, 2016 at 11:37:52AM -0500, George McCollister wrote:
>> Add support for building fitImages that include an initramfs and booting
>> on x86.
>
> I'm in the process of testing this version now.
>
>
> I'm wondering, if bundling everything in a single patchset will delay
> acceptance even further? Case in point - I'm mostly interested in initramfs
> support and it's been in limbo state for several months now. It was a single
> patch back then and there were no major comments or issues with it. Few months
> later, 2 extra patches were added with x86 support. Now recent $B change broke
> few things and we need 2 more patches just to get everything working again...

I'm surprised it wasn't accepted when it was a single patch. At this
point I don't know what's keeping it from being accepted since I
haven't received any feedback. I suspect whoever is maintaining OE
core doesn't have time to look at it.

>
> The reason I'm bringing this up is because I've been working on this area
> recently and would like to contribute back some code (fixes, customizations).
> Since it depends on this patchset, I'm not sure if I should wait for it to get
> accepted or we'll just end up growing the patchset for another iteration...

Your fixes, customizations are welcome however I've had this concern
as it has grown. Hopefully we can get some feedback soon as to what's
holding up the acceptance.

>
> --
> Denys
>
>
>> * V2
>>  - Include Andrew Bradford's cd to $B patch since it is now required for
>>    do_assemble_fitimage to work
>>  - Fix initramfs support patch to cd to $B in do_assemble_fitimage_initramfs
>>  - Remove ${B} in call to fitimage_emit_section_ramdisk per
>>    Denys Dmytriyenko's suggestion
>>  - Add patch to cd to $B in do_concat_dtb()
>>
>> The following changes since commit c4dda05cb9755cb865c1d1bd142196f8a9f45d3d:
>>
>>   Revert "packagegroup-core-x11-base.bb: replace pointercal with pointercal-xinput" (2016-08-04 20:54:57 +0100)
>>
>> are available in the git repository at:
>>
>>   git://github.com/gmccollister/openembedded-core master-fit
>>   https://github.com/gmccollister/openembedded-core/tree/master-fit
>>
>> Andrew Bradford (1):
>>   kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B
>>
>> George McCollister (4):
>>   kernel-fitimage: add initramfs support
>>   kernel-fitimage: Add x86 support
>>   uboot-sign: Handle .rom signing the same as .img
>>   uboot-sign: do_concat_dtb(): cd to $B
>>
>>  meta/classes/kernel-fitimage.bbclass | 346 +++++++++++++++++++++++++----------
>>  meta/classes/uboot-sign.bbclass      |   4 +-
>>  2 files changed, 249 insertions(+), 101 deletions(-)
>>
>> --
>> 2.8.0
>>
>> --
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support
  2016-08-08 20:16   ` George McCollister
@ 2016-08-08 20:21     ` Burton, Ross
  2016-08-08 21:34       ` Denys Dmytriyenko
  0 siblings, 1 reply; 14+ messages in thread
From: Burton, Ross @ 2016-08-08 20:21 UTC (permalink / raw)
  To: George McCollister
  Cc: Marek Vašut, Tom Rini, OE-core, Andrew Bradford, Dmytriyenko, Denys

[-- Attachment #1: Type: text/plain, Size: 537 bytes --]

On 8 August 2016 at 21:16, George McCollister <george.mccollister@gmail.com>
wrote:

> I'm surprised it wasn't accepted when it was a single patch. At this
> point I don't know what's keeping it from being accepted since I
> haven't received any feedback. I suspect whoever is maintaining OE
> core doesn't have time to look at it.
>

Yeah that's pretty much the case.  It's now in my staging - thanks for
rebasing and incorporating - so assuming the reviews from Denys etc are
good then it should be in master soon.

Ross

[-- Attachment #2: Type: text/html, Size: 984 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/5] kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B
  2016-08-08 16:37 ` [PATCH 1/5] kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B George McCollister
@ 2016-08-08 21:30   ` Denys Dmytriyenko
  0 siblings, 0 replies; 14+ messages in thread
From: Denys Dmytriyenko @ 2016-08-08 21:30 UTC (permalink / raw)
  To: George McCollister
  Cc: marex, trini, denys, andrew.bradford, openembedded-core

On Mon, Aug 08, 2016 at 11:37:53AM -0500, George McCollister wrote:
> From: Andrew Bradford <andrew.bradford@kodakalaris.com>
> 
> Prior to assembling the fitimage, ensure that $B is the cwd due to
> bitbake commit 67a7b8b021badc17d8fdf447c250e79d291e75f7 "build: don't
> use $B as the default cwd for functions".
> 
> Without this change, do_assemble_fitimage() fails like:
> 
> Log data follows:
> | DEBUG: Executing shell function do_assemble_fitimage
> | arm-ka-linux-gnueabi-objcopy: 'vmlinux': No such file
> | WARNING: exit code 1 from a shell command.
> | ERROR: Function failed: do_assemble_fitimage
> 
> Signed-off-by: Andrew Bradford <andrew.bradford@kodakalaris.com>

Tested-by: Denys Dmytriyenko <denys@ti.com>
Acked-by: Denys Dmytriyenko <denys@ti.com>


> ---
>  meta/classes/kernel-fitimage.bbclass | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass
> index 9a3caf5..7cca180 100644
> --- a/meta/classes/kernel-fitimage.bbclass
> +++ b/meta/classes/kernel-fitimage.bbclass
> @@ -189,6 +189,7 @@ EOF
>  }
>  
>  do_assemble_fitimage() {
> +	cd ${B}
>  	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
>  		kernelcount=1
>  		dtbcount=""
> -- 
> 2.8.0
> 
> -- 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 2/5] kernel-fitimage: add initramfs support
  2016-08-08 16:37 ` [PATCH v3 2/5] kernel-fitimage: add initramfs support George McCollister
@ 2016-08-08 21:31   ` Denys Dmytriyenko
  0 siblings, 0 replies; 14+ messages in thread
From: Denys Dmytriyenko @ 2016-08-08 21:31 UTC (permalink / raw)
  To: George McCollister
  Cc: marex, trini, denys, andrew.bradford, openembedded-core

On Mon, Aug 08, 2016 at 11:37:54AM -0500, George McCollister wrote:
> If INITRAMFS_IMAGE is set, build an additional fitImage containing the
> initramfs. Copy the additional fitImage and the source (*.its) file, used
> to create it to DEPLOYDIR. The fitImage containing the initramfs must be
> built before do_deploy and after do_install to avoid circular dependencies.
> 
> UBOOT_RD_LOADADDRESS - Specifies the load address used by u-boot for the
>                        initramfs.
> UBOOT_RD_ENTRYPOINT  - Specifies the entry point used by u-boot for the
>                        initramfs.
> 
> Signed-off-by: George McCollister <george.mccollister@gmail.com>

Tested-by: Denys Dmytriyenko <denys@ti.com>
Acked-by: Denys Dmytriyenko <denys@ti.com>


> ---
>  meta/classes/kernel-fitimage.bbclass | 285 +++++++++++++++++++++++------------
>  1 file changed, 189 insertions(+), 96 deletions(-)
> 
> diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass
> index 7cca180..f05d8a5 100644
> --- a/meta/classes/kernel-fitimage.bbclass
> +++ b/meta/classes/kernel-fitimage.bbclass
> @@ -16,7 +16,7 @@ python __anonymous () {
>  
>          image = d.getVar('INITRAMFS_IMAGE', True)
>          if image:
> -            d.appendVarFlag('do_assemble_fitimage', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
> +            d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
>  
>          # Verified boot will sign the fitImage and append the public key to
>          # U-boot dtb. We ensure the U-Boot dtb is deployed before assembling
> @@ -32,8 +32,9 @@ UBOOT_MKIMAGE_DTCOPTS ??= ""
>  #
>  # Emit the fitImage ITS header
>  #
> +# $1 ... .its filename
>  fitimage_emit_fit_header() {
> -	cat << EOF >> fit-image.its
> +	cat << EOF >> ${1}
>  /dts-v1/;
>  
>  / {
> @@ -45,32 +46,33 @@ EOF
>  #
>  # Emit the fitImage section bits
>  #
> -# $1 ... Section bit type: imagestart - image section start
> +# $1 ... .its filename
> +# $2 ... Section bit type: imagestart - image section start
>  #                          confstart  - configuration section start
>  #                          sectend    - section end
>  #                          fitend     - fitimage end
>  #
>  fitimage_emit_section_maint() {
> -	case $1 in
> +	case $2 in
>  	imagestart)
> -		cat << EOF >> fit-image.its
> +		cat << EOF >> ${1}
>  
>          images {
>  EOF
>  	;;
>  	confstart)
> -		cat << EOF >> fit-image.its
> +		cat << EOF >> ${1}
>  
>          configurations {
>  EOF
>  	;;
>  	sectend)
> -		cat << EOF >> fit-image.its
> +		cat << EOF >> ${1}
>  	};
>  EOF
>  	;;
>  	fitend)
> -		cat << EOF >> fit-image.its
> +		cat << EOF >> ${1}
>  };
>  EOF
>  	;;
> @@ -80,9 +82,10 @@ EOF
>  #
>  # Emit the fitImage ITS kernel section
>  #
> -# $1 ... Image counter
> -# $2 ... Path to kernel image
> -# $3 ... Compression type
> +# $1 ... .its filename
> +# $2 ... Image counter
> +# $3 ... Path to kernel image
> +# $4 ... Compression type
>  fitimage_emit_section_kernel() {
>  
>  	kernel_csum="sha1"
> @@ -90,17 +93,17 @@ fitimage_emit_section_kernel() {
>  	ENTRYPOINT=${UBOOT_ENTRYPOINT}
>  	if test -n "${UBOOT_ENTRYSYMBOL}"; then
>  		ENTRYPOINT=`${HOST_PREFIX}nm ${S}/vmlinux | \
> -			awk '$3=="${UBOOT_ENTRYSYMBOL}" {print $1}'`
> +			awk '$4=="${UBOOT_ENTRYSYMBOL}" {print $2}'`
>  	fi
>  
> -	cat << EOF >> fit-image.its
> -                kernel@${1} {
> +	cat << EOF >> ${1}
> +                kernel@${2} {
>                          description = "Linux kernel";
> -                        data = /incbin/("${2}");
> +                        data = /incbin/("${3}");
>                          type = "kernel";
>                          arch = "${UBOOT_ARCH}";
>                          os = "linux";
> -                        compression = "${3}";
> +                        compression = "${4}";
>                          load = <${UBOOT_LOADADDRESS}>;
>                          entry = <${ENTRYPOINT}>;
>                          hash@1 {
> @@ -113,16 +116,17 @@ EOF
>  #
>  # Emit the fitImage ITS DTB section
>  #
> -# $1 ... Image counter
> -# $2 ... Path to DTB image
> +# $1 ... .its filename
> +# $2 ... Image counter
> +# $3 ... Path to DTB image
>  fitimage_emit_section_dtb() {
>  
>  	dtb_csum="sha1"
>  
> -	cat << EOF >> fit-image.its
> -                fdt@${1} {
> +	cat << EOF >> ${1}
> +                fdt@${2} {
>                          description = "Flattened Device Tree blob";
> -                        data = /incbin/("${2}");
> +                        data = /incbin/("${3}");
>                          type = "flat_dt";
>                          arch = "${UBOOT_ARCH}";
>                          compression = "none";
> @@ -134,10 +138,39 @@ EOF
>  }
>  
>  #
> +# Emit the fitImage ITS ramdisk section
> +#
> +# $1 ... .its filename
> +# $2 ... Image counter
> +# $3 ... Path to ramdisk image
> +fitimage_emit_section_ramdisk() {
> +
> +	ramdisk_csum="sha1"
> +
> +	cat << EOF >> ${1}
> +                ramdisk@${2} {
> +                        description = "ramdisk image";
> +                        data = /incbin/("${3}");
> +                        type = "ramdisk";
> +                        arch = "${UBOOT_ARCH}";
> +                        os = "linux";
> +                        compression = "none";
> +                        load = <${UBOOT_RD_LOADADDRESS}>;
> +                        entry = <${UBOOT_RD_ENTRYPOINT}>;
> +                        hash@1 {
> +                                algo = "${ramdisk_csum}";
> +                        };
> +                };
> +EOF
> +}
> +
> +#
>  # Emit the fitImage ITS configuration section
>  #
> -# $1 ... Linux kernel ID
> -# $2 ... DTB image ID
> +# $1 ... .its filename
> +# $2 ... Linux kernel ID
> +# $3 ... DTB image ID
> +# $4 ... ramdisk ID
>  fitimage_emit_section_config() {
>  
>  	conf_csum="sha1"
> @@ -146,21 +179,32 @@ fitimage_emit_section_config() {
>  	fi
>  
>  	# Test if we have any DTBs at all
> -	if [ -z "${2}" ] ; then
> +	if [ -z "${3}" -a -z "${4}" ] ; then
>  		conf_desc="Boot Linux kernel"
>  		fdt_line=""
> -	else
> +		ramdisk_line=""
> +	elif [ -z "${4}" ]; then
>  		conf_desc="Boot Linux kernel with FDT blob"
> -		fdt_line="fdt = \"fdt@${2}\";"
> +		fdt_line="fdt = \"fdt@${3}\";"
> +		ramdisk_line=""
> +	elif [ -z "${3}" ]; then
> +		conf_desc="Boot Linux kernel with ramdisk"
> +		fdt_line=""
> +		ramdisk_line="ramdisk = \"ramdisk@${4}\";"
> +	else
> +		conf_desc="Boot Linux kernel with FDT blob, ramdisk"
> +		fdt_line="fdt = \"fdt@${3}\";"
> +		ramdisk_line="ramdisk = \"ramdisk@${4}\";"
>  	fi
> -	kernel_line="kernel = \"kernel@${1}\";"
> +	kernel_line="kernel = \"kernel@${2}\";"
>  
> -	cat << EOF >> fit-image.its
> +	cat << EOF >> ${1}
>                  default = "conf@1";
>                  conf@1 {
>                          description = "${conf_desc}";
>  			${kernel_line}
>  			${fdt_line}
> +			${ramdisk_line}
>                          hash@1 {
>                                  algo = "${conf_csum}";
>                          };
> @@ -168,103 +212,137 @@ EOF
>  
>  	if [ ! -z "${conf_sign_keyname}" ] ; then
>  
> -		if [ -z "${2}" ] ; then
> +		if [ -z "${3}" -a -z "${4}" ] ; then
>  			sign_line="sign-images = \"kernel\";"
> -		else
> +		elif [ -z "${4}" ]; then
>  			sign_line="sign-images = \"fdt\", \"kernel\";"
> +		elif [ -z "${3}" ]; then
> +			sign_line="sign-images = \"ramdisk\", \"kernel\";"
> +		else
> +			sign_line="sign-images = \"ramdisk\", \"fdt\", \"kernel\";"
>  		fi
>  
> -		cat << EOF >> fit-image.its
> +		cat << EOF >> ${1}
>                          signature@1 {
>                                  algo = "${conf_csum},rsa2048";
>                                  key-name-hint = "${conf_sign_keyname}";
> -                                sign-images = "fdt", "kernel";
> +				${sign_line}
>                          };
>  EOF
>  	fi
>  
> -	cat << EOF >> fit-image.its
> +	cat << EOF >> ${1}
>                  };
>  EOF
>  }
>  
> -do_assemble_fitimage() {
> -	cd ${B}
> -	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
> -		kernelcount=1
> -		dtbcount=""
> -		rm -f fit-image.its arch/${ARCH}/boot/fitImage
> -
> -		fitimage_emit_fit_header
> -
> -		#
> -		# Step 1: Prepare a kernel image section.
> -		#
> -		fitimage_emit_section_maint imagestart
> -
> -		uboot_prep_kimage
> -		fitimage_emit_section_kernel "${kernelcount}" linux.bin "${linux_comp}"
> -
> -		#
> -		# Step 2: Prepare a DTB image section
> -		#
> -		if test -n "${KERNEL_DEVICETREE}"; then
> -			dtbcount=1
> -			for DTB in ${KERNEL_DEVICETREE}; do
> -				if echo ${DTB} | grep -q '/dts/'; then
> -					bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> -					DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> -				fi
> -				DTB_PATH="arch/${ARCH}/boot/dts/${DTB}"
> -				if [ ! -e "${DTB_PATH}" ]; then
> -					DTB_PATH="arch/${ARCH}/boot/${DTB}"
> -				fi
> -
> -				fitimage_emit_section_dtb ${dtbcount} ${DTB_PATH}
> -				dtbcount=`expr ${dtbcount} + 1`
> -			done
> -		fi
> +#
> +# Assemble fitImage
> +#
> +# $1 ... .its filename
> +# $2 ... fitImage name
> +# $3 ... include ramdisk
> +fitimage_assemble() {
> +	kernelcount=1
> +	dtbcount=""
> +	ramdiskcount=${3}
> +	rm -f ${1} arch/${ARCH}/boot/${2}
> +
> +	fitimage_emit_fit_header ${1}
> +
> +	#
> +	# Step 1: Prepare a kernel image section.
> +	#
> +	fitimage_emit_section_maint ${1} imagestart
> +
> +	uboot_prep_kimage
> +	fitimage_emit_section_kernel ${1} "${kernelcount}" linux.bin "${linux_comp}"
> +
> +	#
> +	# Step 2: Prepare a DTB image section
> +	#
> +	if test -n "${KERNEL_DEVICETREE}"; then
> +		dtbcount=1
> +		for DTB in ${KERNEL_DEVICETREE}; do
> +			if echo ${DTB} | grep -q '/dts/'; then
> +				bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> +				DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> +			fi
> +			DTB_PATH="arch/${ARCH}/boot/dts/${DTB}"
> +			if [ ! -e "${DTB_PATH}" ]; then
> +				DTB_PATH="arch/${ARCH}/boot/${DTB}"
> +			fi
> +
> +			fitimage_emit_section_dtb ${1} ${dtbcount} ${DTB_PATH}
> +			dtbcount=`expr ${dtbcount} + 1`
> +		done
> +	fi
>  
> -		fitimage_emit_section_maint sectend
> +	#
> +	# Step 3: Prepare a ramdisk section.
> +	#
> +	if [ "x${ramdiskcount}" = "x1" ] ; then
> +		copy_initramfs
> +		fitimage_emit_section_ramdisk ${1} "${ramdiskcount}" usr/${INITRAMFS_IMAGE}-${MACHINE}.cpio
> +	fi
>  
> -		# Force the first Kernel and DTB in the default config
> -		kernelcount=1
> -		dtbcount=1
> +	fitimage_emit_section_maint ${1} sectend
>  
> -		#
> -		# Step 3: Prepare a configurations section
> -		#
> -		fitimage_emit_section_maint confstart
> +	# Force the first Kernel and DTB in the default config
> +	kernelcount=1
> +	dtbcount=1
>  
> -		fitimage_emit_section_config ${kernelcount} ${dtbcount}
> +	#
> +	# Step 4: Prepare a configurations section
> +	#
> +	fitimage_emit_section_maint ${1} confstart
>  
> -		fitimage_emit_section_maint sectend
> +	fitimage_emit_section_config ${1} ${kernelcount} ${dtbcount} ${ramdiskcount}
>  
> -		fitimage_emit_section_maint fitend
> +	fitimage_emit_section_maint ${1} sectend
>  
> -		#
> -		# Step 4: Assemble the image
> -		#
> +	fitimage_emit_section_maint ${1} fitend
> +
> +	#
> +	# Step 5: Assemble the image
> +	#
> +	uboot-mkimage \
> +		${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
> +		-f ${1} \
> +		arch/${ARCH}/boot/${2}
> +
> +	#
> +	# Step 6: Sign the image and add public key to U-Boot dtb
> +	#
> +	if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
>  		uboot-mkimage \
>  			${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
> -			-f fit-image.its \
> -			arch/${ARCH}/boot/fitImage
> -
> -		#
> -		# Step 5: Sign the image and add public key to U-Boot dtb
> -		#
> -		if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
> -			uboot-mkimage \
> -				${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
> -				-F -k "${UBOOT_SIGN_KEYDIR}" \
> -				-K "${DEPLOY_DIR_IMAGE}/${UBOOT_DTB_BINARY}" \
> -				-r arch/${ARCH}/boot/fitImage
> -		fi
> +			-F -k "${UBOOT_SIGN_KEYDIR}" \
> +			-K "${DEPLOY_DIR_IMAGE}/${UBOOT_DTB_BINARY}" \
> +			-r arch/${ARCH}/boot/${2}
> +	fi
> +}
> +
> +do_assemble_fitimage() {
> +	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
> +		cd ${B}
> +		fitimage_assemble fit-image.its fitImage
>  	fi
>  }
>  
>  addtask assemble_fitimage before do_install after do_compile
>  
> +do_assemble_fitimage_initramfs() {
> +	if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
> +		test -n "${INITRAMFS_IMAGE}" ; then
> +		cd ${B}
> +		fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-${INITRAMFS_IMAGE} 1
> +	fi
> +}
> +
> +addtask assemble_fitimage_initramfs before do_deploy after do_install
> +
> +
>  kernel_do_deploy[vardepsexclude] = "DATETIME"
>  kernel_do_deploy_append() {
>  	# Update deploy directory
> @@ -278,8 +356,23 @@ kernel_do_deploy_append() {
>  		linux_bin_symlink_name=fitImage-linux.bin-${MACHINE}
>  		install -m 0644 linux.bin ${DEPLOYDIR}/${linux_bin_base_name}.bin
>  
> +		if [ -n "${INITRAMFS_IMAGE}" ]; then
> +			echo "Copying fit-image-${INITRAMFS_IMAGE}.its source file..."
> +			its_initramfs_base_name="${KERNEL_IMAGETYPE}-its-${INITRAMFS_IMAGE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
> +			its_initramfs_symlink_name=${KERNEL_IMAGETYPE}-its-${INITRAMFS_IMAGE}-${MACHINE}
> +			install -m 0644 fit-image-${INITRAMFS_IMAGE}.its ${DEPLOYDIR}/${its_initramfs_base_name}.its
> +			fit_initramfs_base_name="${KERNEL_IMAGETYPE}-${INITRAMFS_IMAGE}-${PV}-${PR}-${MACHINE}-${DATETIME}"
> +			fit_initramfs_symlink_name=${KERNEL_IMAGETYPE}-${INITRAMFS_IMAGE}-${MACHINE}
> +			install -m 0644 arch/${ARCH}/boot/fitImage-${INITRAMFS_IMAGE} ${DEPLOYDIR}/${fit_initramfs_base_name}.bin
> +		fi
> +
>  		cd ${DEPLOYDIR}
>  		ln -sf ${its_base_name}.its ${its_symlink_name}.its
>  		ln -sf ${linux_bin_base_name}.bin ${linux_bin_symlink_name}.bin
> +
> +		if [ -n "${INITRAMFS_IMAGE}" ]; then
> +			ln -sf ${its_initramfs_base_name}.its ${its_initramfs_symlink_name}.its
> +			ln -sf ${fit_initramfs_base_name}.bin ${fit_initramfs_symlink_name}.bin
> +		fi
>  	fi
>  }
> -- 
> 2.8.0
> 
> -- 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 5/5] uboot-sign: do_concat_dtb(): cd to $B
  2016-08-08 16:37 ` [PATCH 5/5] uboot-sign: do_concat_dtb(): cd to $B George McCollister
@ 2016-08-08 21:32   ` Denys Dmytriyenko
  0 siblings, 0 replies; 14+ messages in thread
From: Denys Dmytriyenko @ 2016-08-08 21:32 UTC (permalink / raw)
  To: George McCollister
  Cc: marex, trini, denys, andrew.bradford, openembedded-core

On Mon, Aug 08, 2016 at 11:37:57AM -0500, George McCollister wrote:
> Prior to running oe_runmake make sure $B is the cwd. This is required
> due to bitbake commit 67a7b8b021badc17d8fdf447c250e79d291e75f7
> "build: don't use $B as the default cwd for functions".
> 
> Without this change, do_concat_dtb fails with:
> | ERROR: oe_runmake failed
> | make: *** No targets specified and no makefile found.  Stop.
> 
> Signed-off-by: George McCollister <george.mccollister@gmail.com>

Tested-by: Denys Dmytriyenko <denys@ti.com>
Acked-by: Denys Dmytriyenko <denys@ti.com>


> ---
>  meta/classes/uboot-sign.bbclass | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/meta/classes/uboot-sign.bbclass b/meta/classes/uboot-sign.bbclass
> index d56ad8e..3c56db8 100644
> --- a/meta/classes/uboot-sign.bbclass
> +++ b/meta/classes/uboot-sign.bbclass
> @@ -66,6 +66,7 @@ do_concat_dtb () {
>  	if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ]; then
>  		if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \
>  			[ -e "${DEPLOYDIR}/${UBOOT_DTB_IMAGE}" ]; then
> +			cd ${B}
>  			oe_runmake EXT_DTB=${DEPLOYDIR}/${UBOOT_DTB_IMAGE}
>  			install ${S}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE}
>  			install ${S}/${UBOOT_BINARY} ${DEPLOY_DIR_IMAGE}/${UBOOT_IMAGE}
> -- 
> 2.8.0
> 
> -- 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support
  2016-08-08 20:21     ` Burton, Ross
@ 2016-08-08 21:34       ` Denys Dmytriyenko
  0 siblings, 0 replies; 14+ messages in thread
From: Denys Dmytriyenko @ 2016-08-08 21:34 UTC (permalink / raw)
  To: Burton, Ross
  Cc: Marek Vašut, Tom Rini, OE-core, Andrew Bradford, Dmytriyenko, Denys

On Mon, Aug 08, 2016 at 09:21:31PM +0100, Burton, Ross wrote:
> On 8 August 2016 at 21:16, George McCollister <george.mccollister@gmail.com>
> wrote:
> 
> > I'm surprised it wasn't accepted when it was a single patch. At this
> > point I don't know what's keeping it from being accepted since I
> > haven't received any feedback. I suspect whoever is maintaining OE
> > core doesn't have time to look at it.
> >
> 
> Yeah that's pretty much the case.  It's now in my staging - thanks for
> rebasing and incorporating - so assuming the reviews from Denys etc are
> good then it should be in master soon.

Ok, I've tested everything, except x86 support, as I don't have necessary 
setup.

-- 
Denys


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2016-08-08 22:32 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-08 16:37 [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support George McCollister
2016-08-08 16:37 ` [PATCH 1/5] kernel-fitimage.bbclass: do_assemble_fitimage(): cd to $B George McCollister
2016-08-08 21:30   ` Denys Dmytriyenko
2016-08-08 16:37 ` [PATCH v3 2/5] kernel-fitimage: add initramfs support George McCollister
2016-08-08 21:31   ` Denys Dmytriyenko
2016-08-08 16:37 ` [PATCH v2 3/5] kernel-fitimage: Add x86 support George McCollister
2016-08-08 16:37 ` [PATCH v2 4/5] uboot-sign: Handle .rom signing the same as .img George McCollister
2016-08-08 16:37 ` [PATCH 5/5] uboot-sign: do_concat_dtb(): cd to $B George McCollister
2016-08-08 21:32   ` Denys Dmytriyenko
2016-08-08 18:05 ` [PATCH v2 0/5] kernel-fitimage: Add initramfs, x86 support Denys Dmytriyenko
2016-08-08 20:02   ` Burton, Ross
2016-08-08 20:16   ` George McCollister
2016-08-08 20:21     ` Burton, Ross
2016-08-08 21:34       ` Denys Dmytriyenko

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.