xref: /OK3568_Linux_fs/kernel/arch/x86/boot/genimage.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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