* [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.