1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# This file is subject to the terms and conditions of the GNU General Public 4*4882a593Smuzhiyun# License. See the file "COPYING" in the main directory of this archive 5*4882a593Smuzhiyun# for more details. 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun# Copyright (C) 2017 by Changbin Du <changbin.du@intel.com> 8*4882a593Smuzhiyun# 9*4882a593Smuzhiyun# Adapted from code in arch/x86/boot/Makefile by H. Peter Anvin and others 10*4882a593Smuzhiyun# 11*4882a593Smuzhiyun# "make fdimage/fdimage144/fdimage288/isoimage" script for x86 architecture 12*4882a593Smuzhiyun# 13*4882a593Smuzhiyun# Arguments: 14*4882a593Smuzhiyun# $1 - fdimage format 15*4882a593Smuzhiyun# $2 - target image file 16*4882a593Smuzhiyun# $3 - kernel bzImage file 17*4882a593Smuzhiyun# $4 - mtool configuration file 18*4882a593Smuzhiyun# $5 - kernel cmdline 19*4882a593Smuzhiyun# $6 - inird image file 20*4882a593Smuzhiyun# 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun# Use "make V=1" to debug this script 23*4882a593Smuzhiyuncase "${KBUILD_VERBOSE}" in 24*4882a593Smuzhiyun*1*) 25*4882a593Smuzhiyun set -x 26*4882a593Smuzhiyun ;; 27*4882a593Smuzhiyunesac 28*4882a593Smuzhiyun 29*4882a593Smuzhiyunverify () { 30*4882a593Smuzhiyun if [ ! -f "$1" ]; then 31*4882a593Smuzhiyun echo "" 1>&2 32*4882a593Smuzhiyun echo " *** Missing file: $1" 1>&2 33*4882a593Smuzhiyun echo "" 1>&2 34*4882a593Smuzhiyun exit 1 35*4882a593Smuzhiyun fi 36*4882a593Smuzhiyun} 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun 39*4882a593Smuzhiyunexport MTOOLSRC=$4 40*4882a593SmuzhiyunFIMAGE=$2 41*4882a593SmuzhiyunFBZIMAGE=$3 42*4882a593SmuzhiyunKCMDLINE=$5 43*4882a593SmuzhiyunFDINITRD=$6 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun# Make sure the files actually exist 46*4882a593Smuzhiyunverify "$FBZIMAGE" 47*4882a593Smuzhiyun 48*4882a593Smuzhiyungenbzdisk() { 49*4882a593Smuzhiyun verify "$MTOOLSRC" 50*4882a593Smuzhiyun mformat a: 51*4882a593Smuzhiyun syslinux $FIMAGE 52*4882a593Smuzhiyun echo "$KCMDLINE" | mcopy - a:syslinux.cfg 53*4882a593Smuzhiyun if [ -f "$FDINITRD" ] ; then 54*4882a593Smuzhiyun mcopy "$FDINITRD" a:initrd.img 55*4882a593Smuzhiyun fi 56*4882a593Smuzhiyun mcopy $FBZIMAGE a:linux 57*4882a593Smuzhiyun} 58*4882a593Smuzhiyun 59*4882a593Smuzhiyungenfdimage144() { 60*4882a593Smuzhiyun verify "$MTOOLSRC" 61*4882a593Smuzhiyun dd if=/dev/zero of=$FIMAGE bs=1024 count=1440 2> /dev/null 62*4882a593Smuzhiyun mformat v: 63*4882a593Smuzhiyun syslinux $FIMAGE 64*4882a593Smuzhiyun echo "$KCMDLINE" | mcopy - v:syslinux.cfg 65*4882a593Smuzhiyun if [ -f "$FDINITRD" ] ; then 66*4882a593Smuzhiyun mcopy "$FDINITRD" v:initrd.img 67*4882a593Smuzhiyun fi 68*4882a593Smuzhiyun mcopy $FBZIMAGE v:linux 69*4882a593Smuzhiyun} 70*4882a593Smuzhiyun 71*4882a593Smuzhiyungenfdimage288() { 72*4882a593Smuzhiyun verify "$MTOOLSRC" 73*4882a593Smuzhiyun dd if=/dev/zero of=$FIMAGE bs=1024 count=2880 2> /dev/null 74*4882a593Smuzhiyun mformat w: 75*4882a593Smuzhiyun syslinux $FIMAGE 76*4882a593Smuzhiyun echo "$KCMDLINE" | mcopy - W:syslinux.cfg 77*4882a593Smuzhiyun if [ -f "$FDINITRD" ] ; then 78*4882a593Smuzhiyun mcopy "$FDINITRD" w:initrd.img 79*4882a593Smuzhiyun fi 80*4882a593Smuzhiyun mcopy $FBZIMAGE w:linux 81*4882a593Smuzhiyun} 82*4882a593Smuzhiyun 83*4882a593Smuzhiyungeniso() { 84*4882a593Smuzhiyun tmp_dir=`dirname $FIMAGE`/isoimage 85*4882a593Smuzhiyun rm -rf $tmp_dir 86*4882a593Smuzhiyun mkdir $tmp_dir 87*4882a593Smuzhiyun for i in lib lib64 share ; do 88*4882a593Smuzhiyun for j in syslinux ISOLINUX ; do 89*4882a593Smuzhiyun if [ -f /usr/$i/$j/isolinux.bin ] ; then 90*4882a593Smuzhiyun isolinux=/usr/$i/$j/isolinux.bin 91*4882a593Smuzhiyun fi 92*4882a593Smuzhiyun done 93*4882a593Smuzhiyun for j in syslinux syslinux/modules/bios ; do 94*4882a593Smuzhiyun if [ -f /usr/$i/$j/ldlinux.c32 ]; then 95*4882a593Smuzhiyun ldlinux=/usr/$i/$j/ldlinux.c32 96*4882a593Smuzhiyun fi 97*4882a593Smuzhiyun done 98*4882a593Smuzhiyun if [ -n "$isolinux" -a -n "$ldlinux" ] ; then 99*4882a593Smuzhiyun break 100*4882a593Smuzhiyun fi 101*4882a593Smuzhiyun done 102*4882a593Smuzhiyun if [ -z "$isolinux" ] ; then 103*4882a593Smuzhiyun echo 'Need an isolinux.bin file, please install syslinux/isolinux.' 104*4882a593Smuzhiyun exit 1 105*4882a593Smuzhiyun fi 106*4882a593Smuzhiyun if [ -z "$ldlinux" ] ; then 107*4882a593Smuzhiyun echo 'Need an ldlinux.c32 file, please install syslinux/isolinux.' 108*4882a593Smuzhiyun exit 1 109*4882a593Smuzhiyun fi 110*4882a593Smuzhiyun cp $isolinux $tmp_dir 111*4882a593Smuzhiyun cp $ldlinux $tmp_dir 112*4882a593Smuzhiyun cp $FBZIMAGE $tmp_dir/linux 113*4882a593Smuzhiyun echo "$KCMDLINE" > $tmp_dir/isolinux.cfg 114*4882a593Smuzhiyun if [ -f "$FDINITRD" ] ; then 115*4882a593Smuzhiyun cp "$FDINITRD" $tmp_dir/initrd.img 116*4882a593Smuzhiyun fi 117*4882a593Smuzhiyun genisoimage -J -r -input-charset=utf-8 -quiet -o $FIMAGE \ 118*4882a593Smuzhiyun -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 \ 119*4882a593Smuzhiyun -boot-info-table $tmp_dir 120*4882a593Smuzhiyun isohybrid $FIMAGE 2>/dev/null || true 121*4882a593Smuzhiyun rm -rf $tmp_dir 122*4882a593Smuzhiyun} 123*4882a593Smuzhiyun 124*4882a593Smuzhiyuncase $1 in 125*4882a593Smuzhiyun bzdisk) genbzdisk;; 126*4882a593Smuzhiyun fdimage144) genfdimage144;; 127*4882a593Smuzhiyun fdimage288) genfdimage288;; 128*4882a593Smuzhiyun isoimage) geniso;; 129*4882a593Smuzhiyun *) echo 'Unknown image format'; exit 1; 130*4882a593Smuzhiyunesac 131