hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/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