build.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/bin/sh
  2. directory="build/bin"
  3. if [ ! -d "$directory" ]; then
  4. mkdir -p $directory
  5. fi
  6. echo "Compiling mbr..."
  7. nasm -I boot/include/ -o $directory/mbr.bin boot/mbr.S
  8. if [ $? -eq 0 ]; then
  9. echo "MBR compiled successfully."
  10. else
  11. echo "MBR compiled failed."
  12. exit
  13. fi
  14. echo "Compiling loader..."
  15. nasm -I boot/include/ -o $directory/loader.bin boot/loader.S
  16. if [ $? -eq 0 ]; then
  17. echo "Bootloader compiled successfully."
  18. else
  19. echo "Bootloader compiled failed."
  20. exit
  21. fi
  22. echo "Compiling kernel..."
  23. directory="build"
  24. if [ ! -d "$directory" ]; then
  25. mkdir $directory
  26. fi
  27. i386-elf-gcc -I lib/ -I lib/kernel/ -c -fno-builtin -o build/timer.o device/timer.c
  28. i386-elf-gcc -I ./lib/ -I lib/kernel/ -I kernel/ -c -fno-builtin -o build/main.o kernel/main.c
  29. nasm -f elf -o build/print.o lib/kernel/print.S
  30. nasm -f elf -o build/kernel.o kernel/kernel.S
  31. i386-elf-gcc -I lib/kernel/ -I ./lib/ -I kernel/ -c -fno-builtin -o build/interrupt.o kernel/interrupt.c
  32. i386-elf-gcc -I lib/kernel/ -I ./lib/ -I kernel/ -c -fno-builtin -o build/init.o kernel/init.c
  33. directory="build/bin"
  34. if [ ! -d "$directory" ]; then
  35. mkdir $directory
  36. fi
  37. i386-elf-ld -Ttext 0xc0001500 -e main -o $directory/kernel.bin build/main.o build/init.o build/interrupt.o build/print.o build/kernel.o build/timer.o
  38. if [ $? -eq 0 ]; then
  39. echo "Kernel compiled successfully."
  40. else
  41. echo "Kernel compiled failed."
  42. exit
  43. fi
  44. echo "Creating disk image..."
  45. bximage -q -func=create -hd=30M hd30M.img
  46. if [ $? -eq 0 ]; then
  47. echo "Disk image created successfully."
  48. else
  49. echo "Disk image created failed."
  50. exit
  51. fi
  52. echo "Installing to disk image..."
  53. echo " 0. Writing mbr to disk..."
  54. dd if=$directory/mbr.bin of=hd30M.img bs=512 count=1 conv=notrunc
  55. if [ $? -eq 0 ]; then
  56. echo "Install mbr to disk image successfully."
  57. else
  58. echo "Install mbr to disk image failed."
  59. exit
  60. fi
  61. echo " 1. Writing loader to disk..."
  62. dd if=$directory/loader.bin of=hd30M.img bs=512 count=4 seek=2 conv=notrunc
  63. if [ $? -eq 0 ]; then
  64. echo "Install loader to disk image successfully."
  65. else
  66. echo "Install loader to disk image failed."
  67. exit
  68. fi
  69. echo " 2. Writing kernel to disk..."
  70. dd if=$directory/kernel.bin of=hd30M.img bs=512 count=200 seek=9 conv=notrunc
  71. if [ $? -eq 0 ]; then
  72. echo "Install kernel to disk image successfully."
  73. else
  74. echo "Install kernel to disk image failed."
  75. exit
  76. fi
  77. echo "Now starting bochs ..."
  78. bochs -f bochsrc -q