|  | #!/bin/sh | 
|  | # | 
|  | # This file is subject to the terms and conditions of the GNU General Public | 
|  | # License.  See the file "COPYING" in the main directory of this archive | 
|  | # for more details. | 
|  | # | 
|  | # Copyright (C) 2017 by Changbin Du <changbin.du@intel.com> | 
|  | # | 
|  | # Adapted from code in arch/x86/boot/Makefile by H. Peter Anvin and others | 
|  | # | 
|  | # "make fdimage/fdimage144/fdimage288/isoimage" script for x86 architecture | 
|  | # | 
|  | # Arguments: | 
|  | #   $1 - fdimage format | 
|  | #   $2 - target image file | 
|  | #   $3 - kernel bzImage file | 
|  | #   $4 - mtool configuration file | 
|  | #   $5 - kernel cmdline | 
|  | #   $6 - inird image file | 
|  | # | 
|  |  | 
|  | # Use "make V=1" to debug this script | 
|  | case "${KBUILD_VERBOSE}" in | 
|  | *1*) | 
|  | set -x | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | verify () { | 
|  | if [ ! -f "$1" ]; then | 
|  | echo ""                                                   1>&2 | 
|  | echo " *** Missing file: $1"                              1>&2 | 
|  | echo ""                                                   1>&2 | 
|  | exit 1 | 
|  | fi | 
|  | } | 
|  |  | 
|  |  | 
|  | export MTOOLSRC=$4 | 
|  | FIMAGE=$2 | 
|  | FBZIMAGE=$3 | 
|  | KCMDLINE=$5 | 
|  | FDINITRD=$6 | 
|  |  | 
|  | # Make sure the files actually exist | 
|  | verify "$FBZIMAGE" | 
|  |  | 
|  | genbzdisk() { | 
|  | verify "$MTOOLSRC" | 
|  | mformat a: | 
|  | syslinux $FIMAGE | 
|  | echo "$KCMDLINE" | mcopy - a:syslinux.cfg | 
|  | if [ -f "$FDINITRD" ] ; then | 
|  | mcopy "$FDINITRD" a:initrd.img | 
|  | fi | 
|  | mcopy $FBZIMAGE a:linux | 
|  | } | 
|  |  | 
|  | genfdimage144() { | 
|  | verify "$MTOOLSRC" | 
|  | dd if=/dev/zero of=$FIMAGE bs=1024 count=1440 2> /dev/null | 
|  | mformat v: | 
|  | syslinux $FIMAGE | 
|  | echo "$KCMDLINE" | mcopy - v:syslinux.cfg | 
|  | if [ -f "$FDINITRD" ] ; then | 
|  | mcopy "$FDINITRD" v:initrd.img | 
|  | fi | 
|  | mcopy $FBZIMAGE v:linux | 
|  | } | 
|  |  | 
|  | genfdimage288() { | 
|  | verify "$MTOOLSRC" | 
|  | dd if=/dev/zero of=$FIMAGE bs=1024 count=2880 2> /dev/null | 
|  | mformat w: | 
|  | syslinux $FIMAGE | 
|  | echo "$KCMDLINE" | mcopy - W:syslinux.cfg | 
|  | if [ -f "$FDINITRD" ] ; then | 
|  | mcopy "$FDINITRD" w:initrd.img | 
|  | fi | 
|  | mcopy $FBZIMAGE w:linux | 
|  | } | 
|  |  | 
|  | geniso() { | 
|  | tmp_dir=`dirname $FIMAGE`/isoimage | 
|  | rm -rf $tmp_dir | 
|  | mkdir $tmp_dir | 
|  | for i in lib lib64 share ; do | 
|  | for j in syslinux ISOLINUX ; do | 
|  | if [ -f /usr/$i/$j/isolinux.bin ] ; then | 
|  | isolinux=/usr/$i/$j/isolinux.bin | 
|  | fi | 
|  | done | 
|  | for j in syslinux syslinux/modules/bios ; do | 
|  | if [ -f /usr/$i/$j/ldlinux.c32 ]; then | 
|  | ldlinux=/usr/$i/$j/ldlinux.c32 | 
|  | fi | 
|  | done | 
|  | if [ -n "$isolinux" -a -n "$ldlinux" ] ; then | 
|  | break | 
|  | fi | 
|  | done | 
|  | if [ -z "$isolinux" ] ; then | 
|  | echo 'Need an isolinux.bin file, please install syslinux/isolinux.' | 
|  | exit 1 | 
|  | fi | 
|  | if [ -z "$ldlinux" ] ; then | 
|  | echo 'Need an ldlinux.c32 file, please install syslinux/isolinux.' | 
|  | exit 1 | 
|  | fi | 
|  | cp $isolinux $tmp_dir | 
|  | cp $ldlinux $tmp_dir | 
|  | cp $FBZIMAGE $tmp_dir/linux | 
|  | echo "$KCMDLINE" > $tmp_dir/isolinux.cfg | 
|  | if [ -f "$FDINITRD" ] ; then | 
|  | cp "$FDINITRD" $tmp_dir/initrd.img | 
|  | fi | 
|  | genisoimage -J -r -input-charset=utf-8 -quiet -o $FIMAGE \ | 
|  | -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 \ | 
|  | -boot-info-table $tmp_dir | 
|  | isohybrid $FIMAGE 2>/dev/null || true | 
|  | rm -rf $tmp_dir | 
|  | } | 
|  |  | 
|  | case $1 in | 
|  | bzdisk)     genbzdisk;; | 
|  | fdimage144) genfdimage144;; | 
|  | fdimage288) genfdimage288;; | 
|  | isoimage)   geniso;; | 
|  | *)          echo 'Unknown image format'; exit 1; | 
|  | esac |