genimage.sh 3.0 KB

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