run.sh 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # ======检查是否以sudo运行=================
  2. #uid=`id -u`
  3. #if [ ! $uid == "0" ];then
  4. # echo "请以sudo权限运行"
  5. # exit
  6. #fi
  7. # 第一个参数如果是--notbuild 那就不构建,直接运行
  8. if [ ! "$1" == "--nobuild" ]; then
  9. echo "开始构建..."
  10. make all -j 16
  11. make clean
  12. fi
  13. IA32_USE_QEMU=1
  14. bochsrc="./bochsrc"
  15. ARCH="x86_64"
  16. # 内核映像
  17. kernel='./bin/kernel/kernel.elf'
  18. iso_boot_grub='./iso/boot/grub'
  19. iso_boot='./iso/boot/'
  20. iso='./DragonOS.iso'
  21. iso_folder='./iso/'
  22. # toolchain
  23. OS=`uname -s`
  24. if [ "${OS}" == "Linux" ]; then
  25. GRUB_PATH="$(dirname $(which grub-file))"
  26. elif [ "${OS}" == "Darwin" ]; then
  27. GRUB_PATH="$(pwd)/tools/grub-2.04/build/grub/bin"
  28. fi
  29. export PATH="${GRUB_PATH}:$PATH"
  30. # ==============检查文件是否齐全================
  31. bins[0]=${kernel}
  32. for file in ${bins[*]};do
  33. if [ ! -x $file ]; then
  34. echo "$file 不存在!"
  35. exit
  36. fi
  37. done
  38. # ===============文件检查完毕===================
  39. # 如果是 i386/x86_64,需要判断是否符合 multiboot2 标准
  40. if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
  41. if ${GRUB_PATH}/grub-file --is-x86-multiboot2 ${kernel}; then
  42. echo Multiboot2 Confirmed!
  43. else
  44. echo NOT Multiboot2!
  45. exit
  46. fi
  47. fi
  48. # 检测路径是否合法,发生过 rm -rf -f /* 的惨剧
  49. if [ "${iso_boot}" == "" ]; then
  50. echo iso_boot path error.
  51. else
  52. mkdir -p ${iso_boot}
  53. rm -rf -f ${iso_boot}/*
  54. fi
  55. # 设置 grub 相关数据
  56. if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
  57. cp ${kernel} ${iso_boot}
  58. mkdir ${iso_boot_grub}
  59. touch ${iso_boot_grub}/grub.cfg
  60. echo 'set timeout=15
  61. set default=0
  62. menuentry "DragonOS" {
  63. multiboot2 /boot/kernel.elf "KERNEL_ELF"
  64. }' >${iso_boot_grub}/grub.cfg
  65. fi
  66. ${GRUB_PATH}/grub-mkrescue -o ${iso} ${iso_folder}
  67. rm -rf ${iso_folder}
  68. # 进行启动前检查
  69. flag_can_run=0
  70. if [ -d "${iso_folder}" ]; then
  71. flag_can_run=0
  72. echo "${iso_folder} 文件夹未删除!"
  73. else
  74. flag_can_run=1
  75. fi
  76. if [ $flag_can_run -eq 1 ]; then
  77. if [ ${IA32_USE_QEMU} == 0 ]; then
  78. bochs -q -f ${bochsrc} -rc ./tools/bochsinit
  79. else
  80. qemu-system-x86_64 -cdrom ${iso} -m 512M -smp 2,cores=2,threads=1,sockets=1 \
  81. -monitor stdio -d cpu_reset,guest_errors -s -S -cpu IvyBridge --enable-kvm \
  82. -drive id=disk,file=bin/disk.img,if=none \
  83. -device ahci,id=ahci \
  84. -device ide-hd,drive=disk,bus=ahci.0 \
  85. -usb
  86. fi
  87. else
  88. echo "不满足运行条件"
  89. fi