zynq: reworked image creation process

After commit a1248da (zynq: convert to new image build code),
all boards, became unbootable, entering into a boot loop.

Replace the compressed kernel zImage by an uncompressed Image,
which is compressed after with gzip. Also, enable the creation
of an initramfs image by default.

Change images' filename to match the compatible string from the
respective .dts file (<vendor>_<model>). Also, use the shared
mkits.sh script and remove the target specific one.

Fixes: FS#1204

Run-tested: ZedBoard

Signed-off-by: Luis Araneda <luaraneda@gmail.com>
This commit is contained in:
Luis Araneda 2018-05-13 14:05:38 -04:00 committed by John Crispin
parent c335649629
commit dfac3ffd07
3 changed files with 31 additions and 199 deletions

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
ARCH:=arm ARCH:=arm
BOARD:=zynq BOARD:=zynq
BOARDNAME:=Xilinx Zynq 7000 SoCs BOARDNAME:=Xilinx Zynq 7000 SoCs
FEATURES:=fpu gpio rtc usb usbgadget targz source-only FEATURES:=fpu gpio rtc usb usbgadget ramdisk targz source-only
CPU_TYPE:=cortex-a9 CPU_TYPE:=cortex-a9
CPU_SUBTYPE:=neon CPU_SUBTYPE:=neon
MAINTAINER:=Jason Wu <jason.wu.misc@gmail.com> MAINTAINER:=Jason Wu <jason.wu.misc@gmail.com>
@ -24,7 +24,7 @@ KERNEL_PATCHVER:=4.4
include $(INCLUDE_DIR)/target.mk include $(INCLUDE_DIR)/target.mk
KERNELNAME:=zImage dtbs KERNELNAME:=Image dtbs
DEFAULT_PACKAGES += uboot-envtools DEFAULT_PACKAGES += uboot-envtools

View File

@ -8,64 +8,46 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk include $(INCLUDE_DIR)/image.mk
################################################# #################################################
# Images # Default and templates
################################################# #################################################
# $(1): rootfs contents directory define Device/Default
define Image/mkfs/cpio PROFILES := Default
( cd $(call mkfs_target_dir,$(1))/; find . | cpio -o -H newc | gzip -9n > $@ ) KERNEL_DEPENDS = $$(wildcard $(DTS_DIR)/$$(DEVICE_DTS).dts)
KERNEL_INITRAMFS_PREFIX := $$(IMG_PREFIX)-$(1)-initramfs
KERNEL_PREFIX := $$(IMAGE_PREFIX)
KERNEL_LOADADDR := 0x8000
endef endef
# $(1): zynq board id define Device/FitImageGzip
define Build/dtb KERNEL_SUFFIX := -fit-uImage.itb
$(call Image/BuildDTB,$(DTS_DIR)/zynq-$(1).dts,$@.dtb) KERNEL = kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb
endef KERNEL_NAME := Image
define Build/uRamdisk
# Create uboot cpio.gz
mkimage -A arm -T ramdisk -C gzip -n "$(PROFILE) OpenWRT rootfs" \
-d $(IMAGE_ROOTFS) $@.new
mv $@.new $@
endef
# $(1): FIT name/description
define Build/fit
# create FIT image with rootfs
./mkits.sh \
-D $(1) -o $@.its -k $(IMAGE_KERNEL) -d $(IMAGE_KERNEL).dtb \
-C none -a $(KERNEL_LOADADDR) -e $(KERNEL_ENTRY) \
-A $(ARCH) -v $(LINUX_VERSION) -r $(IMAGE_ROOTFS) -z gzip
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@
endef endef
################################################# #################################################
# Devices # Devices
################################################# #################################################
# default kernel load address define Device/digilent_zynq-zybo
KERNEL_LOADADDR=0x8000 $(call Device/FitImageGzip)
KERNEL_ENTRY=0x8000 DEVICE_TITLE := ZYBO Development Board
DEVICE_DTS := zynq-zybo
TARGET_FILESYSTEMS += cpio
# $(1): canonical device name
# $(2): lowercase device id
define ZynqDevice
define Device/$(1)
DEVICE_TITLE := $(1) development board
KERNEL := dtb $(2) | kernel-bin | uImage none
KERNEL_NAME = zImage
IMAGES := uramdisk.image.gz fit.itb
IMAGE/uramdisk.image.gz := uRamdisk
IMAGE/fit.itb := fit $(2)
IMAGE_NAME = $$$$(IMG_PREFIX)-$(2)-$$$$(2)
endef
TARGET_DEVICES += $(1)
endef endef
TARGET_DEVICES += digilent_zynq-zybo
$(eval $(call ZynqDevice,ZC702,zc702)) define Device/xlnx_zynq-zc702
$(eval $(call ZynqDevice,ZedBoard,zed)) $(call Device/FitImageGzip)
$(eval $(call ZynqDevice,ZYBO,zybo)) DEVICE_TITLE := ZC702 Development Board
DEVICE_DTS := zynq-zc702
endef
TARGET_DEVICES += xlnx_zynq-zc702
define Device/xlnx_zynq-zed
$(call Device/FitImageGzip)
DEVICE_TITLE := Zed Development Board
DEVICE_DTS := zynq-zed
endef
TARGET_DEVICES += xlnx_zynq-zed
$(eval $(call BuildImage)) $(eval $(call BuildImage))

