run_in_qemu.sh 1.6 KB

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