From patchwork Tue Dec 22 01:50:43 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Tyser X-Patchwork-Id: 69217 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.2) with ESMTP id nBM1os63002644 for ; Tue, 22 Dec 2009 01:50:56 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751446AbZLVBuy (ORCPT ); Mon, 21 Dec 2009 20:50:54 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752070AbZLVBuy (ORCPT ); Mon, 21 Dec 2009 20:50:54 -0500 Received: from xes-mad.com ([216.165.139.218]:46851 "EHLO xes-mad.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751505AbZLVBux (ORCPT ); Mon, 21 Dec 2009 20:50:53 -0500 Received: from localhost.localdomain (petert.xes-mad.com [10.52.0.62]) by xes-mad.com (8.13.8/8.13.8) with ESMTP id nBM1ohQQ012367; Mon, 21 Dec 2009 19:50:46 -0600 From: Peter Tyser To: linuxppc-dev@ozlabs.org Cc: linux-kbuild@vger.kernel.org, Peter Tyser Subject: [PATCH v2 3/3] powerpc: Add support for ram filesystems in FIT uImages Date: Mon, 21 Dec 2009 19:50:43 -0600 Message-Id: <1261446643-21714-4-git-send-email-ptyser@xes-inc.com> X-Mailer: git-send-email 1.6.2.1 In-Reply-To: <1261446643-21714-1-git-send-email-ptyser@xes-inc.com> References: <1261446643-21714-1-git-send-email-ptyser@xes-inc.com> X-Virus-Scanned: ClamAV 0.94.2/10206/Sun Dec 20 22:03:12 2009 on mail.xes-mad.com X-Virus-Status: Clean X-Spam-Status: No, score=-6.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00, XES_TECH_LINUX autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on mail.xes-mad.com Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index e56ec21..c2a6591 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile @@ -313,6 +313,9 @@ $(obj)/uImage: vmlinux $(wrapperbits) $(obj)/uImage.fit.%: vmlinux $(obj)/%.dtb $(wrapperbits) $(call if_changed,wrap,uboot.fit,,$(obj)/$*.dtb) +$(obj)/uImage.fit.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) + $(call if_changed,wrap,uboot.fit,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz) + $(obj)/cuImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) $(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz) diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper index 1f35b66..9ccaef7 100755 --- a/arch/powerpc/boot/wrapper +++ b/arch/powerpc/boot/wrapper @@ -270,6 +270,9 @@ fi # physical offset of kernel image membase=`${CROSS}objdump -p "$kernel" | grep -m 1 LOAD | awk '{print $7}'` +# Size of uncompressed kernel is needed to calculate ramdisk location in RAM +kernsize=`${CROSS}objdump -p "$kernel" | grep -m 1 rwx | awk '{print $4}'` + case "$platform" in uboot) rm -f "$ofile" @@ -282,8 +285,14 @@ uboot) ;; uboot.fit) rm -f "$ofile" - ${MKITS} -A ppc -C gzip -a $membase -e $membase -v $version \ - -d "$srctree/$dtb" -k "$srctree/$vmz" -o "$object/uImage.its" + if [ -n "$initrd" ]; then + ${MKITS} -A ppc -C gzip -a $membase -e $membase -v $version \ + -d "$srctree/$dtb" -k "$srctree/$vmz" -r "$srctree/$initrd" \ + -l $kernsize -o "$object/uImage.its" + else + ${MKITS} -A ppc -C gzip -a $membase -e $membase -v $version \ + -d "$srctree/$dtb" -k "$srctree/$vmz" -o "$object/uImage.its" + fi # mkimage calls dtc for FIT images so use kernel dtc if necessary export PATH=$PATH:$srctree/scripts/dtc @@ -308,8 +317,11 @@ if [ -z "$cacheit" ]; then rm -f "$vmz" fi -if [ -n "$initrd" ]; then - addsec $tmp "$initrd" $isection +# FIT images have the initrd in the image tree structure +if [ "$platform" != "uboot.fit" ]; then + if [ -n "$initrd" ]; then + addsec $tmp "$initrd" $isection + fi fi if [ -n "$dtb" ]; then diff --git a/scripts/mkits.sh b/scripts/mkits.sh index fae43dd..ffcf2c4 100755 --- a/scripts/mkits.sh +++ b/scripts/mkits.sh @@ -16,7 +16,8 @@ usage() { echo "Usage: `basename $0` -A arch -C comp -a addr -e entry" \ - "-v version -k kernel [-d dtb] -o its_file" + "-v version -k kernel [-d dtb] [-r ramfs -l ramfs_addr]" \ + "-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)" @@ -24,11 +25,13 @@ usage() { echo -e "\t-v ==> set kernel version to 'version'" echo -e "\t-k ==> include kernel image 'kernel'" echo -e "\t-d ==> include Device Tree Blob 'dtb'" + echo -e "\t-r ==> include initrd/initramfs 'ramfs'" + echo -e "\t-l ==> load initrd/initramfs at 'ramfs_addr'" echo -e "\t-o ==> create output file 'its_file'" exit 1 } -while getopts ":A:C:a:d:e:k:o:v:" OPTION +while getopts ":A:C:a:d:e:k:l:o:r:v:" OPTION do case $OPTION in A ) ARCH=$OPTARG;; @@ -37,7 +40,9 @@ do d ) DTB=$OPTARG;; e ) ENTRY_ADDR=$OPTARG;; k ) KERNEL=$OPTARG;; + l ) RAMFS_ADDR=$OPTARG;; o ) OUTPUT=$OPTARG;; + r ) RAMFS=$OPTARG;; v ) VERSION=$OPTARG;; * ) echo "Invalid option passed to '$0' (options:$@)" usage;; @@ -49,6 +54,8 @@ if [ -z "${ARCH}" ] || [ -z "${COMPRESS}" ] || [ -z "${LOAD_ADDR}" ] || \ [ -z "${ENTRY_ADDR}" ] || [ -z "${VERSION}" ] || [ -z "${KERNEL}" ] || \ [ -z "${OUTPUT}" ]; then usage +elif [ -n "${RAMFS}" ] && [ -z "${RAMFS_ADDR}" ]; then + usage fi # Create a default, fully populated DTS file @@ -90,6 +97,23 @@ DATA="/dts-v1/; }; }; /* end fdt */ + ramdisk@1 { /* start ramdisk */ + description = \"ramdisk\"; + data = /incbin/(\"${RAMFS}\"); + type = \"ramdisk\"; + arch = \"${ARCH}\"; + os = \"linux\"; + load = <${RAMFS_ADDR}>; + compression = \"none\"; + hash@1 { + algo = \"crc32\"; + }; + hash@2 { + algo = \"sha1\"; + }; + }; /* end ramdisk */ + }; + configurations { default = \"config@1\"; config@1 { @@ -101,6 +125,12 @@ DATA="/dts-v1/; }; };" +# Conditionally strip ramfs information out of tree +if [ -z "${RAMFS}" ]; then + DATA=`echo "$DATA" | sed '/start ramdisk/,/end ramdisk/d'` + DATA=`echo "$DATA" | sed '/ramdisk/d'` +fi + # Conditionally strip fdt information out of tree if [ -z "${DTB}" ]; then DATA=`echo "$DATA" | sed '/start fdt/,/end fdt/d'`