View File

@ -1,150 +0,0 @@
#!/bin/bash
#
# Licensed under the terms of the GNU GPL License version 2 or later.
#
# Author: Peter Tyser <ptyser@xes-inc.com>
#
# U-Boot firmware supports the booting of images in the Flattened Image
# Tree (FIT) format. The FIT format uses a device tree structure to
# describe a kernel image, device tree blob, ramdisk, etc. This script
# creates an Image Tree Source (.its file) which can be passed to the
# 'mkimage' utility to generate an Image Tree Blob (.itb file). The .itb
# file can then be booted by U-Boot (or other bootloaders which support
# FIT images). See doc/uImage.FIT/howto.txt in U-Boot source code for
# additional information on FIT images.
#
usage() {
echo "Usage: `basename $0` -A arch -C comp -a addr -e entry" \
"-v version -k kernel [-D name -d dtb] -o its_file"
echo -e "\t-A ==> set architecture to 'arch'"
echo -e "\t-C ==> set compression type 'comp'"
echo -e "\t-a ==> set load address to 'addr' (hex)"
echo -e "\t-e ==> set entry point to 'entry' (hex)"
echo -e "\t-v ==> set kernel version to 'version'"
echo -e "\t-k ==> include kernel image 'kernel'"
echo -e "\t-D ==> human friendly Device Tree Blob 'name'"
echo -e "\t-d ==> include Device Tree Blob 'dtb'"
echo -e "\t-r ==> include ramdisk"
echo -e "\t-z ==> ramdisk compression type"
echo -e "\t-o ==> create output file 'its_file'"
exit 1
}
while getopts ":A:a:C:D:d:e:k:o:v:r:z:" OPTION
do
case $OPTION in
A ) ARCH=$OPTARG;;
a ) LOAD_ADDR=$OPTARG;;
C ) COMPRESS=$OPTARG;;
D ) DEVICE=$OPTARG;;
d ) DTB=$OPTARG;;
e ) ENTRY_ADDR=$OPTARG;;
k ) KERNEL=$OPTARG;;
o ) OUTPUT=$OPTARG;;
v ) VERSION=$OPTARG;;
r ) RAMDISK=$OPTARG;;
z ) RD_COMPRESS=$OPTARG;;
* ) echo "Invalid option passed to '$0' (options:$@)"
usage;;
esac
done
# Make sure user entered all required parameters
if [ -z "${ARCH}" ] || [ -z "${COMPRESS}" ] || [ -z "${LOAD_ADDR}" ] || \
[ -z "${ENTRY_ADDR}" ] || [ -z "${VERSION}" ] || [ -z "${KERNEL}" ] || \
[ -z "${OUTPUT}" ]; then
usage
fi
ARCH_UPPER=`echo $ARCH | tr '[:lower:]' '[:upper:]'`
# Conditionally create fdt information
if [ -n "${DTB}" ]; then
FDT="
fdt@1 {
description = \"${ARCH_UPPER} OpenWrt ${DEVICE} device tree blob\";
data = /incbin/(\"${DTB}\");
type = \"flat_dt\";
arch = \"${ARCH}\";
compression = \"none\";
hash@1 {
algo = \"crc32\";
};
hash@2 {
algo = \"sha1\";
};
};
"
CONF=" fdt = \"fdt@1\";"
fi
# Conditionally create ramdisk node
if [ -n "${RAMDISK}" ]; then
RD_COMPRESS=${RD_COMPRESS:-none}
RD="
ramdisk@1 {
description = \"${ARCH_UPPER} OpenWrt ${DEVICE} ramdisk\";
data = /incbin/(\"${RAMDISK}\");
type = \"ramdisk\";
arch = \"${ARCH}\";
os = \"linux\";
compression = \"${RD_COMPRESS}\";
hash@1 {
algo = \"crc32\";
};
hash@2 {
algo = \"sha1\";
};
};
"
if [ -z "${CONF}" ]; then
CONF=" ramdisk = \"ramdisk@1\";"
else
CONF="$CONF
ramdisk = \"ramdisk@1\";"
fi
fi
# Create a default, fully populated DTS file
DATA="/dts-v1/;
/ {
description = \"${ARCH_UPPER} OpenWrt FIT (Flattened Image Tree)\";
#address-cells = <1>;
images {
kernel@1 {
description = \"${ARCH_UPPER} OpenWrt Linux-${VERSION}\";
data = /incbin/(\"${KERNEL}\");
type = \"kernel\";
arch = \"${ARCH}\";
os = \"linux\";
compression = \"${COMPRESS}\";
load = <${LOAD_ADDR}>;
entry = <${ENTRY_ADDR}>;
hash@1 {
algo = \"crc32\";
};
hash@2 {
algo = \"sha1\";
};
};
${RD}
${FDT}
};
configurations {
default = \"config@1\";
config@1 {
description = \"OpenWrt\";
kernel = \"kernel@1\";
${CONF}
};
};
};"
# Write .its file to disk
echo "$DATA" > ${OUTPUT}