From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from moutng.kundenserver.de ([212.227.17.8]) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1SHZJD-0007jU-PT for ptxdist@pengutronix.de; Tue, 10 Apr 2012 13:32:29 +0200 Message-ID: <4F841A44.1020807@corscience.de> Date: Tue, 10 Apr 2012 13:32:20 +0200 From: =?ISO-8859-1?Q?Andreas_Bie=DFmann?= MIME-Version: 1.0 References: <1332763274-17969-1-git-send-email-bernhard@bwalle.de> <1332763274-17969-2-git-send-email-bernhard@bwalle.de> In-Reply-To: <1332763274-17969-2-git-send-email-bernhard@bwalle.de> Subject: Re: [ptxdist] [PATCH 2/2] Allow creation of bootable SD card for OMAP CPUs Reply-To: ptxdist@pengutronix.de List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Sender: ptxdist-bounces@pengutronix.de Errors-To: ptxdist-bounces@pengutronix.de To: ptxdist@pengutronix.de Cc: Bernhard Walle , Bernhard Walle On 26.03.2012 14:01, Bernhard Walle wrote: > With the new option IMAGE_OMAPSD it's possible to create an image for > OMAP-bootable SD cards. Tested with a devkit8000 and a virtual beagle > board (qemu). > = > See the comment in platforms/image_omapsd.in for more information. > = > Signed-off-by: Bernhard Walle > --- > platforms/image_omapsd.in | 48 +++++++++++++ > rules/post/image_omapsd.make | 32 +++++++++ > scripts/genomapsdimg | 160 ++++++++++++++++++++++++++++++++++++= ++++++ > 3 files changed, 240 insertions(+) > create mode 100644 platforms/image_omapsd.in > create mode 100644 rules/post/image_omapsd.make > create mode 100755 scripts/genomapsdimg > = > diff --git a/platforms/image_omapsd.in b/platforms/image_omapsd.in > new file mode 100644 > index 0000000..ef6c5e4 > --- /dev/null > +++ b/platforms/image_omapsd.in > @@ -0,0 +1,48 @@ > +## SECTION=3Dimage > + > +menuconfig IMAGE_OMAPSD > + bool > + select IMAGE_VFAT_TOOLS > + select HOST_PARTED > + select IMAGE_EXT2 > + depends on ARCH_ARM > + prompt "Generate OMAP bootable SD card" > + help > + Creates an bootable SD card for OMAP CPUs, for example for the beagle= board. > + The resulting image is called "omap_sd.img". You can copy it with "dd" > + on a raw SD card, without partitioning. > + > + The SD card contains two file systems: > + 1) A FAT file system that contains MLO, a bootloader and a Linux ke= rnel > + (plus additional files like an initramfs). > + 2) The root file system as ext3 file system. can we make the second ext3 filesystem optional? Anyway, it could be done in a second step. Would be great to get this tool into 2012.05! > + > + OMAP has special requirements regarding the geometry of partition tab= le, > + and the location of MLO, that's why a fixed image makes more sense he= re > + than copying the files manually. > + > +if IMAGE_OMAPSD > + > +config IMAGE_OMAPSD_BOOTLOADER > + string > + default "u-boot.img" > + prompt "Bootloader file" > + help > + The name of the bootloader that should be copied to the SD card. If y= ou use > + u-boot SPL, then "u-boot.img" is the right choice here. If you still = use > + x-loader, then "u-boot.bin" should be copied. Also barebox can be used > + with its MLO. The file must reside in the images directory of the pla= tform. > + > +config IMAGE_OMAPSD_ADDITIONAL_BOOT_FILES > + string > + default "" > + prompt "Additional files for the boot partition" > + help > + A (whitespace separated) list of additional files can be specified he= re. > + The files get copied in the boot partition (1st FAT partition). They = must > + be in the images/ directory of the platform that is built. One exampl= e is > + a uRamdisk that gets loaded by the bootloader. > + > +endif > + > +# vim: set sw=3D8 ts=3D8 noet ft=3Dkconfig: > diff --git a/rules/post/image_omapsd.make b/rules/post/image_omapsd.make > new file mode 100644 > index 0000000..3741106 > --- /dev/null > +++ b/rules/post/image_omapsd.make > @@ -0,0 +1,32 @@ > +# -*-makefile-*- > +# > +# Copyright (C) 2012 by the ptxdist project your copyright? > +# > +# See CREDITS for details about who has contributed to this project. > +# > +# For further information about the PTXdist project and license conditio= ns > +# see the README file. > +# > + > +SEL_ROOTFS-$(PTXCONF_IMAGE_OMAPSD) +=3D $(IMAGEDIR)/omap_sd.img > + > +# preprend the $(IMAGEDIR) if PTXCONF_IMAGE_OMAPSD_ADDITIONAL_BOOT_FILES= is not > +# empty > +ifneq ($(PTXCONF_IMAGE_OMAPSD_ADDITIONAL_BOOT_FILES),"") > +PTXCONF_IMAGE_OMAPSD_ADDITIONAL_BOOT_FILES_FULL :=3D \ > + $(addprefix $(IMAGEDIR)/, $(PTXCONF_IMAGE_OMAPSD_ADDITIONAL_BOOT_FILES)) > +endif > + > +$(IMAGEDIR)/omap_sd.img: $(IMAGEDIR)/root.ext2 > + @ln -sf $(IMAGEDIR)/linuximage $(IMAGEDIR)/uImage alternatively provide a Kconfig option for renaming $(IMAGEDIR)/linuximage? > + @echo "Creating bootable SD card for OMAP"; \ > + PATH=3D$(PTXCONF_SYSROOT_HOST)/bin:$$PATH $(PTXDIST_TOPDIR)/scripts/gen= omapsdimg \ > + -m $(IMAGEDIR)/MLO \ > + -b $(IMAGEDIR)/u-boot.img \ use IMAGE_OMAPSD_BOOTLOADER variable here! > + -k $(IMAGEDIR)/uImage \ > + -f $(IMAGEDIR)/root.ext2 \ > + -a "$(PTXCONF_IMAGE_OMAPSD_ADDITIONAL_BOOT_FILES_FULL)" \ > + -o $@ cleanup $(IMAGEDIR)/uImage? > + @echo "done." > + > +# vim: syntax=3Dmake > diff --git a/scripts/genomapsdimg b/scripts/genomapsdimg > new file mode 100755 > index 0000000..9c87e45 > --- /dev/null > +++ b/scripts/genomapsdimg > @@ -0,0 +1,160 @@ > +#!/bin/bash copyright? > + > +# Creates a OMAP bootable SD card. > +# The image has a PC-style partition table with two partitions: > +# > +# 1) a FAT partition with MLO, bootloader and a Linux kernel > +# 2) a ext3 partition with the root file system. > +# > +# That's a bit tricky because the OMAP needs a special partition table > +# (therefore, genpart cannot be used). > +# > +# Parts of the script have been copied from 'debian-cd' (post-boot-armel= ). > + > +# exit on error > +set -e > + > +usage() { > +cat <<-EOF > + > +Usage: `basename "$0"` OPTIONS > + > + -h this help > + -m path to the MLO file (SPL) > + -b path to the bootloader > + -k path to the linux kernel > + -a additional file that should be included in the FAT p= artition > + (e.g. a FTD or an initramfs). Multiple files can be = specified > + using whitespace separation. Don't forget to quote. > + -f the (ext3) file system image for the second partition > + -o the output file that should be written > + > +EOF > +} > + > +file_length() > +{ > + stat -c %s "$1" > +} > + > +create_partitions() > +{ > + local boot_size=3D"$((72 * 1024 * 1024))" # 72 MB for the partition > + local image_size=3D"$(file_length "${FILESYSTEM}")" > + local img_size_blocks=3D"$(((${boot_size} + ${image_size} + 512 - 1) / = 512))" > + > + dd if=3D/dev/zero of=3D"${OUTPUT}" bs=3D512 count=3D0 seek=3D"${img_siz= e_blocks}" >/dev/null 2>&1 > + > + local trg_size=3D"$(file_length "${OUTPUT}")" > + local cylinders=3D$(echo ${trg_size}/255/63/512 | bc) > + > + { > + echo ,9,0x0C,* > + echo ,,,- > + } | sfdisk -D -H 255 -S 63 -C ${cylinders} "${OUTPUT}" >/dev/null 2>&1 catch possible error (in some tests I didn't had sfdisk in $PATH; took some time to find this out ;). > +} > + > +check_input() > +{ > + if ! [ -r "${MLO}" ] ; then > + echo "MLO '${MLO}' does not exist." > + usage > + exit 1 > + fi > + > + if ! [ -r "${BOOTLOADER}" ] ; then > + echo "Bootloader '${BOOTLOADER}' does not exist." > + usage > + exit 1 > + fi > + > + if ! [ -r "${KERNEL}" ] ; then > + echo "Kernel '${KERNEL}' does not exist." > + usage > + exit 1 > + fi > + > + if ! [ -r "${FILESYSTEM}" ] ; then > + echo "File system image '${FILESYSTEM}' does not exist." > + usage > + exit 1 > + fi > +} > + > +create_filesystem() > +{ > + local vatstart=3D$(parted "${OUTPUT}" unit B print 2>/dev/null|grep "^ = 1"|awk '{print $2}') > + local vatsize=3D$(LANG=3DC fdisk -l "${OUTPUT}" 2>/dev/null|grep W95 |a= wk '{print $5}') > + > + mkdosfs -F 32 -C "${OUTPUT_FAT}" "${vatsize}" >/dev/null 2>&1 catch error on tool missing? > +} > + > +copy_files() > +{ > + export MTOOLS_SKIP_CHECK=3D1 > + > + # it's important to copy the MLO first > + mcopy -i "${OUTPUT_FAT}" "${MLO}" ::MLO > + mcopy -i "${OUTPUT_FAT}" "${BOOTLOADER}" "::$(basename "${BOOTLOADER}")" > + mcopy -i "${OUTPUT_FAT}" "${KERNEL}" "::$(basename "${KERNEL}")" > + > + # copy additional files (like FTD or an initramfs) > + if [ -n "$ADDITIONAL_FILES" ] ; then > + for file in ${ADDITIONAL_FILES} ; do > + local targetname=3D$(basename "${file}") > + mcopy -i "${OUTPUT_FAT}" "${file}" "::${targetname}" > + done > + fi > +} > + > +create_image() > +{ > + # now put the whole vfat into the first partition > + local vatstart=3D$(parted "${OUTPUT}" unit B print 2>/dev/null | grep "= ^ 1" | awk '{print $2}') > + > + dd conv=3Dnotrunc bs=3D"${vatstart%B}" if=3D"${OUTPUT_FAT}" of=3D"${OUT= PUT}" seek=3D1 >/dev/null 2>&1 > + rm "${OUTPUT_FAT}" > + > + # put ext3 content into the second partition > + local ext3start=3D$(parted "${OUTPUT}" unit B print 2>/dev/null | grep = "^ 2" | awk '{print $2}') > + dd conv=3Dnotrunc bs=3D"${ext3start%B}" if=3D"${FILESYSTEM}" of=3D"${OU= TPUT}" seek=3D1 >/dev/null 2>&1 > +} > + > + > +# command line parsing > + > +while getopts hm:b:k:a:f:o: name ; do > + case $name in > + m) MLO=3D"${OPTARG}" > + ;; > + b) BOOTLOADER=3D"${OPTARG}" > + ;; > + k) KERNEL=3D"${OPTARG}" > + ;; > + a) ADDITIONAL_FILES=3D"${OPTARG}" > + ;; > + f) FILESYSTEM=3D"${OPTARG}" > + ;; > + o) OUTPUT=3D"${OPTARG}" > + ;; > + h) usage > + exit 0 > + ;; > + *) usage > + exit 1 > + ;; > + esac > +done > + > +OUTPUT_FAT=3D"${OUTPUT}.vfat" > +[ -r "${OUTPUT_FAT}" ] && rm "${OUTPUT_FAT}" > + > +check_input > +create_partitions > +create_filesystem > +copy_files > +create_image > + > +echo "${OUTPUT} ready" > + > +# vim: set sw=3D4 ts=3D4 noet: best regards Andreas Bie=DFmann -- = ptxdist mailing list ptxdist@pengutronix.de