start_vm 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #!/bin/sh
  2. #
  3. # This software is a part of ISAR.
  4. # Copyright (C) 2015-2017 ilbers GmbH
  5. set -e
  6. ES_OK=0
  7. ES_BUG=3
  8. # Convert bitbake assignments to shell ones
  9. # a = b a=b
  10. # a ?= b a=b
  11. # TODO: Use bitbake to parse vars correctly (overriding in local.conf, etc.)
  12. bb2sh() {
  13. sed 's/[[:space:]]*?*=[[:space:]]*/=/'
  14. }
  15. start_qemu() {
  16. root=`echo $QEMU_DISK_ARGS \
  17. | sed 's,##ROOTFS_IMAGE##,'$IMAGE_DIR/$ROOTFS_IMAGE','`
  18. local had_x
  19. echo $- | grep -q x && had_x=1 || had_x=0
  20. [ $had_x -eq 0 ] && set -x
  21. qemu-system-$QEMU_ARCH \
  22. -m 1024M \
  23. -M $QEMU_MACHINE \
  24. $QCPU \
  25. -nographic \
  26. $EXTRA_ARGS \
  27. -append "$KARGS" \
  28. $root
  29. [ $had_x -eq 0 ] && set +x
  30. }
  31. show_help() {
  32. echo "This script runs ISAR image in QEMU emulator."
  33. echo
  34. echo "Usage:"
  35. echo " $0 [params] [BUILD_DIR]"
  36. echo "BUILD_DIR is your ISAR build folder. If not set, current folder"
  37. echo "is used."
  38. echo
  39. echo "Parameters:"
  40. echo " -a, --arch ARCH set isar machine architecture."
  41. echo " Supported: arm, i386, amd64, arm64."
  42. echo " -b, --build BUILD set path to build directory."
  43. echo " -d, --distro DISTRO set isar Debian distribution."
  44. echo " Supported: stretch, buster"
  45. echo " -o, --out FILE Route QEMU console output to"
  46. echo " specified file."
  47. echo " -p, --pid FILE Store QEMU pid to file."
  48. echo " --help display this message and exit."
  49. echo
  50. echo "Exit status:"
  51. echo " 0 if OK,"
  52. echo " 3 if invalid parameters are passed."
  53. }
  54. # Set default values, that can be overwritten from command line
  55. ARCH=arm
  56. DISTRO=stretch
  57. BUILD_DIR=$PWD
  58. # Parse command line to get user configuration
  59. while [ $# -gt 0 ]
  60. do
  61. key="$1"
  62. case $key in
  63. -h|--help)
  64. show_help
  65. exit 0
  66. ;;
  67. -a|--arch)
  68. ARCH=$2
  69. shift
  70. ;;
  71. -b|--build)
  72. BUILD_DIR=$2
  73. shift
  74. ;;
  75. -d|--distro)
  76. DISTRO=$2
  77. shift
  78. ;;
  79. -o|--out)
  80. EXTRA_ARGS="$EXTRA_ARGS -serial file:$2"
  81. shift
  82. ;;
  83. -p|--pid)
  84. EXTRA_ARGS="$EXTRA_ARGS -pidfile $2"
  85. shift
  86. ;;
  87. *)
  88. echo "error: invalid parameter '$key', please try '--help' to get list of supported parameters"
  89. exit $ES_BUG
  90. ;;
  91. esac
  92. shift
  93. done
  94. eval $(bitbake -e multiconfig:qemu$ARCH-$DISTRO:isar-image-base | grep "^DEPLOY_DIR_IMAGE=")
  95. readonly IMAGE_DIR=$DEPLOY_DIR_IMAGE
  96. readonly ISARROOT="$(dirname "$0")"/..
  97. readonly MACHINE_CONF=$ISARROOT/meta-isar/conf/machine/qemu$ARCH.conf
  98. eval "$(egrep 'MACHINE_SERIAL' $MACHINE_CONF |bb2sh)"
  99. readonly CONFIG_CONF=$ISARROOT/meta-isar/conf/multiconfig/qemu$ARCH-$DISTRO.conf
  100. eval "$(egrep 'QEMU_' $CONFIG_CONF |bb2sh)"
  101. eval $(bitbake -e multiconfig:qemu$ARCH-$DISTRO:isar-image-base | grep "^IMAGE_TYPE=")
  102. case "$IMAGE_TYPE" in
  103. ext4-img)
  104. readonly ROOTFS_IMAGE=isar-image-base-debian-$DISTRO-qemu$ARCH.ext4.img
  105. eval $(bitbake -e multiconfig:qemu$ARCH-$DISTRO:isar-image-base | grep "^KERNEL_IMAGE=")
  106. eval $(bitbake -e multiconfig:qemu$ARCH-$DISTRO:isar-image-base | grep "^INITRD_IMAGE=")
  107. QKERNEL=$IMAGE_DIR/${KERNEL_IMAGE}
  108. QINITRD=/dev/null
  109. [ -n "$INITRD_IMAGE" ] && QINITRD=$IMAGE_DIR/${INITRD_IMAGE}
  110. EXTRA_ARGS="$EXTRA_ARGS \
  111. -kernel $QKERNEL \
  112. -initrd $QINITRD"
  113. KARGS="console=$MACHINE_SERIAL root=/dev/$QEMU_ROOTFS_DEV rw"
  114. ;;
  115. wic-img)
  116. readonly ROOTFS_IMAGE=isar-image-base-debian-$DISTRO-qemu$ARCH.wic.img
  117. EXTRA_ARGS="$EXTRA_ARGS -snapshot"
  118. ;;
  119. *)
  120. echo "IMAGE_TYPE \"$IMAGE_TYPE\" not supported"
  121. exit 1
  122. ;;
  123. esac
  124. QCPU=
  125. [ -n "$QEMU_CPU" ] && QCPU="-cpu $QEMU_CPU"
  126. start_qemu
  127. exit $ES_OK