run_in_qemu.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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
  11. make clean
  12. fi
  13. # ==============检查文件是否齐全================
  14. bins[0]=bin/bootloader/boot.bin
  15. bins[1]=bin/bootloader/loader.bin
  16. bins[2]=bin/boot.img
  17. bins[3]=bin/kernel/kernel.bin
  18. for file in ${bins[*]};do
  19. if [ ! -x $file ]; then
  20. echo "$file 不存在!"
  21. exit
  22. fi
  23. done
  24. # ===============文件检查完毕===================
  25. # =========将引导程序写入boot.img=============
  26. dd if=bin/bootloader/boot.bin of=bin/boot.img bs=512 count=1 conv=notrunc
  27. # =========创建临时文件夹==================
  28. # 判断临时文件夹是否存在,若不存在则创建新的
  29. if [ ! -d "tmp/" ]; then
  30. mkdir tmp/
  31. echo "创建了tmp文件夹"
  32. fi
  33. # ==============挂载boot.img=============
  34. mkdir tmp/boot
  35. mount bin/boot.img tmp/boot -t vfat -o loop
  36. # 检查是否挂载成功
  37. if mountpoint -q tmp/boot
  38. then
  39. echo "成功挂载 boot.img 到 tmp/boot"
  40. # ========把loader.bin复制到boot.img==========
  41. cp bin/bootloader/loader.bin tmp/boot
  42. # ========把内核程序复制到boot.img======
  43. cp bin/kernel/kernel.bin tmp/boot
  44. sync
  45. # 卸载磁盘
  46. umount tmp/boot
  47. else
  48. echo "挂载 boot.img 失败!"
  49. fi
  50. # 运行结束后删除tmp文件夹
  51. rm -rf tmp
  52. # 进行启动前检查
  53. flag_can_run=0
  54. if [ -d "tmp/" ]; then
  55. flag_can_run=0
  56. echo "tmp文件夹未删除!"
  57. else
  58. flag_can_run=1
  59. fi
  60. if [ $flag_can_run -eq 1 ]; then
  61. qemu-system-x86_64 -s -S -m 2048 -fda bin/boot.img
  62. else
  63. echo "不满足运行条件"
  64. fi